CentOS PHP cURL NSS エラー 5938

CentOS PHP cURL NSS エラー 5938

いくつかの CentOS ボックスで cURL と PHP に奇妙な問題が発生しています。

ローカルでは CentOS 6.3 を実行しています。リモートでは CentOS 5.9 です。

ローカルでは、ボックスはリクエストを受信し、ファイルをリモート サーバーに scp し、次にリモート サーバーに PHP 経由で cURL リクエストを実行して情報を送信します。リクエストは、その日の最初の試行で常に失敗します。後続のリクエストは正常に機能します。リモートには有効な SSL 証明書がありますが、それでも証明書とホストの検証をオフにしても問題は解決しません。

ログはあまり役に立ちませんでした。詳細度を 11 に上げると、最も意味のあるエントリは次のようになります。

* About to connect() to www.example.com port 443 (#0)
*   Trying 203.0.113.10... * connected
* Connected to www.example.com (203.0.113.10) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -5938
* Closing connection #0
* SSL connect error

エラーをグーグルで検索してもあまり役に立ちません。Twitterでも同様の問題があったようです(https://dev.twitter.com/discussions/1549) は明らかに修正されたようですが、どのように修正されたかについては詳しく説明されていません。

問題を軽減するためにどこを調べればよいか、何をすればよいかについてのアイデアがあれば、ぜひ教えてください。

答え1

これは、NSS でコンパイルされた curl の一般的な問題です (nss なしでコンパイルされた redhat-linuxes、debian、および suse curl パッケージのみ)。nss ライブラリなしでソースから curl をコンパイルする必要があります。

したがって、https 接続が nss-curl でどのように機能するかについては解決していません。

curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NS/3.14.3.0 よりzlib/1.2.7 libidn/1.26 libssh2/1.4.3 プロトコル: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp 機能: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz

curl --version curl 7.25.0 (x86_64-suse-linux-gnu) libcurl/7.25.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.0 プロトコル: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp 機能: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

答え2

古い CentOS 6.x システムを使用して、TLS 1.0 の受け入れを停止し、TLS 1.1 以降のみを許可する組み込みデバイスに接続したときに、同様の「NSS エラー -5938」が発生しました。私の場合の解決策は、 を実行することでしたyum update。次の更新が発生していることを確認しました。

---> Package curl.x86_64 0:7.19.7-46.el6 will be updated
---> Package curl.x86_64 0:7.19.7-52.el6 will be an update
...
---> Package nss.x86_64 0:3.21.0-0.3.el6_7 will be updated
---> Package nss.x86_64 0:3.21.3-2.el6_8 will be an update

役に立った具体的な変更点は次のとおりだと思います:

$ rpm -q --changelog curl
[...]
* Mon Jan 11 2016 Kamil Dudka <[email protected]> 7.19.7-50
- use the default min/max TLS version provided by NSS (#1289205)

答え3

NSS エラー 5938 メッセージは通常、サーバーが接続を切断したことを意味します。接続が切断された理由を確認するには、curl のターゲットのサーバー側ログを確認する必要があります。

「X の逆 DNS ホスト名を取得できませんでした」のような単純なものである可能性があります。

関連情報