首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Openssl: 0深度查找错误20 :无法获得本地颁发者证书

Openssl: 0深度查找错误20 :无法获得本地颁发者证书
EN

Stack Overflow用户
提问于 2020-09-10 02:13:10
回答 1查看 3.2K关注 0票数 1

我使用Python创建了3个证书: rootca.crt、intermediateca.crt和server.crt。我使用rootca.crt来签署intermediateca.crt,它的工作原理与预期的一样:

代码语言:javascript
运行
AI代码解释
复制
openssl verify -CAfile rootca.crt intermediateca.crt
intermediateca.crt: OK

然后,我与中间ca签署了server.crt,但是验证失败了:

代码语言:javascript
运行
AI代码解释
复制
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之外。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 05:29:30

中间CA不能用于验证服务器证书,因为其主题名称与服务器证书中指定的颁发者名称不匹配。

让我们让openssl转储主题和发行者名称。-xx_hash显示了openssl用于构建证书链的散列:

代码语言:javascript
运行
AI代码解释
复制
$ 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

很好,中间的发布者名称与根的主题名相匹配。链条的那一部分起作用了。

代码语言:javascript
运行
AI代码解释
复制
$ 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告诉你它找不到发行人时,它是正确的。

我不知道你是怎么弄到这个状态的,我猜可能是主体或发行者名字的错误配置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63827480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档