Грешка при доверие в IKEv2 на Android: изпратете междинния CA, а не кореновия
Телефонът отхвърля шлюза, защото получената верига спира преждевременно. Решете: изпратете междинния сертификат, поправете идентичността или сменете типа ключ.
Телефонът отказва връзка и отпечатва No trusted RSA public key found for vpn.example.net, докато същият сертификат на шлюза работи от лаптоп в същата мрежа. Изкушаващото действие е да издадете сертификата наново. Преди това установете кой от трите отказа имате, защото само един от тях е за съдържанието на сертификата.
Три отказа зад едно съобщение
Android изгражда верига от сертификата на шлюза до CA, избран в профила VPN, после сравнява името на сървъра с профила. Известието съобщава резултата, не етапа. Отказ на доверие означава, че веригата не е завършена със сертификатите, предадени в обмена; отказ на идентичност означава, че веригата е валидна, но името не съвпада; отказ на алгоритъм означава, че устройството или профилът не приема типа ключ или подписа.
| What you see | What it points to | First move |
|---|---|---|
| Chain stops after the leaf in the daemon log | intermediate not loaded or not sent | load the intermediate as CA material |
| Chain validates, name differs from the profile | identity mismatch | fix the profile name or the certificate SAN |
| Chain validates, handshake still fails | key or signature not accepted | compare key type against the device |
Решавайте с доказателства, вместо да пробвате поправки поред. Един опит при ниво на журнала 2 върху демона ви казва в кой ред сте и струва по-малко от преиздаване на сертификат, който никога не е бил грешен.
Първо решете: пристигна ли цялата верига?
strongSwan изпраща сертификата, настроен за тази връзка, а междинните сертификати са отделни удостоверения. Те трябва да се заредят като CA сертификати, преди демонът да ги постави в полезния товар, затова схема, в която сървърният сертификат е подписан от междинен, коренът е котвата на доверие, а междинният живее само в директорията за изграждане на CA, дава точно този отказ: само листото по мрежата и верига, която свършва рано на телефона.
Проверете какво държи демонът с swanctl --list-certs при внедряване със swanctl или ipsec listcerts при по-стария стартер. Междинният трябва да се появи като CA сертификат с корена над него. Ако липсва, никаква опция на клиента няма да помогне; ако присъства, преминете към следващия въпрос.
После проверете дали ще бъде изпратен. Справката за swanctl.conf документира send_cert, чиято стойност по подразбиране ifasked изпраща сертификати само когато партньорът е поискал, а always изпраща винаги. Старият еквивалент е leftsendcert=always в ipsec.conf. Тази настройка управлява изпращането, не наличността, така че не компенсира междинен сертификат, който демонът никога не е зареждал.
Ако веригата е къса, заредете междинния там, където демонът търси
Поставете междинния в директорията за CA, а не до листото: /etc/ipsec.d/cacerts за схема с ipsec.conf, /etc/swanctl/x509ca за swanctl или пътя, който пакетът ви замества. Презаредете конфигурацията и отново изброете сертификатите. Някои версии изпращат и пакет, който съдържа веригата в листовия файл, но директорията за CA е преносимата подредба между версии и пакети.
Проверете и от страната на клиента. Телефонът вижда само онова, което обменът е пренесъл, затова журналът на демона при ниво 2 трябва да показва междинния сред изпратените сертификати. Ако журналът го показва, а телефонът продължава да се проваля, вие сте в друг ред на таблицата и настройването на CA файлове няма да промени резултата.
Ако веригата е пълна, спрете да редактирате сертификати
Отказът на идентичност е несъответствие между името в профила VPN и името в сертификата. Android сравнява идентичността на сървъра, която сте задали, със сертификата, който е валидирал, затова профил, сочещ към адрес, докато сертификатът посочва име на хост, или профил с име на хост, което сертификатът не покрива, се проваля след успешна валидация на веригата. Поправете грешната страна и поддържайте профила и сертификата съгласувани.
Отказът на алгоритъм се появява при валидна верига и съвпадащо име. Версиите на Android се различават по това кои типове ключове и схеми за подпис приемат, а самият тип профил ограничава опциите. Ако шлюзът използва по-стара или необичайна комбинация, сравнете я с поддържаното от устройството, преди да приемете, че сертификатът е повреден. Журналът на демона ще покаже, че ръкостискането напредва повече, отколкото при доверието, което е сигналът, че веригата вече не е проблемът.
Не инсталирайте междинния като потребителски корен на телефона
Инсталирането на липсващия междинен като потребителски сертификат на телефона премахва предупреждението и променя модела на доверие на телефона за всяко приложение, което приема потребителски корени. То също скрива дефект в доставката, който ще удари следващия клиент, и оставя шлюза да изпраща непълна верига към всяко бъдещо устройство. Трайната поправка е на сървъра, веднъж, за всички клиенти.
Дръжте трите решения отделно в записа за промяна: кои сертификати са предадени, коя идентичност е сравнена и кой алгоритъм е договорен. Шлюз, който винаги изпраща пълната си верига, профил, който именува сертификата правилно, и тип ключ, който паркът поддържа, са три малки факта и те са целият този отказ.