Я установил 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.