Літери в поясненні 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 залишається окремим від власного сертифіката і від кожного клієнтського ключа. Запит також не є сертифікатом: він несе запитані відомості та відкритий ключ із підписом над запитом, що робить його вхідними даними реєстрації, а не доказом права.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything 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

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

Для відкату тримайте попередній ключ і сертифікат у каталозі з датою і відновлюйте обидва разом, ніколи лише один із двох. Ключ без сертифіката і сертифікат без ключа ззовні зазнають невдачі однаково, що робить наполовину відновлені пари дорогими для розплутування о другій годині ночі.

Схожі статті