Bagaimana cara kerja SSL?
Di mana sertifikat diinstal pada klien (atau browser?) Dan server (atau server web?)?
Bagaimana proses kepercayaan / enkripsi / otentikasi dimulai saat Anda memasukkan URL ke browser dan mendapatkan halaman dari server?
Bagaimana protokol HTTPS mengenali sertifikat? Mengapa HTTP tidak dapat berfungsi dengan sertifikat jika sertifikatlah yang melakukan semua pekerjaan kepercayaan / enkripsi / otentikasi?
ssl
ssl-certificate
Vicky
sumber
sumber
Jawaban:
Kemampuan TLS
"SSL" adalah nama yang paling sering digunakan untuk merujuk pada protokol ini, tetapi SSL secara khusus mengacu pada protokol berpemilik yang dirancang oleh Netscape pada pertengahan 90-an. "TLS" adalah standar IETF yang didasarkan pada SSL, jadi saya akan menggunakan TLS dalam jawaban saya. Saat ini, kemungkinan besar hampir semua koneksi aman Anda di web benar-benar menggunakan TLS, bukan SSL.
TLS memiliki beberapa kemampuan:
# 1 dan # 2 sangat umum. # 3 kurang umum. Anda tampaknya berfokus pada # 2, jadi saya akan menjelaskan bagian itu.
Autentikasi
Server mengautentikasi dirinya sendiri ke klien menggunakan sertifikat. Sertifikat adalah sekumpulan data [1] yang berisi informasi tentang situs web:
Anda dapat mencapai kerahasiaan (# 1 di atas) dengan menggunakan kunci publik yang disertakan dalam sertifikat untuk mengenkripsi pesan yang hanya dapat didekripsi oleh kunci privat terkait, yang harus disimpan dengan aman di server itu. [2] Sebut saja key pair ini KP1, agar nantinya kita tidak bingung. Anda juga dapat memverifikasi bahwa nama domain pada sertifikat cocok dengan situs yang Anda kunjungi (# 2 di atas).
Tetapi bagaimana jika musuh dapat memodifikasi paket yang dikirim ke dan dari server, dan bagaimana jika musuh itu memodifikasi sertifikat yang diberikan kepada Anda dan memasukkan kunci publiknya sendiri atau mengubah detail penting lainnya? Jika itu terjadi, musuh dapat mencegat dan mengubah pesan apa pun yang Anda anggap dienkripsi dengan aman.
Untuk mencegah serangan ini, sertifikat ditandatangani secara kriptografis oleh kunci privat orang lain sedemikian rupa sehingga tanda tangan dapat diverifikasi oleh siapa saja yang memiliki kunci publik yang sesuai. Mari kita sebut pasangan kunci ini KP2, untuk memperjelas bahwa ini bukan kunci yang sama yang digunakan server.
Otoritas Sertifikat
Jadi siapa yang membuat KP2? Siapa yang menandatangani sertifikat?
Sedikit menyederhanakan, otoritas sertifikat membuat KP2, dan mereka menjual layanan menggunakan kunci pribadinya untuk menandatangani sertifikat untuk organisasi lain. Misalnya, saya membuat sertifikat dan saya membayar perusahaan seperti Verisign untuk menandatanganinya dengan kunci pribadi mereka. [3] Karena tidak ada selain Verisign yang memiliki akses ke kunci pribadi ini, tidak ada dari kita yang dapat memalsukan tanda tangan ini.
Dan bagaimana saya secara pribadi mendapatkan kunci publik di KP2 untuk memverifikasi tanda tangan itu?
Kami telah melihat bahwa sertifikat dapat menyimpan kunci publik - dan ilmuwan komputer menyukai rekursi - jadi mengapa tidak memasukkan kunci publik KP2 ke dalam sertifikat dan mendistribusikannya seperti itu? Ini terdengar sedikit gila pada awalnya, tetapi sebenarnya itulah cara kerjanya. Melanjutkan contoh Verisign, Verisign menghasilkan sertifikat yang menyertakan informasi tentang siapa mereka, jenis hal apa yang boleh mereka tanda tangani (sertifikat lain), dan kunci publiknya.
Sekarang jika saya memiliki salinan sertifikat Verisign tersebut, saya dapat menggunakannya untuk memvalidasi tanda tangan pada sertifikat server untuk situs web yang ingin saya kunjungi. Mudah kan ?!
Tidak terlalu cepat. Saya harus mendapatkan sertifikat Verisign dari suatu tempat . Bagaimana jika seseorang memalsukan sertifikat Verisign dan meletakkan kunci publiknya sendiri di sana? Kemudian mereka dapat memalsukan tanda tangan pada sertifikat server, dan kami kembali ke tempat kami memulai: serangan man-in-the-middle.
Rantai Sertifikat
Terus berpikir secara rekursif, tentu saja kami dapat memperkenalkan sertifikat ketiga dan pasangan kunci ketiga (KP3) dan menggunakannya untuk menandatangani sertifikat Verisign. Kami menyebutnya rantai sertifikat: setiap sertifikat dalam rantai digunakan untuk memverifikasi sertifikat berikutnya. Mudah-mudahan Anda sudah dapat melihat bahwa pendekatan rekursif ini hanyalah penyu / sertifikat sepenuhnya. Dimana berhenti?
Karena kami tidak dapat membuat sertifikat dalam jumlah tak terbatas, rantai sertifikat jelas harus berhenti di suatu tempat , dan itu dilakukan dengan menyertakan sertifikat dalam rantai yang ditandatangani sendiri .
Ya, di akhir rantai sertifikat (alias "root"), akan ada sertifikat yang menggunakan pasangan kunci itu sendiri untuk menandatangani sendiri. Ini menghilangkan masalah rekursi tak terbatas, tetapi tidak memperbaiki masalah otentikasi. Siapa pun dapat membuat sertifikat yang ditandatangani sendiri yang bertuliskan apa pun di atasnya, seperti saya dapat membuat ijazah Princeton palsu yang mengatakan bahwa saya mengambil tiga jurusan politik, fisika teoretis, dan menendang pantat terapan dan kemudian menandatangani nama saya sendiri di bagian bawah.
Solusi [agak tidak menarik] untuk masalah ini hanya dengan memilih beberapa set sertifikat yang ditandatangani sendiri yang Anda percayai secara eksplisit. Misalnya, saya mungkin berkata, "Saya percaya sertifikat yang ditandatangani sendiri oleh Verisign".
Dengan kepercayaan eksplisit tersebut, sekarang saya dapat memvalidasi seluruh rantai sertifikat. Tidak peduli berapa banyak sertifikat yang ada dalam rantai tersebut, saya dapat memvalidasi setiap tanda tangan hingga ke akar. Ketika saya sampai ke root, saya dapat memeriksa apakah sertifikat root itu adalah salah satu yang saya percayai secara eksplisit. Jika demikian, maka saya bisa mempercayai seluruh rantai.
Kepercayaan yang Diberikan
Autentikasi di TLS menggunakan sistem kepercayaan yang diberikan . Jika saya ingin menyewa montir mobil, saya mungkin tidak mempercayai mekanik sembarangan yang saya temukan. Tapi mungkin teman saya menjamin mekanik tertentu. Karena saya mempercayai teman saya, maka saya dapat mempercayai mekanik itu.
Saat Anda membeli komputer atau mengunduh browser, ia dilengkapi dengan beberapa ratus sertifikat dasar yang dipercayai secara eksplisit. [4] Perusahaan yang memiliki dan mengoperasikan sertifikat tersebut dapat memberikan kepercayaan tersebut kepada organisasi lain dengan menandatangani sertifikat mereka.
Ini jauh dari sistem yang sempurna. Terkadang CA mungkin mengeluarkan sertifikat secara keliru. Dalam kasus tersebut, sertifikat mungkin perlu dicabut. Pencabutan rumit karena sertifikat yang diterbitkan akan selalu benar secara kriptografis; protokol out-of-band diperlukan untuk mengetahui sertifikat valid mana yang sebelumnya telah dicabut. Dalam praktiknya, beberapa protokol ini tidak terlalu aman, dan banyak browser yang tidak memeriksanya.
Terkadang seluruh CA disusupi. Misalnya, jika Anda membobol Verisign dan mencuri kunci penandatanganan root mereka, Anda dapat memalsukan sertifikat apa pun di dunia. Perhatikan bahwa ini tidak hanya memengaruhi pelanggan Verisign: meskipun sertifikat saya ditandatangani oleh Thawte (pesaing Verisign), itu tidak masalah. Sertifikat saya masih dapat dipalsukan menggunakan kunci penandatanganan yang telah disusupi dari Verisign.
Ini bukan hanya teoretis. Itu terjadi di alam liar. DigiNotar terkenal diretas dan kemudian bangkrut. Comodo juga diretas , tetapi entah mengapa mereka tetap beroperasi hingga hari ini.
Meskipun CA tidak secara langsung disusupi, ada ancaman lain dalam sistem ini. Misalnya, pemerintah menggunakan paksaan hukum untuk memaksa CA menandatangani sertifikat palsu. Majikan Anda dapat memasang sertifikat CA mereka sendiri di komputer karyawan Anda. Dalam berbagai kasus ini, lalu lintas yang Anda harapkan "aman" sebenarnya dapat dilihat / diubah sepenuhnya oleh organisasi yang mengontrol sertifikat tersebut.
Beberapa penggantian telah disarankan, termasuk Konvergensi , TACK , dan DANE .
Catatan Akhir
[1] Data sertifikat TLS diformat sesuai dengan standar X.509 . X.509 didasarkan pada ASN.1 ("Notasi Sintaks Abstrak # 1"), yang berarti bahwa ini bukan format data biner. Oleh karena itu, X.509 harus dienkode ke dalam format biner. DER dan PEM adalah dua pengkodean paling umum yang saya ketahui.
[2] Dalam praktiknya, protokol sebenarnya beralih ke sandi simetris, tetapi itu adalah detail yang tidak relevan dengan pertanyaan Anda.
[3] Mungkin, CA benar-benar memvalidasi siapa Anda sebelum menandatangani sertifikat Anda. Jika mereka tidak melakukannya, saya dapat membuat sertifikat untuk google.com dan meminta CA untuk menandatanganinya. Dengan sertifikat tersebut, saya dapat mengelola koneksi "aman" apa pun ke google.com. Oleh karena itu, langkah validasi merupakan faktor yang sangat penting dalam pengoperasian CA. Sayangnya, tidak terlalu jelas seberapa ketat proses validasi ini di ratusan CA di seluruh dunia.
[4] Lihat daftar CA terpercaya Mozilla .
sumber
HTTPS adalah kombinasi HTTP dan SSL (Secure Socket Layer) untuk menyediakan komunikasi terenkripsi antara klien (browser) dan server web (aplikasi dihosting di sini).
Mengapa ini dibutuhkan?
HTTPS mengenkripsi data yang dikirimkan dari browser ke server melalui jaringan. Jadi, tidak ada yang bisa mengendus data selama transmisi.
Bagaimana koneksi HTTPS dibuat antara browser dan server web?
Aliran ini dapat diwakili oleh diagram berikut:
sumber
Saya telah menulis posting blog kecil yang membahas prosesnya secara singkat. Silakan lihat.
Jabat Tangan SSL
Cuplikan kecil dari yang sama adalah sebagai berikut:
"Klien membuat permintaan ke server melalui HTTPS. Server mengirimkan salinan sertifikat SSL + kunci publiknya. Setelah memverifikasi identitas server dengan penyimpanan CA tepercaya lokalnya, klien membuat kunci sesi rahasia, mengenkripsinya menggunakan publik server kunci dan mengirimkannya. Server mendekripsi kunci sesi rahasia menggunakan kunci pribadinya dan mengirimkan pengakuan ke klien. Saluran aman dibuat. "
sumber
Mehaase sudah menjelaskannya secara rinci. Saya akan menambahkan 2 sen saya ke seri ini. Saya memiliki banyak postingan blog seputar jabat tangan dan sertifikat SSL. Meskipun sebagian besar berkisar pada server web IIS, pos tersebut masih relevan dengan handshake SSL / TLS secara umum. Berikut beberapa untuk referensi Anda:
Membangun kepercayaan antara pihak yang berkomunikasi melalui Penyimpanan Sertifikat
Komunikasi SSL / TLS hanya berfungsi atas dasar kepercayaan. Setiap komputer (klien / server) di internet memiliki daftar CA Root dan CA Perantara yang dipelihara. Ini diperbarui secara berkala. Selama handshake SSL, ini digunakan sebagai referensi untuk membangun kepercayaan. Misalnya, selama handshake SSL, ketika klien memberikan sertifikat ke server. Server akan mencoba memeriksa apakah CA yang menerbitkan sertifikat ada dalam daftar CA-nya. Jika tidak dapat melakukan ini, ia menyatakan bahwa ia tidak dapat melakukan verifikasi rantai sertifikat. (Ini adalah bagian dari jawabannya. Ini juga melihat AIAuntuk ini.) Klien juga melakukan verifikasi serupa untuk sertifikat server yang diterimanya di Server Hello. Di Windows, Anda dapat melihat penyimpanan sertifikat untuk klien & Server melalui PowerShell. Jalankan di bawah ini dari konsol PowerShell.
Browser seperti Firefox dan Opera tidak bergantung pada OS yang mendasari untuk manajemen sertifikat. Mereka memelihara penyimpanan sertifikat terpisah mereka sendiri.
Jabat tangan SSL menggunakan Kriptografi Kunci Umum & Simetris. Otentikasi Server terjadi secara default. Otentikasi Klien bersifat opsional dan tergantung apakah titik akhir Server dikonfigurasi untuk mengotentikasi klien atau tidak. Lihat posting blog saya karena saya telah menjelaskan ini secara rinci.
Akhirnya untuk pertanyaan ini
Sertifikat hanyalah file yang formatnya ditentukan oleh standar X.509 . Ini adalah dokumen elektronik yang membuktikan identitas pihak yang berkomunikasi. HTTPS = HTTP + SSL adalah protokol yang mendefinisikan pedoman tentang bagaimana 2 pihak harus berkomunikasi satu sama lain.
INFORMASI LEBIH LANJUT
Jika aktivitas di atas dilakukan, maka Anda akan memiliki pemahaman yang adil tentang Sertifikat dan SSL.
sumber