openfortivpn es un cliente de software libre para conexiones VPN+SSL y recibe su nombre porque es compatible con las VPN del fabricante Fortinet.
En esta entrada vamos a explicar de forma breve los pasos para configurar openfortivpn en una situación en la que autenticación incluya nombre de usuario y contraseña y además certificado de usuario de la FNMT.
Extraer los certificados del fichero p12
Normalmente el certificado de usuario de la FNMT lo guardamos en un fichero de extensión .p12 al haberlo exportado desde Firefox, este fichero con extensión .p12 no es más que un fichero que incluye el certificado del usuario en propiamente en formato x509, la correspondiente clave, el certificado de la autoridad certificadora y algunos metadatos más.
Podemos extraer esos ficheros con la siguiente instrucción (nos pedirá la contraseña con la que hayamos protegido el certificado al exportarlo):
$ openssl pkcs12 -info -in fichero.p12
Enter Import Password:
A continuación nos pedirá la contraseña de protección del certificado y nos mostrará la clave, el certificado del usuario, el certificado de FNMT usuarios y por último el ceriticado de la AC FNMT:
MAC: sha1, Iteration 102400
MAC length: 20, salt length: 20
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 51200
Bag Attributes
localKeyID: 90 ... C0
friendlyName: ...
Key Attributes:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MII...==
-----END ENCRYPTED PRIVATE KEY-----
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 51200
Certificate bag
Bag Attributes
localKeyID: 90 ... C0
friendlyName: ...
subject=C = ES, serialNumber = IDCES-.., GN = ALBERTO, SN = ...
issuer=C = ES, O = FNMT-RCM, OU = Ceres, CN = AC FNMT Usuarios
-----BEGIN CERTIFICATE-----
MII...=
-----END CERTIFICATE-----
Certificate bag
Bag Attributes:
subject=C = ES, O = FNMT-RCM, OU = Ceres, CN = AC FNMT Usuarios
issuer=C = ES, O = FNMT-RCM, OU = AC RAIZ FNMT-RCM
-----BEGIN CERTIFICATE-----
MII...R
-----END CERTIFICATE-----
Certificate bag
Bag Attributes:
subject=C = ES, O = FNMT-RCM, OU = AC RAIZ FNMT-RCM
issuer=C = ES, O = FNMT-RCM, OU = AC RAIZ FNMT-RCM
----BEGIN CERTIFICATE-----
MII...=
-----END CERTIFICATE-----
Podemos guardar esta salida en diferentes ficheros, por ejemplo usuario.key, usuario.pem, fnmt-usuarios.pem y fnmt.pem. en un directorio adecuadamente protegido (en particular el fichero usuario.key).
sudo mkdir /openfortivpn
sudo chown root:root /openfortivpn
sudo chmod 700 /openfortivpn
sudo mv usuario.key /openfortivpn/
sudo mv *pem /openfortivpn/
sudo chmod 600 /openfortivpn/usuario.key
Configuración de openfortivpn
Instalamos el paquete openfortivpn y abrimos el fichero /etc/openfortivpn/config en que configuramos los siguientes parámetros (damos por obvio que el certificado de la FNMT ya está instalado en el sistema):
host =
port =
username =
set-dns = 1
user-cert = /openfortivpn/usuario.pem
user-key = /openfortivpn/usuario.key
ca-file = /openfortivpn/fnmt-usuarios.pem
Comprobamos la configuración con la instrucción (puesto que no hemos incluído la contraseña como parámetro, la solicita y posteriormente la de descifrado de la clave:
sudo openfortivpn -v
Una vez comprobado el funcionamiento, el uso normal sería:
$ sudo openfortivpn
VPN account password:
Enter PEM pass phrase:
INFO: Connected to gateway.
INFO: Authenticated.
INFO: Remote gateway has allocated a VPN.Enter PEM pass phrase:
Using interface ppp0
Connect: ppp0 <--> /dev/pts/4
INFO: Got addresses: [X.X.X.X], ns [X.X.X.X, X.X.X.X]
INFO: Negotiation complete.
INFO: Negotiation complete.
local IP address X.X.X.X
remote IP address X.X.X.X
INFO: Interface ppp0 is UP.
INFO: Setting new routes…
INFO: Adding VPN nameservers…
INFO: Tunnel is up and running.
Y cuando quisiéramos cortar la conexión, lo haríamos con CTRL-C:
^CINFO: Cancelling threads…
INFO: Cleanup, joining threads…
INFO: Setting ppp0 interface down.
INFO: Restoring routes…
INFO: Removing VPN nameservers…
Hangup (SIGHUP)
Modem hangup
Connect time 11.4 minutes.
Sent 17069 bytes, received 19561 bytes.
Connection terminated.
INFO: pppd: The link was terminated by the modem hanging up.
INFO: Terminated pppd.
INFO: Closed connection to gateway.
Enter PEM pass phrase:
INFO: Logged out.