Назад | Перейти на главную страницу

openssl verify error 7 на 1 глубине поиска: ошибка подписи сертификата

Я установил OpenVPN сервер на CentOS. У меня два клиента - первый под CentOS (все работает) и пытаюсь подключиться Windows клиент сейчас.

Я создал сертификаты клиента с помощью build-key утилита.

Если проверять на стороне сервера - вроде все в порядке:

# openssl verify -CAfile /etc/openvpn/clients/setevoy/ca.crt /etc/openvpn/clients/setevoy/setevoy.crt
/etc/openvpn/clients/setevoy/setevoy.crt: OK

Но - когда я проверяю те же сертификаты в Windows - получена ошибка:

$ openssl verify -CAfile ca.crt setevoy.crt
setevoy.crt: /C=UA/ST=CA/L=Kiev/O=Fort-Funston/OU=MyOrganizationalUnit/CN=venti.setevoy.org.ua/name=openvpn_root/emailAddress=root@setevoy.org.ua
error 7 at 1 depth lookup:certificate signature failure

Файлы кажутся идентичными на сервере (откуда я их скопировал) и на Windows клиент (где они размещены в c/Program Files (x86)/OpenVPN/config:

# md5sum /etc/openvpn/clients/setevoy/ca.crt
53984cf44daffb708cdb937fa3d30438  /etc/openvpn/clients/setevoy/ca.crt

$ md5sum ca.crt
53984cf44daffb708cdb937fa3d30438 *ca.crt

# md5sum /etc/openvpn/clients/setevoy/setevoy.crt
c818d312e58db514a9a2afae4c687241  /etc/openvpn/clients/setevoy/setevoy.crt

$ md5sum setevoy.crt
c818d312e58db514a9a2afae4c687241 *setevoy.crt

Я полагаю, что-то не так с Windows OpenSSL механизм ... Или что-то подобное:

$ head setevoy.crt | grep Signature
    Signature Algorithm: sha256WithRSAEncryption

Затем, когда я пытаюсь начать OpenVNP GUI - получена ошибка:

Среда 17 декабря, 11:44:25 2014 TLS_ERROR: ошибка чтения BIO tls_read_plaintext: ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: не удалось проверить сертификат среда 17 декабря 11:44:25 2014 Ошибка TLS: объект TLS -> ошибка чтения входящего открытого текста среда декабря 17 11:44:25 2014 Ошибка TLS: сбой подтверждения TLS

UPD

На сервере:

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

и дальше Windows клиент:

$ openssl.exe version
OpenSSL 0.9.7l 28 Sep 2006

UPD 2

Я улучшил OpenSSL для OpenVPN GUI, теперь это 1.0.1, и verify работает:

$ ../bin/openssl.exe version
OpenSSL 1.0.1j 15 Oct 2014

$ ../bin/openssl.exe verify -CAfile ca.crt setevoy.crt
setevoy.crt: OK

Но - я все еще не могу подключиться, с той же ошибкой в ​​журнале.

Я также установил новые CentOS сервер, только для тестирования, и OpenVPN клиент есть - все работает. Проблема с Windows только клиент.

Проблема была вызвана Windows OpenSSL, который не может работать с sha256 алгоритм.

Решение, которое я нашел - отредактируйте файл конфигурации /etc/openvpn/easy-rsa/openssl-1.0.0.cnf(или другое, в зависимости от OpenSSL версия на вашем сервере) и установите:

default_md      = md5

вместо того

default_md      = sha256

Затем заново сгенерируйте все сертификаты и ключи вашего сервера и клиента (включая ключ Хоффмана).

После этого - OpenVPN GUI почти работает ...

OpenSSL 0.9.7 УЖЕ устарел и не поддерживает SHA256, поэтому не может проверить сертификат вашего сервера. Вы должны либо обновить клиентский OpenSSL как минимум до версии 0.9.8 (которая несовместима с двоичным кодом, поэтому, вероятно, потребуется перекомпиляция или получение другой компиляции OpenVPN), либо перейти на сертификат сервера, подписанный с помощью SHA1-RSA.

«SHA1 плохой»: Браузеры и центры сертификации в общедоступной сети, которые чаще всего используют SSL / TLS, принудительно отказываются от сертификатов, подписанных SHA1, поскольку ожидается, что они скоро станут уязвимыми для атак коллизий. Но VPN - это (обычно) управляемая ситуация, когда вы запускаете центр сертификации, а количество клиентов невелико, и вы знаете их заранее; тогда вам не нужно беспокоиться об атаке коллизии, и SHA1 достаточно безопасен - до тех пор, пока вы не подпадаете под действие каких-либо правил или политик, которые просто запрещают SHA1 быть в безопасности, и вы не можете получить отказ.

Как? Я не знаю, где OpenVPN / easy-rsa устанавливает параметры, которые OpenSSL использует для подписания сертификатов (это может быть в файле CONF или в командной строке, и в любом случае можно использовать envvar); отмеченное сообщество, чтобы любой мог легко помочь. Если никто этого не сделает, и вы укажете конкретную версию или загрузите, я могу посмотреть.

PS - может помочь, если вы помечаете именно openvpn вместо vpn.