PKI
https://linuxize.com/post/how-to-set-up-an-openvpn-server-on-centos-7/
Public Key Infraestrucure
previa
orientado a la instalación de un openvpn
creación de los siguientes elementos:
- CA1)
- SERVER certificate + key
- CLIENT certificate + key
usando la herramienta easy-rsa
CA
se recomienda crear todos estos ficheros en un servidor standalone / offline de la insfraestructura que se monte
- editar fichero vars (vars.example) para adecuar los valores (y hacer
source vars
) ./easyrsa init-pki
./easyrsa build-ca
(opcionalmente, nopass)- genera los ficheros ca.crt y ca.key
- con estos ficheros podremos firmar los requests de certificados para servidor y cliente
Deffie-Hellman
usado para el intercambio de llaves y firma HMAC, añadiendo una capara se seguridad adicional
./easyrsa gen-dh
- el archivo dh.pem generado se copia en /etc/openvpn/
- generar HMAC:
openvpn –genkey –secret ta.key
- el archivo ta.key generado se copia en /etc/openvpn/
servidor
./easyrsa gen-req server1 nopass
- server1 es el nombre que le asignamos
- nopass para que no nos solicite la contraseña al arrancar (openvpn server)
- genera server1.key (copiar en /etc/openvpn/) y server1.req
- importar (en caso que la PKI la tengamos en otra máquina) la requests del servidor:
./easyrsa import-req server1.req server1
- server1.req es el fichero creado
- server1 nombre del servidor
- este comando copia el fichero server1.req en pki/reqs
- firmar la request:
./easyrsa sign-req server server1
- el primer argumento puede ser server o client
- el segundo argumento es el short name de la entidad servidor
- genera un archivo server1.crt
configuración servidor
- copiar el fichero de configuración de ejemplo desde /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf
- ajustar los valores de las llaves:
- ca
- cert
- key
- dh
- tls-auth
- ajustar valores de redirección, si procede
- push «redirect-gateway»
- push «dhcp-option»
- ajustar usuario y grupo (por nobody:nogroup o uno a medida)
- user nobody
- user nogroup
- ajustar seguridad:
- auth SHA256
- algo parecido a esto:
port 1194 proto udp dev tun ca ca.crt cert server1.crt key server1.key # This file should be kept secret dh dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC user nobody group nobody persist-key persist-tun status openvpn-status.log verb 3 explicit-exit-notify 1 auth SHA256
cliente
./easyrsa gen-req client1 nopass
- client1 es el nombre del fichero que generamos y el Common Name que nos sugiere
- nopass para que no nos solicite la contraseña al accedr
- genera ./pki/private/client1.key y ./pki/reqs/server1.req
- importar (en caso que la PKI la tengamos en otra máquina) la requests del cliente:
./easyrsa import-req client1.req client1
- client1.req es el fichero creado
- client1 nombre del servidor
- este comando copia el fichero client1.req en pki/reqs
- firmar la request:
./easyrsa sign-req client client1
- el primer argumento puede ser server o client
- el segundo argumento es el short name de la entidad cliente
- genera un archivo client1.crt
AWS ACM
Para poder importar esta PKI y usarla en AWS (para crear un VPNEndPoint, por ejemplo), es necesario importar los siguientes archivos:
- ./pki/issued/server1.crt en cuerpo del certificado
- ./pki/private/server1.key en la clave privada del certificado
- ./pki/ca.crt en la cadena de certificados
1)
Certificate Authority