就在最近,我的服务器已停止处理对我的Web服务器的https://地址的curl请求。挖了一点点,看来这是网络服务器正在运行的用户的问题。
如果我以root用户身份SSH到服务器上并调用
curl -I -v https://google.com
...我得到以下回应...
* About to connect() to google.com port 443 (#0)
* Trying 173.194.67.113... connected
* Connected to google.com (173.194.67.113) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using SSL_RSA_WITH_RC4_128_SHA
* Server certificate:
* subject: CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US
* start date: May 22 15:50:20 2013 GMT
* expire date: Oct 31 23:59:59 2013 GMT
* common name: *.google.com
* issuer: CN=Google Internet Authority,O=Google Inc,C=US
> HEAD / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: google.com
> Accept: */*
但是,如果我以任何cPanel帐户(通过网络服务器运行时也使用)身份登录,则会得到以下信息...
* About to connect() to google.com port 443 (#0)
* Trying 173.194.67.101... connected
* Connected to google.com (173.194.67.101) port 443 (#0)
* Initializing NSS with certpath: none
* NSS error -5978
* Closing connection #0
* Problem with the SSL CA cert (path? access rights?)
curl: (77) Problem with the SSL CA cert (path? access rights?)
我无法找到解决该问题的确切方法,并且我的托管公司拒绝帮助,因为它“不在支持范围内”,即使上周工作正常!
我确实在http://curl.haxx.se/docs/sslcerts.html上提到
“如果libcurl是在NSS支持下构建的,则取决于操作系统的发行版,
可能需要采取一些其他步骤才能使用系统范围的CA
证书数据库RedHat附带了一个附加模块libnsspem.so,该模块启用
NSS读取OpenSSL PEM CA捆绑软件。 OpenSuSE中缺少该库,并且
没有它,NSS只能使用其自己的内部格式。 NSS也有一个新的
数据库格式:https://wiki.mozilla.org/NSS_Shared_DB”
...但是我找不到有关如何在CentOS服务器上在系统范围内获得此工作的信息。
信息
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
任何人都可以阐明为什么这种情况可能突然改变了,或者更好的是如何解决它?
谢谢
最佳答案
如果您最近像我一样徒劳地寻找相同错误时到达这里,您可能会发现它是对NSS的更新,导致CentOS失败。通过运行yum update进行测试,看看是否出现错误,curl也会产生此错误。解决方案非常简单,只需手动安装NSS。
继续阅读...
如果您像我一样,则会引发类似于以下的错误:
curl: (77) Problem with the SSL CA cert (path? access rights?)
这花费了一些时间来解决,但发现它不是CA证书,因为通过重新创建它们并检查了我排除的所有配置。可能是libcurl,所以我去找了更新。
如前所述,我重新创建了CA证书。您也可以这样做,但这可能会浪费时间。 http://wiki.centos.org/HowTos/Https
下一步(可能应该是我的第一步)是通过简单地运行yum来检查一切是否最新。
$ yum update
$ yum upgrade
这给了我一个肯定的答案,那就是有一个更大的问题在起作用:
Downloading Packages:error: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: BADProblem opening package nss-softokn-freebl-3.14.3–19.el6_6.x86_64.rpm
我开始阅读有关使用NSS进行证书验证的信息,以及此新更新如何与我的问题有关。
所以百胜坏了。这是因为nss-softokn- *需要nss-softokn-freebl- *需要彼此起作用。问题在于他们不检查彼此的版本是否兼容,在某些情况下最终会破坏百胜。
让我们来解决问题:
$ wget http://mirrors.linode.com/centos/6.6/updates/x86_64/Packages/nsssoftokn-freebl-3.14.3-19.el6_6.x86_64.rpm
$ rpm -Uvh nss-softokn-freebl-3.14.3–19.el6_6.x86_64.rpm
$ yum update
当然,您应该从最近的镜像下载并检查正确的版本/ OS等。我们基本上是从rpm下载并安装更新以修复yum。正如@grumpysysadmin指出的那样,您可以缩短命令的时间。 @cwgtex促成了您应该使用RPM命令安装升级程序,从而使该过程更加简单。
要使用wordpress修复问题,您需要重新启动http服务器。
$ service httpd restart
再试一次,成功!
关于curl - 对于非root用户,CURL在CentOS上的SSL连接上无法使用cURL(错误#77),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17064601/