curl
HTTPS 서버에 연결하지 못하는 데 문제가 있습니다 .
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112는 SSL_R_TLSV1_UNRECOGNIZED_NAME
입니다 ssl.h
.
openssl s_client -connect the-problem-site.com:443
대신 시도하면 볼 수 있습니다.
CONNECTED(00000003)
depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
verify error:num=20:unable to get local issuer certificate
verify return:0
Certificate chain
0 s:/serialNumber=xx/C=xx/ST=xx/L=xxxx/O=xx/OU=xx/CN=the-problem-site.com
i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
즉, 문제는 신뢰하지 않는 것 같습니다 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. 그건 그러나 그 인증서가 설치되고 /etc/ssl/certs/GeoTrust_Global_CA.pem
, 대신 내가 실행하는 경우
openssl s_client -problem-site.com 연결 : 443 -CA 파일 /etc/ssl/certs/GeoTrust_Global_CA.pem
그런 다음 모든 것이 작동합니다. 이 인증서는 또한 해시 이름이 지정된 파일로 존재하며 b0f3e76e.0
에 ca-certificates.crt
있습니다. 그러나 내가 아는 한 curl이나 openssl은 인증서를 읽으려고 시도하지 않습니다. 내가 strace
그것들이라면 읽 /usr/lib/ssl/certs
거나 전혀 시도 /etc/ssl/certs
하지 않으며 오류조차도 없습니다. 비록 openssl.cnf를 읽습니다. 우리는 달렸다 update-ca-certificates
.
이것은 openssl 0.9.8k가있는 Ubuntu 10.04입니다. 두 번의 개별 설치에서 문제를 재현 할 수 있습니다 (하나는 다른 복제본 일 수 있음). openssl 0.9.8e를 사용하여 CentOS VM에서 동일한 테스트를 시도하면 제대로 작동하며에서 인증서 파일을 읽는 것을 볼 수 있습니다 strace
. 우분투 straces에서 같은 시점에 동등한 파일 액세스가 없습니다. openssl.cnf
CentOS VM에서 Ubuntu 시스템으로 파일을 복사 해도 아무런 차이가 없습니다. 환경이나 .rc 파일에는이를 일으킬 수있는 명확한 것이 없습니다.
내가 잘못하고있는 아이디어가 있습니까? 이 작업이 작동해야합니까 (즉, openssl 및 curl이 명령 줄에서 설치된 CA를 자동으로 가져와야합니까?) 이것은 어떻게 구성됩니까? 감사!
또 다른 데이터 포인트 : 13 서버를 새로 설치 curl
하면 인증서 파일을 가져 와서 잘 작동합니다. openssl s_client
그래도 여전히 그렇지 않습니다. 왜 그런가요?