Огляд сертифіката VPN без розкриття ключа
Читайте лише публічні поля, дати й відбитки, не друкуючи ключовий матеріал. Яка команда безпечна, залежить від того, що містить файл і хто побачить вивід.
Читання публічних полів сертифіката ніколи не вимагає показу приватного ключа, що йому відповідає, а інструменти для цього постачаються з кожною системою, яка завершує VPN. Ризик на один крок раніше: переданий вам файл може взагалі не бути сертифікатом. Сертифікат PEM, двійковий блок DER, пакет PKCS#12 і профіль OpenVPN можуть надійти під однаковою назвою й містити геть різний матеріал, тож визначте контейнер, перш ніж обирати команду.
Яку команду безпечно застосовувати, визначають три факти: що містить файл, що вам потрібно з нього прочитати і хто побачить вивід. Помиліться хоч в одному, і сама перевірка стане інцидентом.
Який із трьох файлів вам передали
Сертифікат PEM — це текст із видимими маркерами BEGIN і END, файл DER — двійкові дані, що потребують прапорця вхідного формату, а пакет — контейнер, який може містити ключ поруч із сертифікатом. file server.crt за секунду відрізняє текст від двійкових даних, а погляд на перший рядок відділяє голий сертифікат від профілю, що його вбудовує. Саме здогади тут перетворюють перевірку на інцидент.
Якщо файл є профілем, а не сертифікатом, поводьтеся з ним як з обліковими даними, доки не доведено протилежне. Це припущення нічого не коштує і запобігає найпоширенішій помилці в усій цій роботі.
Читання публічних полів сертифіката PEM
Для сертифіката, який вам дозволено перевіряти, підкоманда x509 з -noout друкує лише вибрані вами поля і більше нічого. Придушення тіла зберігає вивід у межах метаданих, і саме це робить його безпечним для вставлення в заявку. Селектори нижче є публічними, а решту перелічує документація openssl x509.
openssl x509 -in server.crt -noout -subject -issuer -dates -fingerprint -sha256
На локально створеному тестовому сертифікаті ця команда друкує рядок subject та issuer, пару notBefore–notAfter і один відбиток SHA-256. Ці поля ідентифікують об’єкт; вони не встановлюють чинний шлях довіри, а це окреме завдання перевірки з власною командою та власною відповіддю. Файл ланцюжка може друкувати лише перший сертифікат, якщо ви самі не пройдете файлом у циклі. Порівняння двох файлів у такий спосіб коштує однієї команди і вирішує, який із них партнер насправді пред’являє.
Пакети, що містять ключ поруч із сертифікатом
.p12 або .pfx може містити приватний ключ, і команда розбору надрукує його, якщо ви не придушите цю частину виводу. З -nokeys та сама команда все одно повідомляє структуру контейнера, включно з прихованим мішком ключа, не виводячи жодного ключового матеріалу; приберіть цей прапорець, і блок ключа з’явиться у вашому терміналі та в історії оболонки.
openssl pkcs12 -in bundle.p12 -nokeys -info -passin env:P12PASS
Профіль OpenVPN вбудовує той самий матеріал як текст, тож межа видима, якщо знати, де шукати. Публічний матеріал лежить між BEGIN CERTIFICATE та END CERTIFICATE, а все між BEGIN PRIVATE KEY і відповідним рядком END — це ключ, і він не повинен залишати хост. Копіювання профілю цілком оприлюднює обидва.
Звідки взяти еталонне значення
Відбиток, прочитаний із з’єднання, яке ви намагаєтеся перевірити, нічого не доводить, бо його надала сторона, якій ви не довіряєте. Це не аргумент проти відбитків; це аргумент про походження. Порівняйте значення з тим, що отримано каналом, у який партнер не може писати, наприклад сертифікатом, опублікованим у внутрішньому сховищі, або хешем, надрукованим у підписаному записі про зміни.
Де перевірку виконує сховище довіри, дозвольте йому це зробити і прочитайте помилку, яку воно видає, замість підставляти власне порівняння. Важлива відмінність — хто надав еталон, а не яку хеш-функцію використано.
Як поділитися результатом і що робити після помилки
Надсилайте точну помилку перевірки, відповідні дати і лише ті дані ідентифікації, які потрібні отримувачу. Внутрішні імена хостів і ідентифікатори облікових записів залишаються чутливими навіть без ключа, і публічний сервіс вставлення не є правильним місцем для жодного з них. Вставляйте в заявку, а не в тимчасовий буфер, який хтось інший ділить.
Якщо ключовий матеріал справді з’явився на екрані чи у файлі, вважайте його скомпрометованим і замініть, а не сподівайтеся, що ніхто не дивився. Потім запишіть, який файл перевіряли, яку команду використали і куди пішов вивід, бо саме цей запис перетворює переляк на процедуру. Заміна ключа дешева порівняно з ціною припущення, що ніхто не зберіг знімок екрана, і той самий запис підкаже наступному інженеру, яких файлів узагалі торкалися. Зробіть обидві дії до закриття заявки.