我在 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的環境是什麼?
有一個與以下相關的令人討厭的錯誤森托斯 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_DISABLE_HW_GCM=1”來降級NSS
# 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