Същото име на файл ca.crt, различен сертификат: какво да сравним
Два профила могат да донесат ca.crt с различно съдържание. Отпечатайте какво зарежда процесът и после проверете дали това е котвата на доверие, която сте имали предвид.
Два профила и двата носят файл с име ca.crt, един тунел се вдига, а другият се проваля с грешка във веригата. Отварянето на двата файла един до друг рядко решава въпроса, а изключването на проверката го решава в грешната посока. Въпросът, който грешката всъщност задава, е по-тесен: кой сертификат зарежда всеки процес като своя котва на доверие и двата един и същ обект ли са? Отговорете първо на това и останалата част от диагностиката придобива посока. Името на файла е етикет на опаковката, а пътят, записан в профила, също не е авторитетен, така че всичко зависи от това какво процесът действително чете.
Намерете сертификата, който клиентът действително зарежда
OpenVPN приема органа в две форми и формата определя кои байтове имат значение. Един профил може да сочи към външен файл с ca или да вгради сертификата в блок <ca> в самия профил. Когато съществуват и двете, вграденият блок печели и файлът до профила никога не се отваря.
Прочетете неуспешния профил и открийте коя форма използва, преди да сравнявате каквото и да е. Копие, взето от съседна папка или от пакета, от който е дошъл другият профил, не ви казва нищо за това на какво вярва този процес. Същото важи и за пътя в конфигурацията: той се разрешава спрямо мястото, от което е стартиран клиентът, а това не винаги е папката, която гледате. Четете профила, не папката.
Сертификатите се идентифицират по съдържанието си: публичния ключ, субекта и издателя, периода на валидност и подписа върху всичко това. Два файла с еднакви байтове са един и същ сертификат, както и да се наричат, а два файла с едно и също име могат да са несвързани органи. Името е етикет на опаковката, не самоличност.
Отпечатайте двете копия с openssl
Отпечатъкът е хеш върху DER кодирането на сертификата, формата, която подписът покрива, така че краищата на редовете и текстът на заглавката не могат да му повлияят. Изчислете го за всеки файл и получавате два шестнадесетични низа, разделени с двоеточие, които или съвпадат, или не. Нищо друго в сертификата не трябва да се чете, за да се отговори на въпроса за сравнението.
openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256
Изкушаващо е да насочите openssl към самия профил, но той чете първия блок на сертификат, който се появи във файла, а профилът обикновено носи <cert> преди <ca>. Извадете блока на органа, после отпечатайте извадения файл, защото това е копието, което клиентът действително ще използва.
sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256
Еднаквите отпечатъци означават, че материалът за доверие е същият и грешката във веригата има друга причина, което е друго разследване. Различните отпечатъци означават различни сертификати и точно там започва следващият раздел.
Прочетете несъответствието, преди да предполагате атака
Различните отпечатъци означават различни сертификати и нищо повече. Преиздаване, ротация, преименуван орган или остарял пакет всички дават различни файлове с напълно законни истории. Кой от тях принадлежи на разгръщането е въпрос за оператора или записа за разгръщане, а не за времето на промяна на файла. Архивите копират времеви отпечатъци, така че по-нов файл не е автоматично правилната котва.
Корен, който сам се подписва, е нормално, така че намирането на такъв не е доказателство за проблем. Работата на проверяващия е да построи път от сертификата на сървъра до котвата, която му е дадена, и грешка във веригата обикновено означава, че този път не е могъл да бъде завършен.
Проверете дали котвата на неуспешния профил е орган, от който разгръщането все още издава. Ако отпечатъкът не съвпада с нищо в записа за разгръщане, профилът просто е остарял и никаква настройка от страна на клиента няма да го поправи.
Възстановете доверието, без да изключвате проверката
Краткосрочното решение е да изключите проверката или да добавите всеки сертификат във веригата като котва. И двете карат съобщението да изчезне и двете променят кои сървъри клиентът ще приема оттук нататък. Включете проверката отново, инсталирайте желаната котва и тествайте пак.
Ако веригата сега се построи, но се появи друга грешка, това е напредък: проверката на името, датите на валидност и отмяната са отделни проверки с отделни съобщения. Пазете двойката отпечатъци и оригиналния текст на грешката заедно в заявката, за да види следващият човек коя котва е заредена и коя е била очаквана. Двойка отпечатъци е достатъчно малка, за да се постави в бележка за предаване, и следващият случай тогава отнема пет минути вместо следобед.
Вземете правилния орган през същия удостоверен канал, който е доставил профила. Изтеглянето на сертификат от сървъра, защото субектът му изглежда познат, е друго действие и тихо разширява това, на което клиентът ще вярва.