-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi,

I was in the process of reviewing this patch when I found that protonmail
had changed most of the git '+' to '-', see below.

I have reported a bug to protonmail.

Anyway, I can see a few typos and some other odd errors.
Hopefully, protonmail will have a solution, or maybe someone here knows
what I can do/try ?

Finally, I wrote a simple script which generates self-signed certs, keys
and inlines the fingerprint for use with Openvpn.

https://github.com/TinCanTech/easy-pfp

I hope it is of some use in the future.

Thanks
R




‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Wednesday, 12 May 2021 14:15, Arne Schwabe <a...@rfc2549.org> wrote:

> This is meant to give new users a quickstart for a useable OpenVPN
> setup. Our own documentation is lacking in this regard and many often
> tutorials that can be found online are often questionable in some
> aspects.
>
> Linking the invidiaul RST file on github also give a tutorial
> in a nicely formatted way.
>
> Signed-off-by: Arne Schwabe a...@rfc2549.org
>
> Changes.rst | 4 +
> doc/Makefile.am | 1 +
> doc/man-sections/example-fingerprint.rst | 194 +++++++++++++++++++++++
> 3 files changed, 199 insertions(+)
> create mode 100644 doc/man-sections/example-fingerprint.rst
>
> diff --git a/Changes.rst b/Changes.rst
> index 9185b55f7..f1c739f99 100644
> --- a/Changes.rst
> +++ b/Changes.rst
> @@ -25,6 +25,10 @@ Certificate pinning/verify peer fingerprint
> fingerprint of the peer. The option takes use a number of allowed
> SHA256 certificate fingerprints.
>
> -   See the man page section "Small OpenVPN setup with peer-fingerprint"
> -   for a tutorial how to use this feature. This is also available online
> -   under 
> https://github.com/openvpn/openvpn/blob/master/doc/man-sections/example-fingerprint.rst
> -
>
> TLS mode with self-signed certificates
> When `--peer-fingerprint` is used, the `--ca` and `--capath` option
> become optional. This allows for small OpenVPN setups without setting up
> diff --git a/doc/Makefile.am b/doc/Makefile.am
> index e411f5f9d..e7022c085 100644
> --- a/doc/Makefile.am
> +++ b/doc/Makefile.am
> @@ -25,6 +25,7 @@ dist_noinst_DATA = \
> man-sections/connection-profiles.rst \
> man-sections/encryption-options.rst \
> man-sections/examples.rst \
>
> -   man-sections/examples.rst \
>     man-sections/generic-options.rst \
>     man-sections/inline-files.rst \
>     man-sections/link-options.rst \
>     diff --git a/doc/man-sections/example-fingerprint.rst 
> b/doc/man-sections/example-fingerprint.rst
>     new file mode 100644
>     index 000000000..7d915aedb
>     --- /dev/null
>     +++ b/doc/man-sections/example-fingerprint.rst
>     @@ -0,0 +1,194 @@
>     +Small OpenVPN setup with peer-fingerprint
>     +=========================================
>     +This section consists of instructions how to build a small OpenVPN setup 
> with the
>     +:code:`peer-fingerprint` option. This setup has the advantage to be easy 
> to setup
>     +and should for most small lab and home setups without the need to setup 
> a PKI.
>     +For bigger scale setup setting up a PKI (e.g. via easy-rsa) is still 
> recommended.
>
> -
>
> +Both server and client configuration can of course be further modified to 
> individualise the
> +setup.
> +
> +Server setup
> +------------
> +1. Install openvpn
> +
>
> -   Compile from source-code (see `INSTALL` file) or install via a 
> distribution (apt/yum/ports)
> -   or via installer (Windows).
> -
>
> +2. Generate a self-signed certificate for the server:
>
> -   ::
> -
> -   openssl req -x509 -newkey ec:<(openssl ecparam -name secp384r1) -keyout 
> serverkey.pem -out server.pem -nodes -sha256 -days 3650 -subj '/CN=server'
> -
>
> +3. 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 styx-win.pem -noout server.pem
> -
> -   This output 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
>
>
> -
> -
>
> +3. Write a server configuration (`server.conf`):
> +::
> +
>
> -   The server certificate we created in step 1
>
>     ============================================
>
> -   cert server.pem
>
> -   key serverkey.pem
>
> -
> -   dh none
>
> -   dev tun
>
> -
> -   Listen on IPv6+IPv4 simultaneously
>
>     ===================================
>
> -   proto udp6
>
> -
> -   The ip address the server will distribute
>
>     ==========================================
>
> -   server 192.168.234.0 255.255.255.0
>
> -   server-ipv6 fd00:6f76:706e::/64
>
> -
> -   A tun-mtu of 1400 avoids problems of too big packets after VPN 
> encapsulation
>
>     
> =============================================================================
>
> -   tun-mtu 1400
>
> -
> -   The fingerprints of your clients. After adding/remvoing one here restart 
> the
>
>     
> =============================================================================
>
> -   server
>
>     =======
>
> -   <peer-fingerprint>
>
> -   </peer-fingerprint>
>
> -
> -   Notify clients when you restart the server to reconnect quickly
>
>     ================================================================
>
> -   explicit-exit-notify 1
>
> -
> -   Ping every 60s, restart if no data received for 5 minutes
>
>     ==========================================================
>
> -   keepalive 60 300
>
> -
>
> +4. Add at least one client as described in the client section.
> +
> +5. Start the server.
>
> -   -   On systemd based distributions move `server.pem`, `serverkey.pem` and
> -        `server.conf` to :code:`/etc/openvpn/server` and start it via 
> systemctl
>
>
> -
> -        ::
>
>
> -
> -            sudo mv server.conf server.pem /etc/openvpn
>
>
> -
> -            sudo systemctl start openvpn-server@server
>
>
> -
>
> +Adding a client
> +---------------
> +1. Install OpenVPN
> +
> +2. 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:<(openssl ecparam -name secp384r1) 
> -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 PRIVATE KEY-----
>
>
> -        [base64 content]
>
>
> -        -----END PRIVATE KEY-----
>
>
> -        -----
>
>
> -        -----BEGIN CERTIFICATE-----
>
>
> -        [base 64 content]
>
>
> -        -----END CERTIFICATE-----
>
>
> -
>
> +3. Create a new client configuration file. In this example we will name the 
> file
>
> -   `alice.ovpn`:
>
> -
> -   ::
>
> -
> -        # The name of your server to connect to
>
>
> -        remote yourserver.example.net
>
>
> -        client
>
>
> -        # use a random source port instead the fixed 1194
>
>
> -        nobind
>
>
> -
> -        # Uncomment the following line if you want to route
>
>
> -        # all traffic via the VPN
>
>
> -        # redirect-gateway def1 ipv6
>
>
> -
> -        # To set a a DNS server
>
>
> -        # dhcp-option DNS 192.168.234.1
>
>
> -
> -        <key>
>
>
> -        -----BEGIN PRIVATE KEY-----
>
>
> -        [Insert here the key created in step 2]
>
>
> -        -----END PRIVATE KEY-----
>
>
> -        </key>
>
>
> -        <cert>
>
>
> -        -----BEGIN CERTIFICATE-----
>
>
> -        [Insert here the certificate created in step 2]
>
>
> -        -----END CERTIFICATE-----
>
>
> -        </cert>
>
>
> -
> -        # This the fingerprint of the server that we trust. We generated 
> this fingerprint
>
>
> -        # in step 2 of the server setup
>
>
> -        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
>
>
> -
> -        # The tun-mtu of the client should match the server MTU
>
>
> -        tun-mtu 1400
>
>
> -        dev tun
>
>
> -
> -
>
> +4. 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 
> ./focal-server-locked.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
>
>
> -
>
> +5. 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-fingperint>
>
>
> -
>
> +6. (optional) if the client is an older client that does not support the
>
> -   :code:`peer-fingerprint` (OpenVPN 2.5 and older, OpenVPN Connect 3.3
>
> -   and older), the config can be modified to still work with those.
>
> -
> -   Remove the line starting with :code:`peer-fingerprint` line. Then
>
> -   add a new :code:`<ca>` section at the end of the configuration file
>
> -   with the contents of the :code:`server.pem` created in step 2 of the
>
> -   server setup. The end of `alice.ovpn` file should like:
>
> -
> -   ::
>
> -
> -        [...]  # Beginning of the file skipped
>
>
> -        </cert>
>
>
> -
> -        # The tun-mtu of the client should match the server MTU
>
>
> -        tun-mtu 1400
>
>
> -        dev tun
>
>
> -
> -        <ca>
>
>
> -        [contents of the server.pem]
>
>
> -        </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 its find.
>
> -
>
> +7. Import the file into the OpenVPN client or just use the
>
> -   :code:`openvpn alice.ovpn` to start the VPN.
>     --
>     2.31.1
>
>
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel


-----BEGIN PGP SIGNATURE-----
Version: ProtonMail

wsBzBAEBCAAGBQJgnZQBACEJEE+XnPZrkLidFiEECbw9RGejjXJ5xVVVT5ec
9muQuJ28dwgAuy7fuhyoasafHKdlfo1PENgbpA8jS+oX0+FAW0CmbZV/4cvn
7hA46fBg2ys7y1xjTLgWGDJXQx6lqSH3RJSuaCMQ4Lfu5uFQK/8FjB9nz1zu
Pe4M0mTRbenC1RdHTipH2u6wi4S3L7vV35mcCmhLmXiXNcAstJ/Ta5PfLP5u
55voFJNxicyVgCPHzTgMdY3hZWC5/s3/j5TNiuJOsS1Tge+31+7X6YfyFrJR
r2TtTD9TKZ5xuSpDZQl9iQAtzcGiaUYpYgDo/iVlkLEW8F4Uosqe698BmcI4
JuS++8adaxKJvDkbiwnqJDsK06SCHER9TIZLP51VKhRq0noiEg/laA==
=G2yu
-----END PGP SIGNATURE-----

Attachment: publickey - tincantech@protonmail.com - 0x09BC3D44.asc
Description: application/pgp-keys

Attachment: publickey - tincantech@protonmail.com - 0x09BC3D44.asc.sig
Description: PGP signature

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

Reply via email to