Hi,

On 22/03/2021 10:14, Arne Schwabe wrote:
> From: "Jason A. Donenfeld" <ja...@zx2c4.com>
> 
> OpenVPN traditionally works around CAs. However many TLS-based protocols also
> allow an alternative simpler mode in which rather than verify certificates
> against CAs, the certificate itself is hashed and compared against a
> pre-known set of acceptable hashes. This is usually referred to as
> "fingerprint verification". It's popular across SMTP servers, IRC servers,
> XMPP servers, and even in the context of HTTP with pinning.
> 
>    * Allow not specifying the --ca parameter, to specify that
>      certificates should not be checked against a CA.
> 
> I've included some instructions on how to use all of this.
> 
> Server side:
> ============
> 
> Make self-signed cert:
> $ openssl req -x509 -newkey ec:<(openssl ecparam -name secp384r1) -keyout 
> serverkey.pem -out servercert.pem -nodes -sha256 -days 3650 -subj '/CN=server'
> 
> Record our fingerprint in an environment variable for the client to use later:
> $ server_fingerprint="$(openssl x509 -in servercert.pem -noout -sha256 
> -fingerprint | sed 's/.*=//;s/\(.*\)/\1/')"
> 
> Client side:
> ============
> Make self-signed cert:
> $ openssl req -x509 -newkey ec:<(openssl ecparam -name secp384r1) -keyout 
> clientkey.pem -out clientcert.pem -nodes -sha256 -days 3650 -subj '/CN=client'
> 
> Record our fingerprint in an environment variable for the server to use later:
> $ client_fingerprint="$(openssl x509 -in clientcert.pem -noout -sha256 
> -fingerprint | sed 's/.*=//;s/\(.*\)/\1/')"
> 
> Start server/client
> ===================
> 
> Start openvpn with peer fingerprint verification:
> 
> $ sudo openvpn --server 10.66.0.0 255.255.255.0 --dev tun --dh none --cert 
> servercert.pem --key serverkey.pem --peer-fingerprint "$client_fingerprint"
> 
> $ sudo openvpn --client --remote 127.0.0.1 --dev tun --cert clientcert.pem 
> --key clientkey.pem --peer-fingerprint "$server_fingerprint" --nobind
> 
> Signed-off-by: Jason A. Donenfeld <ja...@zx2c4.com>
> 
> Patch V2: Changes in V2 (by Arne Schwabe):
>           - Only check peer certificates, not all cert levels, if you need
>             multiple levels of certificate you should use a real CA
>           - Use peer-fingerprint instead tls-verify on server side in example.
>           - rename variable ca_file_none to verify_hash_no_ca
>           - do no require --ca none but allow --ca simply
>             to be absent when --peer-fingprint is present
>           - adjust warnings/errors messages to also point to
>             peer-fingerprint as valid verification method.
>           - Fix mbed TLS version of not requiring CA
>             not working
> 
> Patch v3: Fix minor style. Remove unessary check of verify_hash_no_ca in 
> ssl.c.
> 
> Signed-off-by: Arne Schwabe <a...@rfc2549.org>

Acked-by: Antonio Quartulli <anto...@openvpn.net>

It looks good and works as expected!

-- 
Antonio Quartulli


_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to