Mamy problem z brakiem curl
połączenia z serwerem HTTPS:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 jest SSL_R_TLSV1_UNRECOGNIZED_NAME
w środku ssl.h
.
Jeśli spróbuję openssl s_client -connect the-problem-site.com:443
zamiast tego, zobaczę
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
tzn. wygląda na to, że problem polega na tym, że nie ufa /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Jednak ten certyfikat jest zainstalowany: jest /etc/ssl/certs/GeoTrust_Global_CA.pem
, a jeśli zamiast tego uruchamiam
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
wtedy wszystko działa. Cert jest również obecny jako plik o nazwie skrótu b0f3e76e.0
i znajduje się w ca-certificates.crt
. Jednak, o ile widzę, ani curl, ani openssl nie próbują czytać żadnych certyfikatów; jeśli to ja strace
, to nie ma próby czytania /usr/lib/ssl/certs
ani /etc/ssl/certs
wcale, nawet z błędami. Czyta jednak openssl.cnf. Uciekliśmy update-ca-certificates
.
To jest Ubuntu 10.04 z openssl 0.9.8k. Możemy odtworzyć problem na dwóch osobnych instalacjach (choć możliwe, że jeden jest klonem drugiego od dawna). Jeśli wypróbuję ten sam test na maszynie Wirtualnej CentOS z openssl 0.9.8e, to działa dobrze i widzę, że czyta plik certyfikatu strace
. Nie ma równoważnego dostępu do plików w tym samym punkcie w ciągach Ubuntu. Jeśli skopiuję openssl.cnf
plik z maszyny Wirtualnej CentOS na maszyny Ubuntu, nie ma to znaczenia. Nie ma nic oczywistego w środowisku lub pliku .rc, który mógłby to powodować.
Jakieś pomysły, co robię źle? Czy powinno to działać, tj. Czy openssl i curl powinny automatycznie pobierać zainstalowane CA z wiersza poleceń? Jak to jest skonfigurowane? Dzięki!
Kolejny punkt danych: przy czystej instalacji 13 serwerów curl
pobiera plik certyfikatów i działa dobrze. openssl s_client
jednak nadal nie. Dlaczego miałoby to być?