如果给出签名的根证书,您如何验证证书?我到目前为止:
$root_x509 = Crypt::OpenSSL::X509->new_from_string($root_key_data, FORMAT_ASN1);
$root_key = Crypt::OpenSSL::RSA->new_public_key($x509->pubkey());
$other_x509 = Crypt::OpenSSL::X509->new_from_string($other_key_data, FORMAT_ASN1);
$other_key = Crypt::OpenSSL::RSA->new_public_key($x509->pubkey());
好的,那又怎样?我没有看到明显的$root_key->verify_certificate($other_x509)
; Crypt :: OpenSSL :: VerifyX509是唯一/最好的答案吗?该模块在编译和安装方面存在问题,但如果可行的话,我将继续这样做。但我觉得我错过了一些东西。
例如,看起来python有一个明显的API,相当于我在任何OpenSSL perl库中都看不到的那样:
trusted_store = X509Store()
trusted_store.add_cert(trusted_root)
try:
X509StoreContext(trusted_store, itunes_cert).verify_certificate()
except X509StoreContextError as e:
print("iTunes certificate invalid")
答案 0 :(得分:0)
经过广泛的研究,除了Crypt :: OpenSSL :: VerifyX509(见上文)之外,最接近完整解决方案的是Net :: SSLeay,它有一大堆与openssl的低级绑定。他们最近补充说:
1.83 2018-01-06
X509_STORE_CTX_new and X509_verify_cert
但文档很少,我无法通过相关的段错误。
相反,我手工验证了证书链:
并重复链中的每个证书。
检查每个证书的有效日期和扩展功能是其中的一部分。