openvpn & subjectAltName
Apr. 17th, 2017 03:46 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Задумался над идеей назначать клиентам OpenVPN ip-адреса по значению поля subjectAltName в их сертификатах.
RFC 5280 предусматривает тип поля IP в SubjectAltName, и OpenSSL его вполне поддерживает.
Идея хороша тем, что при подключении нового клиента не нужно вообще ничего делать на сервере. Удостоверяющий центр, выписывая клиенту сертификат (что все равно надо сделать) выделяет ему IP и DNS-имя и прописывает иъ в этот сертификат. А задача сервера - просто согласиться с тем что подписано удостоверяющим центром.
Правда, похоже просто так не получится. Что-то я не вижу там, чтобы client-connect скрипто получил доступ ко всему сертификату или хотя бы к subjectAltName.
Upd Благодаря
dzz родилось более простое решение:
Сейчас у меня в скрипте client-connect соответствие CN сертификата клиента и выданного ему IP записывается в динамическую зону DNS. Чтобы на того клиента логиниться по имени.
Так вот - сначала надо в DNS посмотреть, и если там это CN есть, то сказать openvpn-у "этому дай вот этот адрес". А вот уж если адреса такого в DNS нет - назначать первый свободный.
Это, конечно, не гарантирует от того что адрес будет переисиользован пока клиент будет в оффлайне. но все же.
RFC 5280 предусматривает тип поля IP в SubjectAltName, и OpenSSL его вполне поддерживает.
Идея хороша тем, что при подключении нового клиента не нужно вообще ничего делать на сервере. Удостоверяющий центр, выписывая клиенту сертификат (что все равно надо сделать) выделяет ему IP и DNS-имя и прописывает иъ в этот сертификат. А задача сервера - просто согласиться с тем что подписано удостоверяющим центром.
Правда, похоже просто так не получится. Что-то я не вижу там, чтобы client-connect скрипто получил доступ ко всему сертификату или хотя бы к subjectAltName.
Upd Благодаря
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сейчас у меня в скрипте client-connect соответствие CN сертификата клиента и выданного ему IP записывается в динамическую зону DNS. Чтобы на того клиента логиниться по имени.
Так вот - сначала надо в DNS посмотреть, и если там это CN есть, то сказать openvpn-у "этому дай вот этот адрес". А вот уж если адреса такого в DNS нет - назначать первый свободный.
Это, конечно, не гарантирует от того что адрес будет переисиользован пока клиент будет в оффлайне. но все же.
no subject
Date: 2017-04-17 06:38 pm (UTC)Ssh умеет сертификаты. Если сделать свой ssh ca, то можно подписывать серверные ключи, а клиентам указать этой подписи верить.
Тогда ssh не ругается при смене IP адреса.
no subject
Date: 2017-04-17 06:53 pm (UTC)А вообще проблему использования сертификатов SSH у меня в журнале разбирали
три года назад.
Устраивающую меня систему отзыва (вернее систему распространения файла RevokedKeys) так тогда и не придумали.
Опять же, не всякий ssh-клиент и не всякий ssh-вервер умеет сертификаты. на телефоне у меня, например, какой-то довольно древний dropbear.
А openvpn свои сертификаты умеет одинаково, начиная с самых древних версий.