Como posso verificar criptograficamente se alguém é proprietário do site que afirma possuir?

Como posso verificar criptograficamente se alguém é proprietário do site que afirma possuir?

Mais especificamente, posso fazer com que eles assinem uma sequência de texto com seu certificado privado x509 e depois verificá-lo usando o certificado público usado pelo site em questão? Talvez eu pudesse fornecer-lhes um certificado não assinado para assinarem ou algo nesse sentido.

Desde já, obrigado :)

Responder1

Sim, como você sugeriu, você pode enviar a eles uma sequência de bytes (neste contexto, podemos chamá-lo de texto de desafio) e fazer com que eles a criptografem com a chave privada SSL/TLS do servidor e enviem de volta o texto cifrado, então você pode verificá-lo descriptografando-o com a chave pública do certificado do servidor SSL/TLS.

Ou você pode gerar uma sequência de bytes, criptografá-la com a chave pública do certificado do servidor, enviá-la a eles, fazer com que eles a descriptografem com a chave privada do servidor e enviar de volta o texto não criptografado original.

Observe, porém, que relativamente poucas pessoas sabem como fazer coisas assim com sua chave privada SSL, então não se surpreenda se você tiver que fornecer instruções passo a passo para encontrar sua chave privada e criptografar ou descriptografar sua chave privada. desafio.

Responder2

Você pode fazer com que eles lhe enviem um e-mail desse domínio ou façam um whois (CLI ou usemhttps://www.whois.net/) e veja se o contato está listado ou peça que carreguem uma página de verificação no site. url/yeaIownthis.html com alguma senha ou algo assim.

Responder3

Aqui está um método usando M2Crypto e 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

Trecho retirado deesseartigo.

informação relacionada