いくつかの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 )があったようですが、どうやらそれは修正されましたが、どのように修正されたかについては詳しく説明していません。
問題を軽減するためにどこを見るべきか、何をすべきかについてのアイデアは、いただければ幸いです。
nSSでコンパイルされたcurlの一般的な問題です(nssなしでコンパイルされたredhat-linuxes、debian、suse curlパッケージのみ)。 nss-libraryなしでソースからcurlをコンパイルする必要があります。
だから、私はhttps-connectionsがnss-curlでどのように機能するかを解決していません。
curl --version curl 7.29.0(x86_64-redhat-linux-gnu)libcurl/7.29.0 NSS/3.14.3. 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 Features: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ファイルftp ftps Gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Features:AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
古い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)
NSSエラー5938メッセージは通常、サーバーが接続を強制終了したことを意味します。 curlのターゲットのサーバー側のログをチェックして、接続が切断された理由を確認する必要があります。
それは「Xの逆DNSホスト名を取得できなかった」という単純なものかもしれません。