У нас виникають проблеми з 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-підключити the-problem-site.com:243 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
тоді все працює. Cert також присутній у вигляді файлу з іменем хешу b0f3e76e.0
і знаходиться в ньому ca-certificates.crt
. Однак, наскільки я бачу, ні curl, ні openssl не намагаються прочитати будь-які сертифікати; якщо я strace
їх, то немає спроби читати з /usr/lib/ssl/certs
або /etc/ssl/certs
взагалі, навіть з помилками. Однак він читає openssl.cnf. Ми бігли update-ca-certificates
.
Це Ubuntu 10.04 з openssl 0.9.8k. Ми можемо відтворити проблему у двох окремих встановленнях (хоча можливо, один клон інший із зворотного шляху). Якщо я спробую той самий тест на CentOS VM з openssl 0.9.8e, він працює добре, і я можу побачити, як він читає файл сертифіката в strace
. Немає еквівалентного доступу до файлів у тій самій точці у рядках Ubuntu. Якщо я скопіюю openssl.cnf
файл з CentOS VM на машини Ubuntu, це не має ніякого значення. У середовищі або файлі .rc нічого очевидного не може бути причиною цього.
Будь-які ідеї, що я роблю неправильно? Чи має це працювати, тобто чи має openssl і curl автоматично підбирати встановлені КА з командного рядка? Як це налаштовано? Дякую!
Ще один момент даних: на чистому встановленні 13-сервера curl
вибирає файл сертифікатів і працює добре. openssl s_client
все ще не робить, хоча. Чому це було б?