# OpenVPN with x509 certificates



RSA key, CSR and DH parameter

# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -out server.csr
# openssl genrsa -out client.key 2048
# openssl req -new -key client.key -out client.csr
# openssl dhparam -out dh2048.pem 2048

CA and signed certificates

# mkdir demoCA
# mkdir demoCA/private
# mkdir demoCA/newcerts
# echo '01' > demoCA/serial
# touch demoCA/index.txt
# openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
# mv cakey.pem demoCA/private/.
# cp cacert.pem demoCA/.
# openssl ca -in server.csr
# openssl ca -in client.csr
# cp demoCA/newcerts/01.pem server.pem
# cp demoCA/newcerts/02.pem client.pem

OpenVPN server configuration

# cat openvpn_server.conf
port 1194
proto udp
dev tun
ca cacert.pem
cert server.pem
key server.key
dh dh2048.pem
server 192.168.123.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20
user nobody
group nogroup
# openvpn openvpn_server.conf

OpenVPN client configuration

# cat openvpn_client.conf
client
port 1194
proto udp
dev tun
ca cacert.pem
cert client.pem
key client.key
remote 1.2.3.4 1194
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20
user nobody
group nogroup
# openvpn openvpn_client.conf

OpenVPN Android client configuration - Import profile

# cat openvpn_client.ovpn
client
port 1194
proto udp
dev tun
<ca>
// grep -A 100 'BEGIN CERTIFICATE' cacert.pem | grep -B 100 'END CERTIFICATE'
</ca>
<cert>
// grep -A 100 'BEGIN CERTIFICATE' client.pem | grep -B 100 'END CERTIFICATE'
</cert>
<key>
// grep -A 100 'BEGIN RSA PRIVATE KEY' client.key | grep -B 100 'END RSA PRIVATE KEY'
</key>
remote 1.2.3.4 1194
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20
user nobody
group nogroup
# Import openvpn_client.ovpn

3 comments:

UnColegui said...

Un poquito de explicación no mata... Créeme, a veces yo explico, uno poco, las cosas y aún no me he muerto ni nada! XD

Mira que le dimos caña, pues ya, hoy, no me acordaba. ;)

ElMismoColegui said...

Men! Después de un porrón de tiempo desde que publicastes, he encotrado algunos fallos! XD

-> Parte: CA and signed certificates.
Solo se firma el certificado del server
"openssl ca -in server.csr"
falta el del cliente (openssl ca -in client.csr).

-> Parte OpenVPN server configuration
Recuerda que se ha metido el cacert.pem en demoCA, por lo que la línea no es "ca cacert.pem" si no "ca ./demoCA/cacert.pem".

El comando para ejecutar la VPN es openvpn no openssl, por lo que hay que sustituir "openssl openvpn_server.cnf" por "openvpn openvpn_server.cnf"

-> Parte OpenVPN client configuration
Idem que la parte anterior...


Un abrazo y nos vemos muy pronto! ;)

K.

t0n1 said...

Gracias!
Añadida la firma del csr del cliente y corregido el comando (openssl -> openvpn).
Para mí los ficheros .cnf son correctos porque las pruebas se hicieron con todos los ficheros (.cnf, .pem, .key, .txt, .log) en el mismo directorio.