28

つい最近、Web サーバーの https:// アドレスへの curl リクエストに対して、サーバーが機能しなくなりました。少し調べてみると、Web サーバーを実行しているユーザーに問題があるようです。

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 サポート付きでビルドされている場合、OS ディストリビューションによっては、システム全体の 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

17

同じエラーを無駄に検索したときに行ったように、最近ここにたどり着いた場合は、CentOS で障害を引き起こしている NSS の更新であることがわかる場合があります。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

これにより、より大きな問題が発生しているという肯定的な答えが得られました.NSSを 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 使用した証明書の検証と、この新しい更新が私の問題にどのように関連している可能性があるかについて読み始めました. だから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

もちろん、最寄りのミラーからダウンロードして、正しいバージョン/OS などを確認する必要があります。基本的には、rpm から更新をダウンロードしてインストールし、yum を修正します。@grumpysysadmin が指摘したように、コマンドを短縮できます。@cwgtex は、RPM コマンドを使用してアップグレードをインストールし、プロセスをさらに簡素化することを提案しました。

WordPress で問題を解決するには、http サーバーを再起動する必要があります。

$ service httpd restart

再試行して成功!

于 2015-01-17T05:59:04.353 に答える
3

問題は、スクリプトがcPanelの「スクリプトにパイプされた電子メール」から実行されていたため、ユーザーとして実行されていたため、ユーザーの問題でしたが、Webサーバーにはまったく影響を与えていなかったことが判明しました。

ユーザーが /etc/pki ディレクトリにアクセスできない原因は、監禁された ssh アクセスしか持っていなかったためです。フルアクセスを許可すると、すべて正常に機能しました。

レミさん、情報ありがとうございます。

于 2013-06-12T16:16:09.197 に答える
2

CA 証明書バンドルに正しい権限が設定されていることを確認してください。通常、これは、/etc/ssl/certs ディレクトリ内の CA ファイル (たとえば、/etc/ssl/certs/ca-certificates.crt) への全員の読み取りアクセスを意味します。

次のコマンドを使用して、curl バージョン用に構成されたファイルを確認できます。

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

ここでも同じです。

于 2013-06-12T12:52:09.593 に答える
0

Windows ユーザーは、これを PHP.ini に追加します。

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

パスは独自のものに変更する必要があり、Google 検索から cacert.pem をダウンロードできます。

(はい、CentOSの質問であることは知っています)

于 2019-10-02T13:18:00.563 に答える