Отзыв пользовательских сертификатов OpenVPN
В предыдущих статьях на тему OpenVPN я рассказывал как настроить openVPN сервер и клиентов для него с использованием личных сертификатов пользователей. Остался не раскрытым вопрос, что делать в случае если требуется отказать какому-либо клиенту в доступе по его сертификату. Причины могут разными - закрытый ключ, связанный с сертификатом скомпрометирован или украден, пользователь забыл пароль на ключ, либо просто хотите прекратить доступ данного человека в вашу сеть. Решением этой задачи является создание списка отзыва сертификатов (Certificate Revocation List - CRL), в котором перечисляются отозванные вами клиентские сертификаты и руководствуясь которым сервер будет отклонять запросы.
В качестве примера, отзовём сертификат пользователя client2. Пример будет для Linux/BSD/Unix.
cd /usr/local/etc/openvpn . ./vars ./revoke-full client2
В результате видим примерно следующее:
Using configuration from /usr/local/etc/openvpn/openssl.cnf DEBUG[load_index]: unique_subject = "yes" Revoking Certificate 04. Data Base Updated
или
Using configuration from /usr/local/etc/openvpn/openssl.cnf DEBUG[load_index]: unique_subject = "yes" client2.crt: /C=RU/ST=NN/O=TEST/CN=client2/emailAddress=me@myhost.ru error 23 at 0 depth lookup:certificate revoked
Обратите внимание на "Ошибку 23" в последней строке, указывающую на неудавшуюся попытку проверки отозванного сертификата. Скрипт revoke-full как раз и создает CRL (certificate revocation list) - crl.pem. Этот файл (не является секретным) должен быть скопирован в каталог, видимый OpenVPN сервером, а путь к нему прописан в конфиге server.conf.
crl-verify /usr/local/etc/openvpn/crl.pem
Теперь при подключении, все клиентские сертификаты будут проверяться на наличие в CRL, и если таковое будет найдено, в соединении будет отказано. При использовании crl-verify в OpenVPN, CRL-файл перечитывается по умолчанию каждый час. Таким образом, если в момент добавления сертификата в исключения, клиент уже установил связь, то он будет продолжать работу. Чтобы изменения применились наверняка перезапустите демон OpenVPN сервера.
При отзыве сертификата бывает ещё ошибка такого вида:
error on line 282 of config file '....openvpn/easy-rsa/openssl.cnf'
Решается комментированием следующих строчек в openssl.cnf:
#[ pkcs11_section ] #engine_id = pkcs11 #dynamic_path = /usr/lib/engines/engine_pkcs11.so #MODULE_PATH = $ENV::PKCS11_MODULE_PATH #PIN = $ENV::PKCS11_PIN #init = 0
Напоследок замечу, что возможно сгенерировать новую пару сертификат/ключ с тем же именем, как у отозванного ранее сертификата. Например в случае, когда пользователь забыл свой пароль на предыдущий сертификат, и его отозвали по этой причине.
Комментариев: 2
Познавательно, а то как-то не очень вопрос этот раскрыт на других сайтах. Везде описано только как поднять сервер.
Большое спасибо!
лень было документацию читать, а на всех топиках только как развернуть...
кстати кому надо есть пара полезный команд для создания комплекта для мобильных устройств
# openssl rsa -in USER.key -out ios_USER.key
# openssl pkcs12 -export -in USER.crt -inkey ios_USER.key -certfile ca.crt -name ios_USER -out ios_USER.p12