А именно, могу ли я заставить их подписать строку текста с помощью их личного сертификата 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
Отрывок взят изэтотстатья.