Ada server dengan rantai SSL yang rusak, seperti yang dilaporkan oleh pemeriksaan SSL ini :
Saya tahu ini adalah masalah yang harus diselesaikan pada server itu sendiri, tetapi kadang-kadang ini sulit untuk diperbaiki (saya bukan admin server).
Masalahnya, Chrome / Mozilla / Edge di Windows tetap mempercayai sertifikat situs :
Namun, dalam penyebaran Gnu / Linux (Ubuntu 18.04 di Docker) sertifikat tidak dipercaya:
curl: (60) SSL certificate problem: unable to get local issuer certificate
Saya mencoba update-ca-certificates
dan bahkan mengimpor sertifikat Globalsign Root. update-ca-certificates
melaporkan sertifikat rangkap dalam kasus itu. Bagaimanapun, tidak ada yang berhasil.
Bagaimana cara mereproduksi
Menggunakan Docker:
docker run -it ubuntu:18.04
# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it # <---- "unable to get local issuer certificate"
Bagaimana saya bisa membuat Gnu / Linux mempercayai sertifikat ini?
PS: Sertifikat yang sama digunakan dengan benar di server lain .
sumber
Jawaban:
Perbaikan sebenarnya untuk ini adalah untuk memastikan bahwa server Anda menyajikan semua sertifikat dalam rantai dan bukan hanya sertifikat entitas akhir (server).
Arahkan administrator server Anda ke RFC 5246 Bagian 7.4.2 yang dengan jelas menyatakan bahwa Pesan ini menyampaikan rantai sertifikat server kepada klien.
Jika admin Anda menolak / tidak bisa melakukan ini karena suatu alasan, opsi alternatif Anda adalah mencoba dan mulai
curl
bekerja dengan jabat tangan yang salah bentuk.Menurut pesan di milis Curl:
Anda harus dapat menambahkan Root CA dan semua sertifikat perantara ke satu bundel dan arahkan
curl
ke itu menggunakan--cacert <file>
opsi.Saat browser Anda bekerja, Anda dapat mengakses sertifikat CA yang benar dari sana. Pada tab sertifikat (berbeda untuk setiap browser, tapi saya yakin Anda akan menemukannya), lihat rantai sertifikat. Klik dua kali Akar CA pertama Globalsign Akar CA - G1 dan pada Rincian tab, klik Salin ke file ... . Simpan sebagai
root.cer
. Lakukan hal yang sama dengan AlphaSSL CA - SHA256 - G2 dan simpan sebagaiissuing.cer
. Gabungkan keduanya bersama dalam satu file (misalnyachain.cer
) dan gunakan itu sebagai argumen untuk-cacert
.Seperti yang ditunjukkan oleh @AB, sertifikat yang hilang juga dapat ditemukan di sini .
Peramban Anda berfungsi karena mereka menyimpan sertifikat CA. Jika Anda telah menavigasi ke situs web yang dikonfigurasi dengan benar di beberapa titik di masa lalu, yang sertifikatnya dikeluarkan oleh CA yang sama dengan sertifikat server Anda, itu akan di-cache oleh browser. Ketika Anda kemudian mengunjungi situs yang salah dikonfigurasi, browser Anda akan menggunakan sertifikat CA dalam cache untuk membangun rantai. Bagi Anda, sepertinya semuanya baik-baik saja, meskipun di balik layar, server salah dikonfigurasi.
Perhatikan bahwa pada Windows, IE / Edge dan Chrome berbagi cache yang sama, sementara Firefox menggunakan sendiri.
Selain yang di atas, IE / Edge dan Chrome (karena mereka berbagi tumpukan kripto yang sama) akan menggunakan ekstensi dalam sertifikat yang disebut AuthorityInformationAccess . Ini memiliki opsi caIssuer yang menyediakan URL tempat sertifikat CA entitas akhir dapat diunduh. Oleh karena itu, bahkan jika salah satu dari peramban ini tidak men-cache sertifikat yang hilang dari perambanan sebelumnya, ia dapat mengambilnya jika diperlukan. Perhatikan bahwa Firefox tidak melakukan ini, itulah sebabnya terkadang Firefox dapat menampilkan kesalahan sertifikat ketika IE / Edge dan Chrome tampaknya berfungsi.
sumber
--cacert cacert.pem
tetapi CURL masih tidak menerima sertifikat.echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443
dan Anda akan melihat hanya satu sertifikat yang disajikan oleh server Anda. Harus ada dua - sertifikat entitas akhir (yang disajikan) dan CA penerbit - sertifikat Alpha SSL - SHA256 - G2. Yang terakhir tidak dikirim oleh server, tetapi harus.