Izinkan saya menjelaskan dengan sebuah contoh.
Dalam PKI berbasis pasangan kunci normal, ada kunci pribadi dan kunci publik.
Dalam sistem berbasis sertifikat, ada kunci pribadi dan sertifikat. Sertifikat memiliki lebih banyak informasi daripada kunci publik.
Demo (Anda dapat menghasilkan sertifikat dan kunci pribadi): http://www.selfsignedcertificate.com/
Anda dapat mengunduh membuka file kunci pribadi dan file sertifikat, Anda melihat file sertifikat berisi banyak informasi seperti yang ditunjukkan di bawah ini.
Anda dapat mencocokkan sertifikat yang dihasilkan (dibuka oleh editor teks), dan kunci pribadi (dibuka oleh editor teks) dari situs ini: https://www.sslshopper.com/certificate-key-matcher.html
Jika sertifikat cocok dengan kunci pribadi klien, klien yakin, sertifikat itu diberikan oleh klien atau diberikan oleh agen tepercaya klien (CA).
Namun, ada masalah hanya dalam komunikasi kunci pribadi dan berbasis sertifikat .
Karena, siapa pun dapat membuat sertifikat dan kunci pribadi mereka sendiri, sehingga jabat tangan sederhana tidak membuktikan apa pun tentang server selain dari itu server mengetahui kunci pribadi yang cocok dengan kunci publik sertifikat. Salah satu cara untuk mengatasi masalah ini adalah meminta klien memiliki satu set atau lebih sertifikat yang dipercayai. Jika sertifikat tidak diatur, server tidak dapat dipercaya .
Ada beberapa kelemahan dari pendekatan sederhana ini. Server harus dapat meningkatkan ke kunci yang lebih kuat dari waktu ke waktu ("rotasi tombol"), yang menggantikan kunci publik dalam sertifikat dengan yang baru. Sayangnya, sekarang aplikasi klien harus diperbarui karena pada dasarnya perubahan konfigurasi server. Ini khususnya bermasalah jika server tidak di bawah kendali pengembang aplikasi, misalnya, jika itu adalah layanan web pihak ketiga. Pendekatan ini juga memiliki masalah jika aplikasi harus berbicara dengan server yang sewenang-wenang seperti browser web atau aplikasi email.
Untuk mengatasi kelemahan ini, server biasanya dikonfigurasikan dengan sertifikat dari penerbit terkenal yang disebut Certificate Authorities (CAs). host-platform (klien) umumnya berisi daftar CA terkenal yang dipercayai. Mirip dengan server, CA memiliki sertifikat dan kunci pribadi. Saat mengeluarkan sertifikat untuk server, CA menandatangani sertifikat server menggunakan kunci privasinya. Klien kemudian dapat memverifikasi bahwa server memiliki sertifikat yang dikeluarkan oleh CA yang dikenal oleh platform.
Namun, saat memecahkan beberapa masalah, penggunaan CA memperkenalkan masalah lain. Karena CA mengeluarkan sertifikat untuk banyak server, Anda masih perlu beberapa cara untuk memastikan Anda berbicara dengan server yang Anda inginkan. Untuk mengatasinya, sertifikat yang dikeluarkan oleh CA mengidentifikasi server baik dengan nama tertentu seperti gmail.com atau kumpulan host wildcard seperti * .google.com.
Contoh berikut akan membuat konsep-konsep ini sedikit lebih konkret. Dalam cuplikan di bawah ini dari baris perintah, perintah s_client alat openssl melihat informasi sertifikat server Wikipedia. Ini menentukan port 443 karena itu adalah default untuk HTTPS. Perintah mengirimkan output dari openssl s_client ke openssl x509, yang memformat informasi tentang sertifikat sesuai dengan standar X.509. Secara khusus, perintah meminta subjek, yang berisi informasi nama server, dan penerbit, yang mengidentifikasi CA.
$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA
Anda dapat melihat bahwa sertifikat dikeluarkan untuk server yang cocok * .wikipedia.org oleh RapidSSL CA.
Seperti yang Anda lihat, karena informasi tambahan ini dikirim oleh CA ke Server, klien dapat dengan mudah mengetahui apakah ia berkomunikasi dengan servernya atau tidak.