몇 개의 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
인터넷 검색 오류도별로 도움이되지 않습니다. 트위터에도 비슷한 문제가 있었던 것 같습니다(https://dev.twitter.com/discussions/1549) 분명히 수정되었지만 어떻게 수정되었는지 자세히 설명하지 않았습니다.
문제를 완화하기 위해 어디를 살펴봐야 하는지/무엇을 해야 하는지에 대한 아이디어가 있으면 감사하겠습니다.
답변1
이는 NSS로 컴파일된 컬의 일반적인 문제입니다(nss 없이 컴파일된 redhat-linux, debian 및 suse 컬 패키지만 해당). nss-library가 없는 소스에서 컬을 컴파일해야 합니다.
그래서 https 연결이 nss-curl과 어떻게 작동하는지 해결하지 못했습니다.
컬 --버전 컬 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.14.3.0zlib/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 협상 IDN IPv6 Largefile NTLM NTLM_WB SSL libz
컬 --version 컬 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-협상 IDN IPv6 대용량 파일 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 메시지는 일반적으로 서버가 연결을 끊었음을 의미합니다. 연결이 끊어진 이유를 알아보려면 컬 대상의 서버 측 로그를 확인해야 합니다.
"X에 대한 역방향 DNS 호스트 이름을 얻을 수 없습니다"와 같은 간단한 것일 수도 있습니다.