Как я могу криптографически подтвердить, что кто-то владеет веб-сайтом, на который он претендует?

319
derrend

Более конкретно, могу ли я заставить их подписать текстовую строку своим личным сертификатом x509, а затем я могу подтвердить это с помощью общедоступного сертификата, используемого на соответствующем веб-сайте? Возможно, я мог бы предоставить им неподписанный сертификат для подписи или что-то в этом роде.

Заранее спасибо :)

1
Это подтвердит право владения закрытым ключом, а не веб-сайтом. Лучший способ подтвердить право собственности на сайт - это загрузить на него файл с согласованным содержанием. Paul 8 лет назад 1
Человек, имеющий доступ к этому секретному ключу, будет владельцем / авторитетом сайта, хотя я бы надеялся :) derrend 8 лет назад 0
Таким образом, ответ зависит от вашей цели? Вы не можете «криптографически подтвердить, что они владеют сайтом», потому что кто-то другой может иметь доступ к закрытому ключу, кроме владельца сайта. Единственный способ подтвердить, что они владеют самим сайтом, - это заставить их внести согласованное изменение. Если они загружают файл на веб-сайт, и вы получаете к нему доступ через https, тогда файл шифруется их закрытым ключом, а вы расшифровываете его с помощью открытого ключа. Это такой же процесс, как если бы они делали это вручную. Paul 8 лет назад 0
(Я должен отметить, что я прошел большинство этапов, используя openssl, прежде чем понял, что просто делаю то, что делает веб-сервер) Paul 8 лет назад 0
Я понимаю, откуда ты. Я также понимаю, что выполняю то же действие, что и сервер, к счастью, так проще думать об этом :) derrend 8 лет назад 0

3 ответа на вопрос

2
Spiff

Yes, as you suggested, you could send them a string of bytes ( in this context we might call it a challenge text) and have them encrypt it with their server's SSL/TLS private key and send back the ciphertext, then you can verify it by decrypting it with the public key from their SSL/TLS server cert.

Or you could generate a string of bytes, encrypt it with the public key from their server cert, send it to them, have them decrypt it with their server's private key, and have them send you back the original cleartext.

Note, though, that relatively few people know how to do things like this with their SSL private key, so don't be surprised if you have to provide them with step-by-step instructions for finding their private key and encrypting or decrypting your challenge.

Фантастика! Теперь, где я могу найти это руководство, о котором ты говоришь? лол, мне нужно научиться этому :) derrend 8 лет назад 0
"man openssl" "man x509" "man rsa" "man enc" haha Spiff 8 лет назад 0
лол, черт возьми. :) derrend 8 лет назад 0
0
Alex Atkinson

You can have them send you an email from that domain, or do a whois (CLI or use https://www.whois.net/) and see if their contact is listed, or you can have them upload a verification page to their site. url/yeaIownthis.html with some password on it or something.

Очень признателен, это, безусловно, вариант, но если это можно сделать криптографически, я бы предпочел это. Возможно, я мог бы предоставить им неподписанный сертификат для подписи? derrend 8 лет назад 0
Дайте мне сценарий. Поймите, что центры сертификации (то есть VeriSign), которые выдают сертификаты, выполняют большую работу, чтобы удостоверить личность людей, которым выданы сертификаты (в любом случае сертификат расширенной проверки. Доменные сертификаты легко получить.) Таким образом, вы можете доверять этому человеку. владеет веб-сайтом до тех пор, пока он предлагает удостоверение личности к вашему собственному удовлетворению. Вы не можете проверить их сертификат, потому что вы не являетесь эмитентом. Alex Atkinson 8 лет назад 0
Почему бы просто не разместить что-то на своей веб-странице? Если вы используете HTTPS, значит, он криптографический. David Schwartz 8 лет назад 0
Вот хорошее объяснение. http://security.stackexchange.com/questions/56389/ssl-certificate-framework-101-how-does-the-browser-actually-verify-the-validity Alex Atkinson 8 лет назад 0
Я пытаюсь написать сценарий, чтобы мне не приходилось делать это вручную, а подписанная строка или файл казались разумной вещью для пользователя. Я надеялся, что смогу узнать, что у них есть доступ к частному x.509, сверяясь с общедоступным x.509, доступным через веб-сайт, используя openssl или что-то в этом роде. derrend 8 лет назад 0
http://giantdorks.org/alain/shell-script-to-check-ssl-certificate-info-like-expiration-date-and-subject/? Alex Atkinson 8 лет назад 0
0
derrend

Here is a method using M2Crypto and python:

f = open(CERT_FILE) cert_buffer = f.read() f.close() from M2Crypto import RSA, X509 cert = X509.load_cert_string(cert_<wbr>buffer, X509.FORMAT_PEM) pub_key = cert.get_pubkey() rsa_key = pub_key.get_rsa() cipher = rsa_key.public_encrypt('<wbr>plaintext', RSA.pkcs1_padding) print cipher ReadRSA = RSA.load_key(KEY_FILE) try: plaintext = ReadRSA.private_decrypt (cipher, RSA.pkcs1_padding) except: print "Error: wrong key?" plaintext = "" print plaintext 

Excerpt taken from this article.

Похожие вопросы