Bagaimana sertifikat ssl diverifikasi?

218

Apa serangkaian langkah yang diperlukan untuk memverifikasi sertifikat ssl dengan aman? Pemahaman saya (sangat terbatas) adalah bahwa ketika Anda mengunjungi situs https, server mengirim sertifikat ke klien (browser) dan browser mendapatkan informasi penerbit sertifikat dari sertifikat itu, kemudian menggunakannya untuk menghubungi penerbit, dan entah bagaimana membandingkan sertifikat untuk validitas.

  • Bagaimana tepatnya hal ini dilakukan?
  • Bagaimana dengan proses yang membuatnya kebal terhadap serangan manusia di tengah-tengah?
  • Apa yang mencegah beberapa orang secara acak mengatur layanan verifikasi mereka sendiri untuk digunakan dalam serangan man-in-the-middle, sehingga semuanya "terlihat" aman?
rcreswick
sumber
menemukan video ini sangat berguna dalam memahami aliran youtube.com/watch?v=T4Df5_cojAs
Krishna

Jawaban:

308

Berikut ini penjelasan yang sangat disederhanakan:

  1. Peramban web Anda mengunduh sertifikat server web, yang berisi kunci publik dari server web. Sertifikat ini ditandatangani dengan kunci pribadi dari otoritas sertifikat tepercaya.

  2. Peramban web Anda terpasang dengan kunci publik dari semua otoritas sertifikat utama. Ia menggunakan kunci publik ini untuk memverifikasi bahwa sertifikat server web memang ditandatangani oleh otoritas sertifikat tepercaya.

  3. Sertifikat tersebut berisi nama domain dan / atau alamat ip dari server web. Peramban web Anda mengonfirmasi dengan otoritas sertifikat bahwa alamat yang tercantum dalam sertifikat adalah yang memiliki koneksi terbuka.

  4. Browser web Anda menghasilkan kunci simetris bersama yang akan digunakan untuk mengenkripsi lalu lintas HTTP pada koneksi ini; ini jauh lebih efisien daripada menggunakan enkripsi kunci publik / pribadi untuk semuanya. Peramban Anda mengenkripsi kunci simetris dengan kunci publik dari server web kemudian mengirimkannya kembali, sehingga memastikan bahwa hanya server web yang dapat mendekripsi, karena hanya server web yang memiliki kunci privatnya.

Perhatikan bahwa otoritas sertifikat (CA) sangat penting untuk mencegah serangan man-in-the-middle. Namun, bahkan sertifikat yang tidak ditandatangani akan mencegah seseorang mendengarkan secara pasif lalu lintas terenkripsi Anda, karena mereka tidak memiliki cara untuk mendapatkan akses ke kunci simetris yang Anda bagikan.

Eli Courtwright
sumber
4
Sekitar langkah 1.5 server juga "menandatangani" sesuatu dengan kunci pribadi yang terkait dengan sertifikatnya. Ini digabungkan dengan pemeriksaan nama / IP untuk memastikan bahwa hanya situs pemilik sertifikat yang menyajikannya.
Darron
68
Untuk melihat contoh lengkap dari proses ini menggunakan Firefox yang terhubung ke amazon.com , lihat moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
9
Saya tidak tahu bahwa browser saya terpasang dengan kunci publik dari semua otoritas sertifikat utama. Sekarang saya tahu bagaimana sertifikat SSL saya diverifikasi tanpa risiko MITM :). Terima kasih!
OneChillDude
5
server perlu meminta sertifikat dari CAuthority, jadi ia mengirim permintaan ke sana. Bagaimana CA bisa memastikan server valid?
voipp
4
@voipp: Pertanyaan bagus! Secara historis ada beberapa pendekatan, seperti "mengirim email dari webmaster@<domain-being-verified>atau" Tempatkan file ini di domain Anda untuk membuktikan bahwa Anda memilikinya. "Namun, memang ada masalah dengan orang yang mendapatkan CA untuk menerbitkan sertifikat untuk domain yang tidak mereka miliki. sendiri - seseorang terkenal berhasil mendapatkan CA teduh untuk mengeluarkan mereka sertifikat untuk gmail.com!
Eli Courtwright
58

Perlu dicatat bahwa selain membeli sertifikat (seperti yang disebutkan di atas), Anda juga dapat membuatnya sendiri; ini disebut sebagai "sertifikat yang ditandatangani sendiri". Perbedaan antara sertifikat yang ditandatangani sendiri dan yang dibeli sederhana: sertifikat yang dibeli ditandatangani oleh Otoritas Sertifikat yang sudah diketahui browser Anda. Dengan kata lain, browser Anda dapat dengan mudah memvalidasi keaslian sertifikat yang dibeli.

Sayangnya hal ini menyebabkan kesalahpahaman umum bahwa sertifikat yang ditandatangani sendiri secara inheren kurang aman dibandingkan dengan yang dijual oleh CA komersial seperti GoDaddy dan Verisign, dan bahwa Anda harus hidup dengan peringatan / pengecualian peramban jika Anda menggunakannya; ini tidak benar .

Jika Anda secara aman mendistribusikan sertifikat yang ditandatangani sendiri (atau sertifikat CA, seperti yang disarankan bobince) dan menginstalnya di browser yang akan menggunakan situs Anda , itu sama amannya dengan yang dibeli dan tidak rentan terhadap orang yang sedang sibuk serangan dan pemalsuan sertifikat. Jelas ini berarti hanya layak jika hanya sedikit orang yang memerlukan akses aman ke situs Anda (mis. Aplikasi internal, blog pribadi, dll.).

Clint Harris
sumber
1
Memang, mendistribusikan sertifikat Anda sendiri dengan aman adalah salah satu cara untuk menguliti kucing, tetapi cara yang lebih mudah adalah pergi ke salah satu dari sejumlah CA yang disebut "terbuka". CACert.org adalah favorit saya. Selama Anda memercayai langkah-langkah yang mereka ambil untuk melindungi penerbitan sertifikat mereka, maka mengimpor sertifikat root mereka aman.
nsayer
6
Saya suka komentar ini - sayangnya itu menyoroti kelemahan yang sangat penting dengan CA. Katakanlah Anda mengimpor sertifikat CA dari Bob Smith - well Bob Smith dapat menandatangani sertifikat untuk domain apa pun (termasuk google.com dan chase.com). Inilah sebabnya mengapa GoDaddy / Verisign membayar uang besar untuk dimasukkan dalam OS - mereka diperiksa oleh pakaian keamanan untuk memastikan bahwa mereka memiliki cek di tempat untuk memastikan mereka tidak menandatangani sertifikat untuk orang jahat. Saya pikir Anda harus dapat mengatakan "CA ini hanya dapat menandatangani sertifikat untuk mysite.com".
Natalie Adams
Bukankah sertifikat yang ditandatangani sendiri lebih aman, karena CA di luar sana dapat dibayar untuk menandatangani sesuatu yang seharusnya tidak mereka miliki. Jika Anda dapat dengan aman mendistribusikan sertifikat CA ke titik akhir, selalu gunakan sertifikat yang ditandatangani sendiri.
javaPhobic
Apakah ada CA yang gratis dan terverifikasi di sebagian besar browser utama? Saya mencari sertifikat dasar hanya untuk memverifikasi saya memiliki email dan nama domain. Yang saya temukan tidak ada di sebagian besar browser utama.
Alex Kwitny
@NathanAdams Secara teori , CA besar seharusnya memeriksa permintaan agar tidak menerbitkan sertifikat palsu seperti yang Anda gambarkan ... tapi baca cerita ini: stripe.ian.sh
nsayer
38

Anda mengatakan itu

browser mendapatkan informasi penerbit sertifikat dari sertifikat itu, lalu menggunakannya untuk menghubungi penerbit, dan entah bagaimana membandingkan sertifikat untuk validitas.

Klien tidak perlu memeriksa dengan penerbit karena dua hal:

  1. semua browser memiliki daftar semua kunci publik CA yang sudah diinstal sebelumnya
  2. sertifikat ditandatangani, dan tanda tangan itu sendiri adalah bukti yang cukup bahwa sertifikat itu sah karena klien dapat memastikan, dengan sendirinya, dan tanpa menghubungi server penerbit, bahwa sertifikat itu asli. Itulah keindahan enkripsi asimetris.

Perhatikan bahwa 2. tidak dapat dilakukan tanpa 1.

Ini lebih baik dijelaskan dalam diagram besar ini saya buat beberapa waktu lalu

(lompat ke "tanda tangan apa?" di bagian bawah)

gumpal

ychaouche
sumber
9
Ini seharusnya jawaban yang diterima. Jawaban @Eli Courtwright adalah cara singkat untuk memahami cara kerja sertifikat.
Felix Crazzolara
Membaca ini sekali saja mungkin tidak cukup, tetapi jika Anda sudah terbiasa dengan potongan-potongan SSL, ini benar-benar menyatukan semuanya. Pekerjaan yang baik!
Cameron Gagnon
Gambar yang fantastis. Akhirnya sesuatu yang menjelaskan pertanyaan saya. Ke mana pun saya pergi untuk pergi secara mendalam hanya mengatakan "browser memverifikasi sertifikat itu benar". TAPI BAGAIMANA MELAKUKANNYA? Ini memberikan jawaban.
ori6151
8

Klien memiliki penyimpanan kunci publik otoritas sertifikat SSL yang disemaikan sebelumnya. Harus ada rantai kepercayaan dari sertifikat untuk server naik melalui otoritas perantara hingga salah satu yang disebut sertifikat "root" agar server dapat dipercaya.

Anda dapat memeriksa dan / atau mengubah daftar otoritas tepercaya. Seringkali Anda melakukan ini untuk menambahkan sertifikat untuk otoritas lokal yang Anda tahu Anda percayai - seperti perusahaan tempat Anda bekerja atau sekolah tempat Anda bersekolah atau yang tidak.

Daftar pra-seeded dapat bervariasi tergantung pada klien yang Anda gunakan. Vendor sertifikat SSL besar memastikan bahwa sertifikat root mereka ada di semua browser utama ($$$).

Serangan monyet-di-tengah adalah "mustahil" kecuali jika penyerang memiliki kunci pribadi dari sertifikat root tepercaya. Karena sertifikat yang sesuai digunakan secara luas, pemaparan kunci pribadi semacam itu akan berdampak serius bagi keamanan eCommerce secara umum. Karena itu, kunci-kunci pribadi itu dijaga dengan sangat ketat.

tidak doa
sumber