Зіставлення сертифіката й приватного ключа

Вставте сертифікат, який використовує сервер, і приватний ключ, який ви збираєтеся розгорнути разом із ним, і ця сторінка відповість на питання, через яке розгорнутий сайт відмовляє: чи обидва походять від однієї пари ключів? Відповідь не є здогадом за довжиною модуля чи відбитками — сторінка підписує фіксований виклик приватним ключем і перевіряє підпис відкритим ключем із сертифіката. Якщо перевірка проходить, вони належать одне одному; якщо ні, жодне редагування конфігурації їх не змусить працювати. Обидва прочитання показано поруч із алгоритмом, розміром ключа, ідентифікатором ключа суб'єкта та відбитком відкритого ключа, і нічого з вставленого не залишає браузер.
1. Сертифікат або ланцюг
Вставляйте скільки завгодно блоків. Кожен сертифікат перевіряється з кожним ключем, тож ланцюг плюс один ключ точно показує, якому сертифікату в ланцюгу належить цей ключ — часта несподіванка на сервері, який віддає не той сертифікат з пакета. Зчитуються PEM, голе тіло base64 або шістнадцяткові дані та файл PKCS#7 .p7b; перевірка сертифіката аудитує сам сертифікат, щойно ключ визначено.
2. Приватний ключ або відкритий ключ
Розпізнаються PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 (BEGIN RSA PRIVATE KEY), SEC1 (BEGIN EC PRIVATE KEY) і голий відкритий ключ SPKI (BEGIN PUBLIC KEY), а також файл ключа, вставлений як base64 або шістнадцяткові дані. Зашифрований ключ PKCS#8 (BEGIN ENCRYPTED PRIVATE KEY) браузер прочитати не може — його так і позначено, з командою, яка прибирає парольну фразу.
ще нічого не перевірено
Зразок — це самопідписаний сертифікат і приватний ключ до нього, обидва створені для цієї сторінки і нічого не захищають. Замініть ключ будь-яким іншим, щоб побачити інший висновок, або вставте блок відкритого ключа замість приватного, щоб побачити збіг відкритого ключа.
Приватний ключ, вставлений на будь-яку веб-сторінку, варто спершу обміркувати. Ця сторінка — один файл звичайного JavaScript, вона нічого не завантажує звідки б то не було і не робить жодних запитів, тож ключ читається, використовується і забувається всередині цієї вкладки. Але це обіцянка, даний кодом, який можна прочитати, а не гарантія від мережі, яку ви можете побачити: якщо маєте справу з продуктивним ключем, працюйте офлайн і майте на увазі, що найбезпечніша перевірка — та сама команда openssl на власному сервері. Ключ, вставлений сюди, ніколи не зберігається, не записується у файл і нікуди не надсилається — зокрема кнопками експорту, які записують висновки про ключ, але ніколи сам ключ.
Чому відповідь — підпис. Два файли можуть виглядати схоже і все одно не збігатися: у більшості посібників RSA-ключі порівнюють за модулем, але це працює лише для RSA, а ключ може мати правильний модуль із пошкодженим експонентом або неправильним доповненням. Ця сторінка доводить пару так, як це робить рукостискання: підписує фіксований виклик приватним ключем і перевіряє підпис відкритим ключем із сертифіката — тож висновок справедливий і для RSA, і для ECDSA, і для Ed25519. Якщо вставлено лише відкриту половину, байти відкритого ключа порівнюються з тими, що в сертифікаті; це так само переконливо щодо ідентичності, але не доводить, що хтось володіє приватною половиною.

Чого збіг не говорить. Що це той ключ, який фактично завантажив сервер, що сертифікату довіряють, що файл ключа цілий на диску або що його ніхто не скопіював. Також він не скаже, чи це той сертифікат, який отримає клієнт, бо балансувальник навантаження або CDN перед сайтом може віддавати інший. Щоб перевірити, що насправді показує живий сервер, виконайте openssl s_client -connect example.com:443 -servername example.com -showcerts і вставте цей вивід у поле сертифіката.

Звідки беруться файли. Сертифікат — це те, з чим налаштовано ваш сервер, або той, що експортовано з браузера чи взято з пакета .p7b. Приватний ключ — це файл, який ваш веб-сервер читає під час запуску, зазвичай щось на кшталт privkey.pem або server.key. Якщо ключ зашифровано, спершу розшифруйте копію командою openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-plain.pem, вставте її, а потім видаліть копію.
Ще нічого не перевірено. Вставте сертифікат і ключ вище та натисніть Перевірити, чи вони збігаються. Висновок з'явиться тут разом із доказами, а звіт можна скопіювати або зберегти.
Та сама перевірка через openssl на вашому комп'ютері
# відкритий ключ всередині сертифіката openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256 # відкритий ключ всередині приватного ключа openssl pkey -in key.pem -pubout | openssl pkey -pubin -outform DER | openssl sha256 # два дайджести рівні лише тоді, коли пара належить разом # старіший спосіб лише для RSA: порівняти модулі openssl x509 -in cert.pem -noout -modulus | openssl md5 openssl rsa -in key.pem -noout -modulus | openssl md5
Порівняння дайджестів працює для кожного типу ключа і відповідає відбитку відкритого ключа, який показує ця сторінка, тоді як порівняння модулів існує лише для RSA. Жодне з них не доводить, що хтось володіє приватною половиною — це робить перевірка підпису вище, тому сторінка її й використовує.
Що містить звіт. Висновок, пару читань, з яких він зроблений (алгоритм, розмір ключа, крива, ідентифікатор ключа суб'єкта та відбиток відкритого ключа для сертифіката і для ключа), а також точну перевірку, яка виконувалася. Звіт ніколи не містить самого приватного ключа: ключ використовується для створення підпису і не записується в текст, JSON чи буфер обміну. Те, що ви копіюєте або зберігаєте, безпечно прикріпити до заявки; вставлений вами ключ — ні, і буфер обміну варто вважати єдиним іншим місцем, де він коли-небудь був.

Конфіденційність: сертифікат і ключ читаються у вкладці, нічого не завантажується, а сторінка взагалі не робить жодних запитів — тут немає ні зондування, ні пошуку. Щоб створити пару, що відповідає одна одній, скористайтеся генератором самопідписаних сертифікатів; щоб запросити сертифікат для наявного ключа, — генератором CSR; щоб прочитати вміст сертифіката, — декодером сертифікатів.