On 10/05/2019 14:11, Arne Schwabe wrote:
> This is the v3 of the patch series. I choose to resend all of the patches
> so they all cleanly apply. Since the patches depend on the changes suggested
> to --genkey, I made them part of the patch series. The other patches have
> been updated to incoperate the feedback.
>
> Arne Schwabe (7):
> Write key to stdout if filename is not given
> Implement --genkey type keyfile syntax and migrate tls-crypt-v2
> Add pem_read_key_file variant that allows a random key
> Rewrite auth-token-gen to be based on HMAC based tokens
> Implement a permanent session id in auth-token
> Sent indication that a session is expired to clients
> Implement unit tests for auth-gen-token
>
> doc/openvpn.8 | 141 ++++++--
> src/openvpn/Makefile.am | 1 +
> src/openvpn/auth_token.c | 387 +++++++++++++++++++++
> src/openvpn/auth_token.h | 129 +++++++
> src/openvpn/crypto.c | 35 +-
> src/openvpn/crypto.h | 15 +
> src/openvpn/init.c | 90 +++--
> src/openvpn/manage.c | 4 +-
> src/openvpn/openvpn.h | 1 +
> src/openvpn/options.c | 103 ++++--
> src/openvpn/options.h | 19 +-
> src/openvpn/push.c | 70 +++-
> src/openvpn/push.h | 8 +
> src/openvpn/ssl.c | 13 +-
> src/openvpn/ssl_common.h | 56 +--
> src/openvpn/ssl_verify.c | 213 ++++++------
> src/openvpn/ssl_verify.h | 15 +-
> src/openvpn/tls_crypt.c | 13 +-
> tests/unit_tests/openvpn/Makefile.am | 18 +-
> tests/unit_tests/openvpn/test_auth_token.c | 375 ++++++++++++++++++++
> 20 files changed, 1457 insertions(+), 249 deletions(-)
> create mode 100644 src/openvpn/auth_token.c
> create mode 100644 src/openvpn/auth_token.h
> create mode 100644 tests/unit_tests/openvpn/test_auth_token.c
I've focused on functional testing in the beginning. And here's a summary so
far of my feedback:
* The --help screen is inaccurate in regards to --auth-gen-token and --genkey
entries.
* Using --genkey with --secret now sends the key to stdout instead of the
given --secret file. I don't recall if we discussed this and if this was
considered expected.
* When starting a server with --auth-gen-token-secret, there is no (afaict)
indications in the log file such a file is used
* In the log file when the server sends PUSH_REPLY there's a formatting issue,
where you will find: [...], auth-tokenSESS_ID,[....]. This happens on both
server and client.
* The configuration below ends up going into username/password auth loop on
each renegotiation after the auth-token has expired:
- server
# ./src/openvpn/openvpn --dev tun --ca sample/sample-keys/ca.crt \
--cert sample/sample-keys/server.crt \
--key sample/sample-keys/server.key \
--dh sample/sample-keys/dh2048.pem \
--server 10.8.0.0 255.255.255.0 --verb 4 \
--script-security 3 \
--auth-user-pass-verify ./auth.sh via-env \
--auth-gen-token 60 external-auth \
--auth-gen-token-secret auth-token.key \
--reneg-sec 30 --tran-window 15 \
--hand-window 20 --keepalive 10 20
- client
# ./src/openvpn/openvpn --dev tun --client --auth-user-pass \
--remote $REMOTE_IP \
--ca sample/sample-keys/ca.crt \
--key sample/sample-keys/client.key \
--cert sample/sample-keys/client.crt \
--verb 4 --explicit-exit-notify \
--auth-nocache
- auth.sh script:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/bash
echo "----------------------------------------------------"
echo "session_state: $session_state"
echo "username: $username"
echo "password: $password"
echo "session_id: $session_id"
ret=1
if [ "$session_state" = "Authenticated" ]; then
ret=0;
elif [ "$username" = "testuser" ]; then
if [ "$password" = "foobaraaa" ]; then
ret=0
fi
fi
if [ $ret -eq 0 ]; then
echo "Authentication successful"
else
echo "Authentication failed"
fi
echo "----------------------------------------------------"
exit $ret
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
What happens:
- Server starts
- Client starts and connects, auth with username/password (state: Initial)
- 30 seconds, reneg happens
- Client re-auth with token (state: Authenticated)
- 30 seconds, reneg happens
- Client re-auth with token (state: Expired)
- 30 seconds, reneg happens
- Client re-auth with token (state: Expired)
- Client restarts with username/password auth (state: Initial)
- 30 seconds, reneg happens
- Client restarts with username/password auth (state: Initial)
- 30 seconds, reneg happens
- Client restarts with username/password auth (state: Initial)
....
I'll run more tests and review patches too, but here's something to dive into
at least.
--
kind regards,
David Sommerseth
OpenVPN Inc
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel