我使用Python创建了3个证书: rootca.crt、intermediateca.crt和server.crt。我使用rootca.crt来签署intermediateca.crt,它的工作原理与预期的一样:
openssl verify -CAfile rootca.crt intermediateca.crt
intermediateca.crt: OK
然后,我与中间ca签署了server.crt,但是验证失败了:
openssl verify -CAfile rootca.crt -untrusted intermediateca.crt server.crt
server.crt: C = DE, ST = mein Bundesland, L = meine Stadt, O = meine Firma, CN = server.example.com, emailAddress = info@meine-firma.de
error 20 at 0 depth lookup:unable to get local issuer certificate
当我解析证书时,server.crt权威密钥标识符与中间密钥标识符匹配。有人能给我个提示吗?如果我使用openssl命令行工具生成相同的证书,它就能工作。解析的内容是相同的,除了权威密钥标识符还包含openssl生成的证书的序列和cn之外。
发布于 2020-09-10 05:29:30
中间CA不能用于验证服务器证书,因为其主题名称与服务器证书中指定的颁发者名称不匹配。
让我们让openssl
转储主题和发行者名称。-xx_hash
显示了openssl
用于构建证书链的散列:
$ openssl x509 -subject -subject_hash -noout -in rootca.crt
subject=C = DE, ST = mein Bundesland, L = meine Stadt, O = meine Firma, OU = meine Abteilung, CN = serviceserver.example.com, emailAddress = info@meine-firma.de
347e2056
$ openssl x509 -issuer -issuer_hash -noout -in intermediateca.crt
issuer=C = DE, ST = mein Bundesland, L = meine Stadt, O = meine Firma, OU = meine Abteilung, CN = serviceserver.example.com, emailAddress = info@meine-firma.de
347e2056
很好,中间的发布者名称与根的主题名相匹配。链条的那一部分起作用了。
$ openssl x509 -subject -subject_hash -noout -in intermediateca.crt
subject=C = DE, ST = mein Bundesland, L = meine Stadt, O = meine Firma, CN = serviceserver.example.com, emailAddress = info@meine-firma.de
c4dff14c
$ openssl x509 -issuer -issuer_hash -noout -in server.crt
issuer=C = DE, ST = mein Bundesland, L = meine Stadt, O = meine Firma, OU = meine Abteilung, CN = serviceserver.example.com, emailAddress = info@meine-firma.de
347e2056
散列是不同的,所以openssl不能将中间CA连接到服务器证书。区别在于中间层的主题名称包含一个OU
字段,而服务器的颁发者名称不包含。当openssl
告诉你它找不到发行人时,它是正确的。
我不知道你是怎么弄到这个状态的,我猜可能是主体或发行者名字的错误配置。
https://stackoverflow.com/questions/63827480
复制相似问题