bagaimana membuat Gnu / Linux mempercayai sertifikat yang dipercaya oleh Windows out-of-the-box?

11

Ada server dengan rantai SSL yang rusak, seperti yang dilaporkan oleh pemeriksaan SSL ini :

Laporan pemeriksaan SSL

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 :

masukkan deskripsi gambar di sini

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-certificatesdan bahkan mengimpor sertifikat Globalsign Root. update-ca-certificatesmelaporkan 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 .

Udo G
sumber
mengapa downvote?
Udo G
1
Saya memilih untuk menutup pertanyaan ini sebagai di luar topik karena OP meminta sesuatu yang tidak dapat dia pengaruhi sendiri. Dia mengatakan dia tidak dapat memodifikasi sisi server apa pun , jadi saya pikir ini mungkin milik pengguna super, karena ini menggambarkan masalah yang tidak memiliki solusi sisi klien.
LinuxSecurityFreak
2
Saya secara khusus meminta solusi sisi klien . Saya tidak dapat mempengaruhi server, tetapi saya memiliki kontrol penuh atas klien O / S (Ubuntu) dan saya ingin instalasi O / S khusus ini mempercayai sertifikat seperti halnya O / S (Windows) lainnya. Ini bukan tentang memperbaiki situs HTTPS untuk orang lain.
Udo G
1
Anda tidak mengontrol server, tetapi Anda masih dapat melaporkan masalah kepada orang yang mengontrol server.
Michael Hampton

Jawaban:

11

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 curlbekerja dengan jabat tangan yang salah bentuk.

Menurut pesan di milis Curl:

Adakah yang bisa mengkonfirmasi apakah cURL mendukung (atau tidak) sertifikat perantara?

Ya itu. Semua sertifikat ca memiliki rantai sertifikat yang naik ke root. Bundel yang Anda gunakan dengan curl harus terdiri dari sertifikat untuk seluruh rantai.

/ daniel.haxx.se

Anda harus dapat menambahkan Root CA dan semua sertifikat perantara ke satu bundel dan arahkan curlke 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 sebagai issuing.cer. Gabungkan keduanya bersama dalam satu file (misalnya chain.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.

garethTheRed
sumber
1
Ini bukan server saya, jadi tidak dapat memodifikasi sisi server apa pun. Saya mencoba menggunakan bundel CA dari curl.haxx.se/docs/caextract.html (karena Firefox mempercayai sertifikat) dan meneruskannya menggunakan --cacert cacert.pemtetapi CURL masih tidak menerima sertifikat.
Udo G
1
Ini adalah server Anda. Jalankan echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443dan 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.
garethTheRed
2
@garethTheRed: Saya mengerti bahwa server tidak menampilkan semua sertifikat, tetapi server tidak di bawah kendali saya (itulah yang saya maksudkan dengan "not my server"). Saya hanya mencoba mengakses API di server asing. Di Windows, tidak ada browser saya yang mengeluh tentang sertifikat, hanya Linux / Debian / Ubuntu yang melakukannya.
Udo G
@ AB: terima kasih banyak! Menginstal semua sertifikat root dari halaman itu menyelesaikan masalah . Namun, saya ingin memahami mengapa langkah manual itu diperlukan.
Udo G
2
Sertifikat perantara yang hilang (sebagaimana disebutkan oleh @garethTheRed) dapat ditemukan di sana: support.globalsign.com/customer/portal/articles/… . OP awalnya hanya mencoba untuk menambahkan cert root yang mungkin sudah ada, sehingga tidak mencapai apa-apa.
AB