“验证返回码:21(无法验证第一个证书)”
Posted
技术标签:
【中文标题】“验证返回码:21(无法验证第一个证书)”【英文标题】:"Verify return code: 21 (unable to verify the first certificate)" 【发布时间】:2017-09-07 08:11:03 【问题描述】:我在使用 openssl 时遇到问题,抱怨无法验证我也拥有 CA 链的本地颁发的证书。除了本地 CA 链证书(CER、PEM、CRT)之外,我还拥有本地颁发的证书(PEM 和 CRT)。根和颁发者是同一台服务器。比较两个证书上的文本,两者都匹配“颁发者:”字段。这是 Redhat Linux 服务器。 我收到错误“验证错误:num=20:无法获取本地颁发者证书”和
我不知道该寻找什么了。感谢任何反馈。
谢谢
乔恩
故障排除步骤
我确实使用 cerutil certutil -d /etc/pki/nssdb -A -t "C,," -n DomainA1-Server1CA -i /root/DomainA1-Server1CA.cer 将颁发者 CA 证书添加到 linux 证书中李>-Ran certutil -d /etc/pki/nssdb -L 我可以在那里看到证书
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
DomainA1-Server1CA C,,
运行 openssl s_client -connect ServerA2:443 -CAfile /root/certs/DomainA1-Server1CA.cer,尝试使用(.CRT 和 .PEM),出现上述 2 个错误。 -Ran openssl s_client -connect ServerA2:443 -CApath /root/certs,尝试使用(.CRT 和 .PEM),出现上述 2 个错误。
运行 openssl s_client -connect ServerA2:443 。上面有 2 个错误。
颁发的证书 sn-p
Data:
Version: 3 (0x2)
Serial Number:
54:a9:50:a3:00:01:00:00:14:47
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=domainA1, CN=DomainA1-Server1CA
Validity
Not Before: April 5 16:45:48 2017 GMT
Not After : April 5 16:45:48 2019 GMT
Subject: C=US, ST=NY, L=CityA, O=CompanyNAME, OU=IT,
CN=ServerB1.DomainA1.com
CA 链证书
Data: Version: 3 (0x2)
Serial Number: 19:11:eb:af:4c:d5:a9:94:49:ka:2f:41:f2:e1:09:g2
Signature Algorithm: sha256WithRSAEncryption
Issuer: DC=com, DC=domainA1, CN=DomainA1-Server1CA
Validity
Not Before: Aug 15 18:41:45 2015 GMT
Not After : Aug 15 18:41:45 2025 GMT Subject: DC=com, DC=domainA1,
CN=DomainA1-Server1CA Subject Public Key Info:
Public Key Algorithm: rsaEncryption Public-Key: (2048 bit)
...C.A
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
【问题讨论】:
【参考方案1】:在服务器上启用 SSL 证书后。
您可以通过以下命令进行测试。
$ openssl s_client -connect <server name>:443
输出:
CONNECTED(00000003)
depth=0 OU = Domain Control Validated, CN = <server-name>
verify error:num=20:unable to get local issuer certificate
verify return:1
-----------
-----------
Start Time: 1492427495
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
如果出现上述错误(返回代码:20.. 或返回代码 21)
在 /etc/apache2/site-available/default-ssl.conf 文件中添加以下行
SSLCertificateFile /home/ubuntu/cert/e4720ca1b42c1ebb.crt
SSLCertificateKeyFile /home/ubuntu/cert/server.key
SSLCertificateChainFile /home/ubuntu/cert/gd_bundle-g2-g1.crt
再次运行
$ openssl s_client -connect <server name>:443
例如:$ openssl s_client -connect google.com:443
输出:
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
------------
------------
Start Time: 1492431152
Timeout : 300 (sec)
Verify return code: 0 (ok)
如果您仍然收到错误,您应该重新生成 SSL KEY 和附加服务器
注意:Apache 服务器配置。
希望它能解决问题:)
【讨论】:
什么是e4720ca1b42c1ebb.crt
,为什么要添加到这个位置?
您特别建议添加哪个文件以及 .crt 文件来自哪里?以上是关于“验证返回码:21(无法验证第一个证书)”的主要内容,如果未能解决你的问题,请参考以下文章
从第一个 UIAlertController 打开第二个 UIAlertController