воскресенье, 11 августа 2013 г.

Endian Firewall Community. OpenVPN с использованием X.509 certificate

В одной из "статей" на нашем форуме Перенос OpenVPN сервера на Endian Firewall Community, "Твики" настройки EFW 2.5.1 мы писали о том как перенести существующий OpenVPN сервер на EFW, использовав при этом tls-auth. Сегодня я расскажу о том, как правильно сконфигурировать OpenVPN сервер на Endian'е с поддержкой аутентификации по X.509 certificate, а также как избежать распространенной ошибки: TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned, т.е.:

Предположим что мы создали все ключи и сертификаты, также экспортировали серверный ключ и сертификат (server.key, server.crt), а также ca.crt в PKCS12 и получили server.p12, который успешно загрузили в наш EFW. Под ОС Windows это можно сделать с помощью bat'ника build-key-pkcs12.bat в комплекте Easy RSA Tools. После чего создаем клиентские ключи, конфиги и убеждаемся в том, что клиент не коннектится к EFW из-за пресловутой TLS Error: TLS handshake failed. А всё почему ... в конфигах сервера (посмотреть можно /etc/openvpn/openvpn.conf) стоит опция ns-cert-type client. Т.е. клиентский сертификат должен обязательно в поле Тип сертификата Netscape содержать - "SSL-проверка подлинности клиента (80)". Обратите внимание на картинку:


Как же сгенерировать клиентский сертификат таким образом, чтобы он обеспечивал SLL проверку подлинности клиента? Нет ничего проще. Вносим изменения в наш openssl.cnf, дописывая туда строки:

[ client ]
basicConstraints=CA:FALSE
nsCertType = client
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

После чего, в bat'нике для генерации клиентского серфтификата и ключа build-key.bat при генерации сертификата дописываем ключ -extensions client, т.е. вот так:

openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions client -config %KEY_CONFIG%

И нам остается только создать правильный клиентский конфиг (client.ovpn):

# OpenVPN Config File (c) Decker 
dev tap 
# dev-node "OpenVPN"  
proto udp  
remote mydomain1.org 8888  
route-delay 3  
client  
#tls-client  
ns-cert-type server  
ca .\\ca.crt  
cert .\\user1.crt  
key .\\user1.key  
#tls-auth .\\ta.key 1  
comp-lzo  
tun-mtu 1500  
tun-mtu-extra 32  
mssfix 1450  
ping-restart 60  
ping 10  
# status .\\openvpn-status.log  
# log C:\\OpenVPN\\log\\openvpn.log  
verb 3  

После этого клиент успешно соединится с OpenVPN сервером на EFW:




Комментариев нет:

Отправить комментарий