Де у файлі ключа VPN живуть n, e, d, p і q з RSA
n, e, d, p і q містяться всередині однієї структури, а не в іменах файлів. Прочитайте ключ RSA для VPN за допомогою OpenSSL і зіставте його із сертифікатом, не друкуючи секретів.
Літери в поясненні RSA називають поля всередині одного об’єкта, а не файли, які видає інструмент PKI. Файл закритого ключа містить структуру, перші поля якої відкриті, а наступні не повинні ніколи залишати машину, що завершує тунель. Між цими двома фактами лежить більшість практичних питань про те, який файл відповідає на яке питання. Цей посібник спочатку читає структуру, а потім команди, які її перевіряють, не виливаючи її.
Переконайтеся, що ключ RSA, перш ніж шукати прості числа
Сертифікат доводить, що якийсь ключ існує і був підписаний; він не доводить, що ключ є RSA. Системи можна будувати на еліптичних кривих або Ed25519, і та сама структура каталогів служить усім. Перевірте алгоритм, перш ніж почати шукати прості множники, яких там ніколи не було.
Ці три команди лише для читання відповідають на питання і записують версію інструмента.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
Версія важлива, бо назви параметрів переміщалися між основними випусками. У виводі сертифіката знайдіть рядок алгоритму відкритого ключа і розмір ключа; у виводі ключа ключ RSA друкує модуль і відкритий показник. Ключ на еліптичній кривій друкує натомість названу криву, і жоден пошук не дасть з нього n або q.
Читайте структуру, а не base64
PEM — це base64, загорнутий у рядки заголовка, і його декодування дає DER, тобто серіалізовану структуру, а не одне величезне ціле число. Закриті ключі RSA подорожують у двох звичайних контейнерах, PKCS#1 і PKCS#8, і обидва зводяться до одного й того самого набору чисел.
У випадку двох простих чисел закрита структура несе дев’ять полів: версію, модуль n, відкритий показник e, закритий показник d, прості числа p і q, два показники CRT і коефіцієнт CRT. RFC 8017 розділ A.1 визначає ці складники та розкладку ASN.1, а також допускає більше двох простих чисел, тому загальний аналізатор може друкувати додаткові записи простих чисел. Зверніть увагу на порядок, бо він пояснює часту помилку: відкрита половина зберігається всередині закритого файлу, тож наявність відкритого поля не робить цей файл безпечним для передавання. Усе після нього — матеріал, який має залишатися на хості.
Кодування додає шар, який легко сплутати зі вмістом. openssl asn1parse малює структуру як дерево, щоб порядок полів став видимим, і він нічого не розшифровує і не повідомляє, чи придатний ключ.
Зіставте сертифікат із ключем, не друкуючи ключ
Наступне питання зазвичай у тому, чи належать сертифікат і ключ одне одному. Порівняння модулів відповідає на це, але також копіює матеріал, близький до закритого, у термінальний запис, який може потрапити до заявки. Порівняння відкритих половин відповідає на те саме питання, не залишаючи на екрані нічого чутливого.
openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH
Однакові файли означають, що сертифікат несе відкриту половину цього ключа, а різниця означає, що ви тримаєте неправильну пару. Саме ця невідповідність є найчастішою причиною тунелю, який успішно домовляється, а потім відмовляє в автентифікації. Потім видаліть два тимчасові файли; у них немає нічого секретного, але в чистому робочому каталозі легше міркувати посеред інциденту.
Знайте, чим не є сусідні файли
Сертифікат — не зашифрований відкритий ключ, який партнер відкриває сертифікатом CA; це підписаний зв’язок між відкритим ключем і даними ідентичності. Закритий ключ підпису CA залишається окремим від власного сертифіката і від кожного клієнтського ключа. Запит також не є сертифікатом: він несе запитані відомості та відкритий ключ із підписом над запитом, що робить його вхідними даними реєстрації, а не доказом права.
| File | Answers | Does not prove |
|---|---|---|
| vpn-client.key | Possession of the private key | That the identity is enrolled |
| vpn-client.crt | A signed binding of public key to identity | That the client holds the matching key |
| vpn-client.csr | The requested binding and public key | That access was granted |
| dh2048.pem | Group parameters for key exchange | Any RSA component |
| crl.pem | Revocation status for certificates | Anything about a private key |
Два з цих записів плутають із параметрами RSA достатньо часто, щоб назвати їх двічі. Файл параметрів Diffie-Hellman містить групові параметри для встановлення ключа і жодного простого числа RSA, хоча він теж друкується як велике просте число. Список відкликання публікує статус сертифікатів і не є місцем, де міг би сховатися закритий показник.
Тому кожен рядок інвентаризації має записувати чотири речі: тип об’єкта, власника, призначення і чи включено закритий матеріал. Останній стовпець вирішує, куди файл можна копіювати, і саме його люди пропускають.
Зафіксуйте зіставлення, потім перевірте рукостискання
Перш ніж щось змінювати, збережіть вивід перевірки з датою і версією OpenSSL. Тоді пізнішу ротацію можна порівняти з доказами, а не з пам’яттю.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
Після порівняння відкритого ключа пройдіть шлях, який споживає пару: підніміть тунель, переконайтеся, що сертифікат подано й прийнято, і перевірте, яку ідентичність записав шлюз. Якщо ключ і сертифікат збігаються, а автентифікація все одно не проходить, дефект у довірі, зіставленні ідентичності або політиці доступу, а не в парі.
Для відкату тримайте попередній ключ і сертифікат у каталозі з датою і відновлюйте обидва разом, ніколи лише один із двох. Ключ без сертифіката і сертифікат без ключа ззовні зазнають невдачі однаково, що робить наполовину відновлені пари дорогими для розплутування о другій годині ночі.