[英]How to authenticate a public key with certificate authority using Python?
import OpenSSL
key = ...
signature = ...
data = ...
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, key)
OpenSSL.crypto.verify(x509, signature, data, 'sha1')
到目前為止,我能夠毫無問題地完成所有這些工作。 但是,它並不覺得這是足夠的安全性,因為密鑰本身是通過URL(我應該信任*)給我的,並且構建簽名的方法是公開可用的。
因此,據說該密鑰被“VeriSign Class 3 Code Signing 2010 CA”驗證,任何人都可以告訴我如何檢查這是一個有效的聲明嗎?
我猜我需要在我的機器上本地獲得VeriSign證書。 假設我這樣做,我從那里去哪里?
謝謝!
* URL作為JSON請求中的參數提供給我。 當然,URL將是HTTPS,我可以檢查域名和所有這些。 但似乎我應該對證書本身進行檢查
也許我只能部分解決你的問題。 您最大的擔心似乎是獲取密鑰的渠道的安全性。 您沒有顯示任何獲取該密鑰的代碼,但您說您通過HTTPS檢索它,現在您想通過證書驗證來驗證此連接的真實性。
您可以使用完善的第三方Web客戶端框架請求輕松地這樣做。
從文檔引用:
請求可以驗證HTTPS請求的SSL證書,就像Web瀏覽器一樣。 要檢查主機的SSL證書,可以使用verify參數:
requests.get(url, verify=True)
也:
您可以使用受信任CA的證書驗證路徑到CA_BUNDLE文件。
后者看起來像
requests.get(url, verify='/path/to/cert.pem')
如果您確實想要控制(並降低復雜性),請從http://www.symantec.com/page.jsp?id=roots加載正確的文件,並將verify='/path/to/cert.pem'
方法。 我想你需要http://www.symantec.com/content/en/us/enterprise/verisign/roots/Class-3-Public-Primary-Certification-Authority-G2.pem
你應該檢查證書本身是對的。 是的,您需要簽署要檢查的證書的VeriSign根證書(以及具有完整信任鏈的任何其他中間證書)。
下載並解壓縮zip文件並查找您希望信任的所有證書,並將它們(以pem格式)放在一個證書包文件中。
現在您需要進行實際驗證。 不幸的是,您需要的OpenSSL調用是X509_verify_certificate
。 我查看了pyopenssl和M2Crypto的源代碼,並且都沒有公開該調用,因此沒有直接的Python代碼可以調用以使用這些軟件包中的任何一個來驗證證書。
但是,由於您使用的是pyopenssl,因此您顯然可以使用openssl庫。 因此,您可能已經或可以輕松安裝openssl命令行工具集。 如果是這樣,您可以通過執行以下操作來通過管道調用openssl verify
命令:
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, key)
# the command like likes pem format
cert_pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
# the bundle that you created from the zip extraction
certificate_bundle = 'verisign-root-bundle.pem'
# Pipe the cert to the openssl verify command and check the return code
# a return code of 0 is successful verify
import subprocess
p = subprocess.Popen(['openssl', 'verify', '-CAfile', certificate_bundle],
stdin=subprocess.PIPE)
p.communicate(input=cert_pem)
p.wait()
if (p.returncode == 0):
print('Certificate Verified.')
else:
print('Problem with certificate')
上面的管道運行命令
openssl verify -CAfile ca.bundle certificate.pem
最后,如果您不熟悉openssl,則顯示證書的命令是
openssl x509 -inform PEM -text -in certificate.pem
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.