Kami mengalami masalah dengan curl
tidak terhubung ke server HTTPS:
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112 ada SSL_R_TLSV1_UNRECOGNIZED_NAME
di ssl.h
.
Jika saya mencoba openssl s_client -connect the-problem-site.com:443
sebagai gantinya maka saya melihat
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
yaitu sepertinya masalahnya adalah bahwa ia tidak percaya /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
. Namun cert itu diinstal: itu /etc/ssl/certs/GeoTrust_Global_CA.pem
, dan jika sebaliknya saya jalankan
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
maka semuanya bekerja. Sertifikat ini juga hadir sebagai file bernama hash b0f3e76e.0
dan ada di ca-certificates.crt
. Namun, sejauh yang saya bisa lihat, tidak ada curl maupun openssl yang mencoba membaca sertifikat apa pun; jika saya strace
mereka maka tidak ada upaya untuk membaca dari /usr/lib/ssl/certs
atau /etc/ssl/certs
sama sekali, bahkan dengan kesalahan. Itu membaca openssl.cnf sekalipun. Kami sudah lari update-ca-certificates
.
Ini adalah Ubuntu 10.04 dengan openssl 0.9.8k. Kami dapat mereproduksi masalah pada dua instalasi terpisah (meskipun mungkin salah satu dari yang lain dari jalan kembali). Jika saya mencoba tes yang sama pada CentOS VM dengan openssl 0.9.8e maka itu berfungsi dengan baik, dan saya bisa melihatnya membaca file sertifikat di strace
. Tidak ada akses file yang setara pada titik yang sama di Ubuntu straces. Jika saya menyalin openssl.cnf
file dari CentOS VM ke mesin Ubuntu itu tidak ada bedanya. Tidak ada yang jelas di lingkungan atau file .rc yang mungkin menyebabkan ini.
Ada ide yang saya lakukan salah? Haruskah ini bekerja, yaitu harus openssl dan curl mengambil CAs diinstal secara otomatis dari baris perintah? Bagaimana ini dikonfigurasi? Terima kasih!
Poin data lain: pada instalasi yang bersih dari 13 server, curl
tidak mengambil file sertifikat dan berfungsi dengan baik. openssl s_client
masih tidak. Kenapa bisa begitu?