我在 CentOS 7 机器上执行任何需要 SSL 的操作时遇到问题,包括 curl、wget 或通过 YUM 更新。
输出总是一样的:
[root@localhost ~]# curl -I -v https://google.com
* About to connect() to google.com port 443 (#0)
* Trying 74.125.138.100...
* Connected to google.com (74.125.138.100) 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: Jun 16 08:37:32 2016 GMT
* expire date: Sep 08 08:29:00 2016 GMT
* common name: *.google.com
* issuer: CN=192.168.2.44,C=US
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* Closing connection 0
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: http://curl.haxx.se/docs/sslcerts.html
所有证书似乎都“标记为不受信任”(我已尝试使用十几个不同的 URL)。我尝试重新安装 CA 证书,如下所示:
yum --disablerepo="epel" reinstall ca-certificates
但这没用。有什么想法吗?
答案1
我会检查你的 nss 安装。它可能已经过期/损坏了。
检查你正在运行的版本;centos 7 上的最新版本应该是:
nss-config version
3.21.0
然后检查是否有任何 nss 包已被修改/损坏:
rpm -Vv nss-*
根据您的结果,可能需要 nss 更新或重新安装。
您可以通过临时更改该目录的权限(以 root 身份)来半确定地查看这是否是 nss 的问题:
chmod 400 /etc/pki/nssdb/*
然后以普通用户身份发出 curl 命令 - 如果它有效,它将输出如下内容:
* Connected to google.com (172.217.4.206) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Unable to initialize NSS database
* Initializing NSS with certpath: none
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Server certificate:
<clipped>
这表明它只是使用了 CA 证书而不是基于 nssdb 的身份验证。
如果这不是与 nss 相关的问题,那么这里有一个RHEL 指南这也适用于 CentOS,它将指导您确保拥有干净的 CA 证书配置。我不认为该链接位于他们的付费墙后面;如果您需要它但无法访问它,请告诉我。
答案2
您在什么环境下运行CentOS7?
有一个与以下相关的严重错误Centos 6.8在 (Zen) 虚拟化和/或 CPU AES 支持下的系统上更新 / NSS 3.21.0-8.el6。在 Rackspace 和 AWS t1.micro 实例上,我在 CentOS 6.8 和 NSS 更新后都遇到了这个问题。
我相信您遇到了与 Centos7 NSS 更新相关的问题。
https://www.centos.org/forums/viewtopic.php?t=58002
https://bugs.centos.org/view.php?id=10930#c26705
如何检查我的 CPU 是否支持 AES-NI? https://unix.stackexchange.com/questions/14077/how-to-check-that-aes-ni-is-supported-by-my-cpu
6.8 上有些人已经成功通过设置环境变量降级 NSS:“NSS_DISABLE_HW_GCM=1”
# NSS_DISABLE_HW_AES=1
# yum downgrade nss nss-util nss-tools nss-sysinit
# yum install yum-plugin-versionlock
# yum versionlock add! nss-3.21.0-0.3.el6_7.x86_64 nss-sysinit-3.21.0-0.3.el6_7.x86_64 nss-tools-3.21.0-0.3.el6_7.x86_64 nss-util-3.21.0-0.3.el6_7.x86_64
再次强调,以上代码适用于 6.8,而不是 CentOS 7
我发现了nss-3.21.0-0.3。el6_7.x86_64 已贬值且不可用。我已从 6.8 更新之前的映像备份重新加载了整个服务器,并且 YUM 版本锁定了 nss nss-sysinit nss-tools nss-util,然后才再次更新。
注意:我会将以上信息添加为“评论”而不是“答案”,但我的低声誉分数使我无法发表评论,我只能“回答”。
我希望这有帮助。
答案3
我也遇到过类似的问题。当然,这很可能是我自己的问题。
必须安装*nss-*
[not showing this]# nss-config version
bash: nss-config: command not found
yum install -y nss-*
Installed:
nss-devel.x86_64 0:3.36.0-7.el7_5
nss-pam-ldapd.x86_64 0:0.8.13-16.el7
nss-pkcs11-devel.x86_64 0:3.36.0-7.el7_5
nss-softokn-devel.x86_64 0:3.36.0-5.el7_5
nss-softokn-freebl-devel.x86_64 0:3.36.0-5.el7_5
nss-util-devel.x86_64 0:3.36.0-1.el7_5
Dependency Installed:
nscd.x86_64 0:2.17-260.el7 nspr-devel.x86_64 0:4.19.0-1.el7_5
nss-config version
Usage: nss-config [OPTIONS] [LIBRARIES]
Options:
[--prefix[=DIR]]
[--exec-prefix[=DIR]]
[--includedir[=DIR]]
[--libdir[=DIR]]
[--version]
[--libs]
[--cflags]
Dynamic Libraries:
nss
nssutil
ssl
smime
[not showing this still]# nss-config --version
3.36.0