28

就在最近,我的服务器已停止处理对我的 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 帐户(也用于通过 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 

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

谢谢

4

10 回答 10

20

我刚刚在 CentOS7 上遇到了与 Error#77 类似的问题。我错过了与 ca-certificates 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 中,以便重新添加它们。

于 2018-11-06T20:30:03.090 回答
17

如果您最近到达这里,就像我在徒劳地搜索相同的错误时所做的那样,您可能会发现它是 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 进行证书验证以及此新更新可能与我的问题相关的内容。所以yum坏了。这是因为 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

再试一次,成功!

于 2015-01-17T05:59:04.353 回答
6

对于 Ubuntu:

sudo apt-get install ca-certificates

尝试在 Dockerfile 中将内容卷曲为 ROOT 时遇到此问题

于 2019-04-25T23:52:29.473 回答
3

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

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

不过,谢谢你的信息,雷米。

于 2013-06-12T16:16:09.197 回答
3

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

创建空文件。

touch /etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned

CentOS-7 的分发映像中有一个 curl 错误。

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

于 2021-06-03T04:12:05.067 回答
2

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

您可以使用以下命令查看已为您的 curl 版本配置的文件

卷曲配置--配置
命令 :

$ 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='

这里也一样。

于 2013-06-12T12:52:09.593 回答
2

每当我尝试在我的 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

当我错误地配置密钥库路径时观察到此问题。更正密钥库路径后,它起作用了。

于 2018-06-11T10:46:55.813 回答
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-certificate ,例如:ftp: //rpmfind.net/linux/fedora /linux/updates/24/x86_64/c/ca-certificates-2016.2.8-1.0.fc24.noarch.rpm << CentOS。复制下载的 url 并粘贴到 url: wget your_url_donwload_ca-ceritificated.rpm 现在,安装你的 rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

现在重新启动您的服务:我的示例此命令:

sudo service2 httpd restart

很好看

于 2016-07-29T15:40:32.763 回答
0

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

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

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

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

于 2019-10-02T13:18:00.563 回答
0

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

于 2020-06-02T05:06:36.120 回答