Отпечатъкът е толкова надежден, колкото е каналът, който ви е казал какво да очаквате. Ако стойността, с която сравнявате, е пристигнала по същата връзка, която тествате, сравнението не доказва нищо повече от това, че този, който контролира връзката, е последователен. Проверката трябва да върви в фиксиран ред и неуспешната стъпка трябва да ви спре, вместо да ви тласка към следващата. Ето реда, който използвам, когато VPN клиент съобщи, че сертификат се е сменил.

Назовате обекта, преди да назовете стойността

Решете дали очакваната стойност принадлежи на крайния сертификат на сървъра, на издаващия CA или на публичния ключ в крайния сертификат. Това са три различни проверки и те се провалят по различен начин. Съвпадащ отпечатък на CA не заковава сървъра, а хешът на публичния ключ умишлено преживява преиздаване, което запазва същия ключ.

Запишете и алгоритъма. SHA-256 днес е нормалното очакване, но по-старите инструменти отпечатваха SHA-1, освен ако не поискате друго, а 40-символна hex стойност е знак, че ще сравнявате две различни неща.

Вземете очакваната стойност по втори канал

Вторият канал трябва да е такъв, в който страната, срещу която се пазите, не може да пише. Система за предоставяне, в която вече се удостоверявате, печатен запис в сейф, база данни с конфигурация или подписан документ, доставен от друг процес, всички са подходящи. Съобщение в чат от колега, страница за поддръжка, достигната чрез резултат от търсене, и всичко, поставено в терминала, в който вече дебъгвате, не са подходящи.

Поискайте пълната стойност и алгоритъма, никога префикс. Двете точки и регистърът на буквите нямат значение, но отрязването превръща проверка от 256 бита в игра на отгатване.

Ако никой не може да предостави очакваната стойност от независим източник, честният резултат е, че този сертификат не може да бъде проверен днес. Да го кажете е по-добре, отколкото да заковавате това, което клиентът току-що показа, защото така превръщате предупреждението в навик.

Извлечете стойността от вашата страна

За файл на сертификат командата е openssl x509 -in server.crt -noout -fingerprint -sha256. Явният дайджест е важен: без него резултатът зависи от вашата версия на OpenSSL. Резултатът е шестнадесетичен низ, разделен с двоеточия, затова премахнете двоеточията и приведете двете страни в малки букви, преди да сравнявате.

За крайна точка, която говори TLS директно, се свържете и изведете сертификата през тръба: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Това работи за уеб административен панел или TLS слушател, но не за OpenVPN, чийто контролен канал стои вътре в тунела. За OpenVPN четете сертификата от профила на диска, вместо да се опитвате да го прихванете от сокета.

Сравнението трябва да е механично. Нормализирайте двете стойности с tr -d ':' и привеждане в еднакъв регистър, след което сравнете целия низ. Сравняването на око е начинът, по който съвпадащ префикс скрива разлика в последния байт. Ако низовете се различават, приемете разликата за реална, преди да търсите обяснение.

Условия за спиране

Спрете, ако обектът се различава, защото отпечатък на CA не може да оправдае краен сертификат, а краен сертификат не може да оправдае CA. Спрете, ако алгоритъмът се различава, защото стойност на SHA-1 срещу стойност на SHA-256 не ви казва нищо. Спрете, ако отпечатъкът съвпада, но сертификатът е изтекъл, отменен или издаден за друго име; съвпадащият хеш не е проверка за валидност и не поправя счупена верига. Спрете също, ако серийният номер не съвпада със серийния номер в записа, с който се сверявате, защото това е най-евтиният начин да забележите подменен сертификат.

Спрете, ако новата стойност е пристигнала по канала, който тествахте. Ротацията може законно да смени отпечатък, но стойността за замяна все пак трябва да идва от доверения процес, а не от диалога за предупреждение, който предизвика въпроса.

Спрете, ако предложеното решение е да изключите проверката на име на хост или на верига. Отпечатъкът добавя ограничение към нормалните проверки; той не ги замества, освен ако внедряването умишлено не е избрало модел само с пин, а този избор носи своите оперативни разходи.

След сравнението

Запишете какво сте сравнили, откъде е дошла очакваната стойност и кога. Ако сертификатът е преиздаден, обновете запазеното очакване по същия доверен канал и отбележете новия сериен номер, защото серийният номер е това, което прави следващата ротация одитируема.

След това бъдете ясни за границите. Отпечатъкът потвърждава, че сертификатът, който държите, е този, който някой ви е казал да очаквате. Той не казва нищо за това дали хостът е некомпрометиран, нито дали услугата регистрира или ограничава какво може да достигне този сертификат.

Подобни статии