Я использую OpenVPN на аппаратном маршрутизаторе с OpenWRT. Каждый раз, когда клиент подключается, я получаю в журналах следующую ошибку:
VERIFY WARNING: depth=0, unable to get certificate CRL
У меня есть двухуровневый центр сертификации с обоими уровнями, публикующими списки отзыва сертификатов, и объединенный список отзыва сертификатов, доступный на маршрутизаторе, и OpenVPN использует его.
Я не понимаю, почему OpenVPN пытается получить CRL на глубине 0, который является сертификатом клиента. Он не жалуется на глубины 1 и 2, что указывает на то, что мой файл CRL в порядке ...
Похоже, что более поздние версии OpenVPN не понимают несколько кодированных PEM CRL в одном файле.
Если вы отредактируете файл CRL так, чтобы он содержал только CRL центра сертификации, выдающего сертификат клиента, вы увидите, что не получите ошибок для depth=0
и вместо этого получит сообщение об ошибке depth=1
. Вы, вероятно, получите те же результаты, если поменяете порядок списков отзыва сертификатов в текущем файле.
Чтобы решить эту проблему в более поздних версиях OpenVPN, вы должны использовать --capath
:
--capath dir
Каталог, содержащий доверенные сертификаты (CA и CRL). Недоступно с mbed TLS.
Поместите все ваши сертификаты CA и списки отзыва сертификатов, сгенерированные вашими центрами сертификации, в каталог, на который указывает --capath
вариант. Не забудьте удалить --ca option
.
Бегать c_rehash <path to certs and CRLs>
для генерации хэша сертификатов и их списков отзыва сертификатов.
Перезапустите OpenVPN, и вы обнаружите, что в ваших журналах нет предупреждений CRL.
Примечание: Вы никогда не должны получать предупреждение CRL для depth=2
(ваш корневой ЦС), поскольку это будет самозаверяющий сертификат, а список отзыва сертификатов для одного из них бессмыслен, потому что он будет подписан сам по себе. Но кажется, что если вы опустите CRL корневого CA, он покажет предупреждение проверки для себя (depth=2
), а также выданный им сертификат (промежуточный ЦС в depth=1
). Он должен показывать только предупреждение для последнего.