Телефон отказывается подключаться и выводит No trusted RSA public key found for vpn.example.net, хотя тот же сертификат шлюза работает с ноутбука в той же сети. Заманчивый шаг — перевыпустить сертификат. Прежде чем это делать, определите, какая из трёх неисправностей у вас, потому что только одна из них касается содержимого сертификата. Сообщение охватывает неполную цепочку, несовпадение идентичности и неподдерживаемый ключ или подпись, и у каждой своё исправление.

Три неисправности за одним сообщением

Android строит цепочку от сертификата шлюза до CA, выбранного в профиле VPN, затем сравнивает имя сервера с профилем. Уведомление сообщает результат, а не этап. Неисправность доверия означает, что цепочку не удалось завершить из сертификатов, переданных в обмене; неисправность идентичности означает, что цепочка проверена, но имя не совпало; неисправность алгоритма означает, что устройство или профиль не принимает тип ключа или подпись.

What you seeWhat it points toFirst move
Chain stops after the leaf in the daemon logintermediate not loaded or not sentload the intermediate as CA material
Chain validates, name differs from the profileidentity mismatchfix the profile name or the certificate SAN
Chain validates, handshake still failskey or signature not acceptedcompare key type against the device

Решайте по доказательствам, а не перебирая исправления по порядку. Одна попытка на уровне журнала 2 против демона скажет, в какой вы строке, и обойдётся дешевле перевыпуска сертификата, который никогда не был неправильным.

Сначала решите: пришла ли вся цепочка?

strongSwan отправляет сертификат, настроенный для этого соединения, а промежуточные сертификаты — отдельные учётные данные. Их нужно загрузить как сертификаты CA, прежде чем демон сможет поместить их в полезную нагрузку, поэтому схема, где сертификат сервера подписан промежуточным, корневой является якорем доверия, а промежуточный лежит только в каталоге сборки CA, даёт именно эту неисправность: на проводе только лист, цепочка рано заканчивается на телефоне.

Проверьте, что хранит демон, с помощью swanctl --list-certs в развёртывании swanctl или ipsec listcerts со старым starter. Промежуточный должен отображаться как сертификат 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 различаются тем, какие типы ключей и схемы подписи они принимают, и сам тип профиля ограничивает варианты. Если шлюз использует старую или необычную комбинацию, сравните её с тем, что поддерживает устройство, прежде чем считать сертификат повреждённым. Журнал демона покажет, что рукопожатие продвигается дальше, чем в случае доверия, и это сигнал, что цепочка больше не проблема.

Не устанавливайте промежуточный как пользовательский корневой на телефоне

Установка недостающего промежуточного как пользовательского сертификата на телефоне убирает предупреждение и меняет модель доверия телефона для каждого приложения, принимающего установленные пользователем корневые сертификаты. Это также скрывает ошибку доставки, которая ударит по следующему клиенту, и оставляет шлюз отправляющим неполную цепочку каждому будущему устройству. Надёжное исправление — на сервере, один раз, для всех клиентов.

Держите три решения отдельно в записи об изменениях: какие сертификаты были переданы, какая идентичность сравнивалась и какой алгоритм согласован. Шлюз, всегда отправляющий полную цепочку, профиль, правильно называющий сертификат, и тип ключа, поддерживаемый парком, — это три маленьких факта, и они составляют всю эту неисправность.

Похожие статьи