Поясню на прикладі.
У звичайних PKI на основі ключових пар існують приватний ключ і відкритий ключ.
У системі на основі сертифікатів є приватний ключ та сертифікат. Сертифікат містить більше інформації, ніж відкритий ключ.
Демонстрація (Ви можете створити сертифікат та приватний ключ): http://www.selfsignedcertificate.com/
Ви можете завантажити відкрити файл приватного ключа та файл сертифікатів; ви бачите, що файл сертифіката містить багато інформації, як показано нижче.
Ви можете зіставити створений сертифікат (відкриття текстовим редактором) та приватний ключ (відкриття текстовим редактором) з цього веб-сайту: https://www.sslshopper.com/certificate-key-matcher.html
Якщо сертифікат відповідає приватному ключу клієнта, клієнт впевнений, що сертифікат видається клієнтом або надається довіреним агентом клієнта (CA).
Однак існують проблеми лише у зв'язку із приватним ключем та зв’язком на основі сертифікатів .
Тому що кожен може генерувати свій власний сертифікат та приватний ключ, тому просте рукостискання не підтверджує нічого іншого, крім того, що сервер знає приватний ключ, який відповідає відкритому ключу сертифіката. Один із способів вирішити цю проблему полягає у тому, щоб клієнт мав набір одного або декількох сертифікатів, яким він довіряє. Якщо сертифікат відсутній у наборі, серверу не слід довіряти .
У цього простого підходу є кілька недоліків. Сервери повинні мати можливість оновити з часом більш сильні клавіші ("поворот клавіш"), що замінює відкритий ключ у сертифікаті на новий. На жаль, тепер клієнтську програму доводиться оновлювати через те, що по суті є зміною конфігурації сервера. Це особливо проблематично, якщо сервер не перебуває під контролем розробника програми, наприклад, якщо це веб-сервіс третьої сторони. Цей підхід також має проблеми, якщо додаток повинен спілкуватися з довільними серверами, такими як веб-браузер або програма електронної пошти.
Для вирішення цих недоліків сервери, як правило, налаштовані сертифікатами відомих емітентів, які називаються органами сертифікації (CA). він хост-платформа (клієнт), як правило, містить список відомих ЦС, яким він довіряє. Подібно до сервера, CA має сертифікат та приватний ключ. При видачі сертифіката для сервера ЦС підписує сертифікат сервера, використовуючи його приватний ключ. Потім клієнт може переконатися, що сервер має сертифікат, виданий відомим платформою КА.
Однак, вирішуючи деякі проблеми, за допомогою КА вводиться інша. Оскільки ЦА видає сертифікати для багатьох серверів, вам все-таки потрібен певний спосіб переконатися, що ви спілкуєтесь із потрібним сервером. Щоб вирішити цю проблему, сертифікат, виданий CA, ідентифікує сервер або з певним іменем, таким як gmail.com, або з набором кодів, розміщених під маскою, наприклад * .google.com.
Наступний приклад зробить ці поняття дещо конкретнішими. У фрагменті, наведеному нижче, у командному рядку команда s_client інструмента openssl розглядає інформацію про сертифікат сервера Вікіпедії. Він визначає порт 443, тому що це типовий для HTTPS. Команда надсилає вихід openssl s_client на openssl x509, який форматує інформацію про сертифікати відповідно до стандарту X.509. Зокрема, команда запитує тему, яка містить інформацію про ім’я сервера, та емітента, який ідентифікує ЦС.
$ 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
Ви можете бачити, що сертифікат виданий для серверів, які відповідають * .wikipedia.org. RapidSSL CA.
Як бачите, через цю додаткову інформацію, яку CA відправляє на сервери, клієнт може легко знати, спілкується він із своїм сервером чи ні.