doc/man-sections/example-fingerprint.rst
This section consists of instructions how to build a small OpenVPN setup with the
:code:peer-fingerprint option. This has the advantage of being easy to setup
and should be suitable for most small lab and home setups without the need for a PKI.
For bigger scale setup setting up a PKI (e.g. via easy-rsa) is still recommended.
Both server and client configuration can be further modified to customise the setup.
Install openvpn
Compile from source-code (see INSTALL file) or install via a distribution (apt/yum/ports)
or via installer (Windows).
Generate a self-signed certificate for the server::
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -keyout server.key -out server.crt -nodes -sha256 -days 3650 -subj '/CN=server'
Generate SHA256 fingerprint of the server certificate
Use the OpenSSL command line utility to view the fingerprint of just created certificate::
openssl x509 -fingerprint -sha256 -in server.crt -noout
This outputs something similar to::
SHA256 Fingerprint=00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff
Write a server configuration (server.conf)::
cert server.crt key server.key
dh none dev tun
proto udp6
server 10.8.0.0 255.255.255.0 server-ipv6 fd00:6f76:706e::/64
tun-mtu 1400
explicit-exit-notify 1
keepalive 60 300
Add at least one client as described in the client section.
Start the server.
On systemd based distributions move server.crt, server.key and
server.conf to /etc/openvpn/server and start it via systemctl::
sudo mv server.conf server.key server.crt /etc/openvpn/server
sudo systemctl start openvpn-server@server
Install OpenVPN
Generate a self-signed certificate for the client. In this example the client name is alice. Each client should have a unique name. Replace alice with a different name for each client. ::
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -keyout - -nodes -sha256 -days 3650 -subj '/CN=alice'
This generate a certificate and a key for the client. The output of the command will look something like this::
-----BEGIN CERTIFICATE----- [base 64 content] -----END CERTIFICATE-----
Create a new client configuration file. In this example we will name the file
alice.ovpn::
remote yourserver.example.net client
nobind
peer-fingerprint 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff
tun-mtu 1400 dev tun
Generate the fingerprint of the client certificate. For that we will let OpenSSL read the client configuration file as the x509 command will ignore anything that is not between the begin and end markers of the certificate::
openssl x509 -fingerprint -sha256 -noout -in alice.ovpn
This will again output something like::
SHA256 Fingerprint=ff:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00:ff:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00
Edit the server.conf configuration file and add this new client
fingerprint as additional line between :code:<peer-fingerprint>
and :code:</peer-fingerprint>
After adding two clients the part of configuration would look like this::
<peer-fingerprint> ff:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00:ff:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00 99:88:77:66:55:44:33:22:11:00:ff:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00:88:77:66:55:44:33 </peer-fingerprint>(optional) if the client is an older client that does not support the
:code:peer-fingerprint (e.g. OpenVPN 2.5 and older, OpenVPN Connect 3.3
and older), the client config alice.ovpn can be modified to still work with
these clients.
Remove the line starting with :code:peer-fingerprint. Then
add a new :code:<ca> section at the end of the configuration file
with the contents of the server.crt created in step 2 of the
server setup. The end of alice.ovpn file should look like::
[...] # Beginning of the file skipped </cert>
tun-mtu 1400 dev tun
<ca> [contents of the server.crt] </ca>Note that we put the :code:<ca> section after the :code:<cert> section
to make the fingerprint generation from step 4 still work since it will
only use the first certificate it finds.
Import the file into the OpenVPN client or just use the
:code:openvpn alice.ovpn to start the VPN.