====OpenVPN==== OpenVPN server with client certificate and password authentication. TBC ===Install=== sudo -s cd /root apt update apt upgrade apt install openvpn easy-rsa rehash /etc/init.d/openvpn stop update-rc.d openvpn disable ===Certificate Store=== ==Init== Create the certificate folder and intialise it. make-cadir easy-rsa cd easy-rsa ./easyrsa init-pki hard-reset init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /root/ovpn/pki Edit the `vars' file changing organisational data. Eg. set_var EASYRSA_REQ_COUNTRY "GB" set_var EASYRSA_REQ_PROVINCE "England" set_var EASYRSA_REQ_CITY "London" set_var EASYRSA_REQ_ORG "OVPN" set_var EASYRSA_REQ_EMAIL "root@example.com" set_var EASYRSA_REQ_OU "CA" The CA expiry date defaults to 10 years (3650 days) and certificates to 825 days. Change this to your preferred timespan. set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CERT_EXPIRE 3650 /************************************************************************** Change the default Common Name (CN) (doesn't work) EASYRSA_REQ_CN="OpenVPN" **************************************************************************/ ==Create Certificate Authority== Create a CA for managing certificates. Choose a secret passphrase. ./easyrsa --vars=./vars build-ca Enter New CA Key Passphrase: ... Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /root/ovpn/pki/ca.crt ==Create Server Certificate== The server certificate will be utilised by the OpenVPN daemon, sign it with the CA passphrase. ./easyrsa --vars=./vars build-server-full server nopass Enter pass phrase for /root/ovpn/pki/private/ca.key: ... ==Create DH Certificate== ./easyrsa --vars=./vars gen-dh ==Create TA Certificate== Shared secret key. openvpn --genkey secret pki/ta.key Example configuration on server. tls-server tls-auth ta.key 0 On the client, the shared secret may be inline in the connection profile. ==Create Client Certificate== ./easyrsa --vars=./vars build-client-full vpn nopass ==Bundle Client Certificate== openssl pkcs12 -export -inkey vpn.key -in vpn.crt -certfile ca.crt -out vpn.p12 -passout pass: ==Unbundle Client Certificate== openssl pkcs12 -in vpn.p12 -nocerts -out vpn.key -nodes -passin pass: openssl pkcs12 -in vpn.p12 -nokeys -clcerts -out vpn.crt -passin pass: openssl pkcs12 -in vpn.p12 -nokeys -cacerts -out ca.crt -passin pass: