]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Set tls-version-max to 1.1 if cryptoapicert is used
authorSteffan Karger <steffan@karger.me>
Sun, 28 Dec 2014 10:25:13 +0000 (11:25 +0100)
committerGert Doering <gert@greenie.muc.de>
Sun, 28 Dec 2014 18:33:48 +0000 (19:33 +0100)
OpenVPN's current cryptoapicert implementation does not support TLS 1.2
(and newer).  Fixing this requires a rewrite of our cryptoapi code to use
Microsofts' "Cryptography API: Next Generation", and several hacks to work
around that API.  As long as we don't fix that, make openvpn automatically
cap the TLS version to 1.1 when using cryptoapi (and tell the user we're
doing so).  This enables the user to use cryptoapi + TLS version
negotiation (upto TLS 1.1) without having to change his configuration.

This patch has been tested on Windows 8.1 for both the master and
release/2.3 branches.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1419762313-31233-1-git-send-email-steffan@karger.me>
URL: http://article.gmane.org/gmane.network.openvpn.devel/9361
Signed-off-by: Gert Doering <gert@greenie.muc.de>
(cherry picked from commit 04dcb96cc1f525afee3f830248ecaa22d1b4a4c2)

src/openvpn/options.c

index f6e41a9e470862ca41f8ba1e557dcda00ccae542..dd79da45dfac9fe85154c3c7b065fd71d0f52811 100644 (file)
@@ -2553,6 +2553,24 @@ options_postprocess_mutate (struct options *o)
   else
     options_postprocess_mutate_ce (o, &o->ce);  
 
+#ifdef ENABLE_CRYPTOAPI
+  if (o->cryptoapi_cert)
+    {
+      const int tls_version_max =
+         (o->ssl_flags >> SSLF_TLS_VERSION_MAX_SHIFT) &
+         SSLF_TLS_VERSION_MAX_MASK;
+
+      if (tls_version_max == TLS_VER_UNSPEC || tls_version_max > TLS_VER_1_1)
+       {
+         msg(M_WARN, "Warning: cryptapicert used, setting maximum TLS "
+             "version to 1.1.");
+         o->ssl_flags &= ~(SSLF_TLS_VERSION_MAX_MASK <<
+             SSLF_TLS_VERSION_MAX_SHIFT);
+         o->ssl_flags |= (TLS_VER_1_1 << SSLF_TLS_VERSION_MAX_SHIFT);
+       }
+    }
+#endif /* ENABLE_CRYPTOAPI */
+
 #if P2MP
   /*
    * Save certain parms before modifying options via --pull