当我尝试向 google.com 发出 https 请求时,我最近开始看到
[root@ip-172-31-47-76 ~]# curl -I -v https://google.com
* Rebuilt URL to: https://google.com/
* Trying 216.58.193.78...
* TCP_NODELAY set
* Connected to google.com (216.58.193.78) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Server certificate:
* subject: CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US
* start date: Feb 20 14:17:23 2018 GMT
* expire date: May 15 14:08:00 2018 GMT
* common name: *.google.com
* issuer: CN=Google Internet Authority G2,O=Google Inc,C=US
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* stopped the pause stream!
* Closing connection 0
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: https://curl.haxx.se/docs/sslcerts.html
这会影响我更新系统的能力,因为 yum 更新请求也会失败。我已尝试使用此页面上的说明重新导入我的证书:https://access.redhat.com/solutions/1549003。我还尝试使用此处的说明手动添加 Google 证书:https://curl.haxx.se/docs/sslcerts.html。两者都不起作用。
我不确定它是否相关,但我尝试使用 certutil 实用程序进一步进行故障排除,但无法运行
[root@ip-172-31-47-76 ~]# certutil
certutil: /usr/local/firefox/libnss3.so: version `NSS_3.30' not found (required by certutil)
不太确定这里发生了什么,但我将不胜感激任何帮助。这是使用 Amazon Linux 映像。
答案1
我无法模拟您的错误,但我相信手动更新证书后它会起作用。为此,您可以使用“openssl”工具,这是提取特定服务器的 CA 证书的简单方法:
1.获取服务器公共证书并保存到文件 conn_cert.log.pem,输入以下命令(然后按 Enter)
openssl s_client -showcerts -servername https://google.com -connect google.com:443 > conn_cert.log.pem
2.现在,输入“quit”并按 Enter 键
3.文件“conn_cert.log.pem”的证书位于“BEGIN CERTIFICATE”和“END CERTIFICATE”字符串之间,但它还有其他日志消息,现在我们只从日志文件中提取证书并将其保存在文件“google_public”中.crt”。
openssl x509 -inform PEM -in conn_cert.log.pem -text -out google_public.crt
4.最后,用新证书覆盖错误的证书:
cp google_public.crt /etc/pki/tls/certs/ca-bundle.crt
5.再次测试并快乐..
参考文献: