对于非root用户,cURL在CentOS上的SSL连接不起作用(错误#77)

时间:2013-06-12 11:42:58

标签: curl ssl centos nss

就在最近,我的服务器已经停止了对我的网络服务器的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帐户登录(在通过Web服务器运行时也使用),我会得到以下内容...

* 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.   cert db。 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 

任何人都可以解释为什么这可能会突然改变,或者更好还是如何解决它?

由于

10 个答案:

答案 0 :(得分:12)

如果您最近到达此处,就像我在搜索相同的错误时所做的那样,您可能会发现它是对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: BAD Problem opening package nss-softokn-freebl-3.14.3–19.el6_6.x86_64.rpm 我开始阅读有关NSS的证书验证以及这个新更新如何与我的问题相关的内容。 所以百胜被打破了。这是因为nss-softokn- *需要nss-softokn-freebl- *需要彼此起作用。问题是他们没有检查对方版本的兼容性,在某些情况下,它最终打破了yum。 让我们来解决问题:

$ 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

您当然应该从最近的镜像下载并检查正确的版本/操作系统等。我们基本上从rpm下载并安装更新以修复yum。正如@grumpysysadmin所指出的,你可以缩短命令。 @cwgtex认为您应该使用RPM命令安装升级,这使得该过程更加简单。

要使用wordpress修复问题,您需要重新启动http服务器。

$ service httpd restart

再试一次并取得成功!

答案 1 :(得分:2)

检查您是否在CA证书捆绑包上设置了正确的权限。 通常,这意味着每个人都可以访问/ etc / ssl / certs目录中的CA文件,例如/etc/ssl/certs/ca-certificates.crt。

您可以使用

curl-config --configure
命令查看已为您配置卷曲版本的文件:

$ curl-config --configure
 '--prefix=/usr' 
 '--mandir=/usr/share/man' 
 '--disable-dependency-tracking' 
 '--disable-ldap' 
 '--disable-ldaps' 
 '--enable-ipv6' 
 '--enable-manual' 
 '--enable-versioned-symbols' 
 '--enable-threaded-resolver' 
 '--without-libidn' 
 '--with-random=/dev/urandom' 
 '--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt' 
 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4' 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro' 
 'CPPFLAGS=-D_FORTIFY_SOURCE=2'

在这里,您需要对/etc/ssl/certs/ca-certificates.crt的读取权限

$ curl-config --configure
 '--build' 'i486-linux-gnu' 
 '--prefix=/usr' 
 '--mandir=/usr/share/man' 
 '--disable-dependency-tracking' 
 '--enable-ipv6' 
 '--with-lber-lib=lber' 
 '--enable-manual' 
 '--enable-versioned-symbols' 
 '--with-gssapi=/usr' 
 '--with-ca-path=/etc/ssl/certs' 
 'build_alias=i486-linux-gnu' 
 'CFLAGS=-g -O2' 
 'LDFLAGS=' 
 'CPPFLAGS='

这里也一样。

答案 2 :(得分:2)

事实证明问题是面对脚本从cPanel“电子邮件管道传输到脚本”运行,因此以用户身份运行,因此是用户问题,但根本不影响Web服务器。

用户无法访问/ etc / pki目录的原因是由于他们只有jats ssh访问权限。一旦我授予完全访问权限,一切正常。

感谢您提供的信息,Remi。

答案 3 :(得分:2)

我在CentOS7上遇到了与Error#77类似的问题。我缺少随ca证书RPM一起安装的 /etc/pki/tls/certs/ca-bundle.crt 软链接。

“ curl”正试图打开此路径以获取证书颁发机构。 我发现:

strace curl https://example.com

清楚地看到该链接的打开失败。

我的解决方法是:

yum reinstall ca-certificates

那应该重新设置所有内容。如果您有用于公司或自签名用途的专用CA,请确保它们位于/ etc / pki / ca-trust / source / anchors中,以便重新添加它们。

答案 4 :(得分:1)

对于Ubuntu:

sudo apt-get install ca-certificates

遇到这个问题,试图在Dockerfile中将东西卷曲为ROOT

答案 5 :(得分:0)

错误是由于PKI目录中的SSL链证书文件损坏或丢失。 您需要确保文件ca-bundle,遵循以下步骤: 在您的控制台/终端中:

mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates

输入此网站:https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates,获取您的ca证书,例如: ftp://rpmfind.net/linux/fedora/linux/updates/24/x86_64/c/ca-certificates-2016.2.8-1.0.fc24.noarch.rpm<< CentOS的。复制下载的网址并粘贴到网址:     wget your_url_donwload_ca-ceritificated.rpm 现在,安装你的rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

现在重新启动您的服务: 我的例子这个命令:

sudo service2 httpd restart
非常好 好看的

答案 6 :(得分:0)

每当我尝试在https服务器上执行curl时,我都遇到了同样的问题。

About to connect() to localhost port 443 (#0)
Trying ::1...
Connected to localhost (::1) port 443 (#0)
Initializing NSS with certpath: sql:/etc/pki/nssdb

当我错误地配置密钥库路径时,观察到此问题。纠正密钥库路径后,它工作正常。

答案 7 :(得分:0)

Windows用户,请将其添加到PHP.ini:

curl.cainfo = "C:/cacert.pem";

路径需要更改为您自己的路径,您可以从Google搜索中下载cacert.pem

(是的,我知道这是一个CentOS问题)

答案 8 :(得分:0)

请检查服务器上安装的ca证书的权限。

答案 9 :(得分:0)

我在 CentOS-7 上遇到了同样的问题。 它对我很有用。

正在创建空文件。

touch /etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned

CentOS-7 的发行版镜像中存在 curl 错误。

https://bugs.centos.org/view.php?id=16282