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

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

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

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

решение1

Да, как вы и предложили, вы можете отправить им строку байтов (в этом контексте мы могли бы назвать это текстом-вызовом) и попросить их зашифровать ее с помощью закрытого ключа SSL/TLS своего сервера и отправить обратно зашифрованный текст, а затем вы можете проверить его, расшифровав его с помощью открытого ключа из сертификата SSL/TLS своего сервера.

Или вы можете сгенерировать строку байтов, зашифровать ее с помощью открытого ключа из сертификата их сервера, отправить ее им, попросить их расшифровать ее с помощью закрытого ключа их сервера и отправить вам исходный открытый текст.

Однако следует отметить, что относительно немногие люди знают, как делать подобные вещи с помощью своего закрытого ключа SSL, поэтому не удивляйтесь, если вам придется предоставить им пошаговые инструкции по поиску их закрытого ключа и шифрованию или расшифровке вашего задания.

решение2

Вы можете попросить их отправить вам электронное письмо с этого домена или выполнить whois (CLI или использоватьhttps://www.whois.net/) и посмотрите, есть ли их контакт в списке, или вы можете попросить их загрузить страницу проверки на свой сайт. url/yeaIownthis.html с каким-нибудь паролем или чем-то в этом роде.

решение3

Вот метод с использованием M2Crypto и 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

Отрывок взят изэтотстатья.

Связанный контент