forked from pool/openvpn
42c7e8bef4
- Update to 2.4.5 * New features + The new option --tls-cert-profile can be used to restrict the set of allowed crypto algorithms in TLS certificates in mbed TLS builds. The default profile is 'legacy' for now, which allows SHA1+, RSA-1024+ and any elliptic curve certificates. The default will be changed to the 'preferred' profile in the future, which requires SHA2+, RSA-2048+ and any curve. + openvpnserv: Add support for multi-instances (to support multiple parallel OpenVPN installations, like EduVPN and regular OpenVPN) + Use P_DATA_V2 for server->client packets too (better packet alignment) + improve management interface documentation + rework registry key handling for OpenVPN service, notably making most registry values optional, falling back to reasonable defaults + accept IPv6 address for pushed "dhcp-option DNS ..." (make OpenVPN 2 option compatible with OpenVPN 3 iOS and Android clients) * Bug fixes + Fix --tls-version-min and --tls-version-max for OpenSSL 1.1+ + Fix lots of compiler warnings (format string, type casts, ...) + reload HTTP proxy credentials when moving to the next connection profile + Fix build with LibreSSL (multiple times) + Remove non-useful warning on pushed tun-ipv6 option. + autoconf: Fix engine checks for openssl 1.1 + lz4: Rebase compat-lz4 against upstream v1.7.5 + lz4: Fix broken builds when pkg-config is not present but system library is + Fix '--bind ipv6only' + Allow learning iroutes with network made up of all 0s - Includes 2.4.4 * Bug fixes + Fix issues when a pushed cipher via the Negotiable Crypto Parameters (NCP) is rejected by the remote side + Ignore --keysize when NCP have resulted in a changed cipher + Configurations using --auth-nocache and the management interface to provide user credentials (like NetworkManager) on client side with servers implementing authentication tokens (for example, using --auth-gen-token) will now behave correctly and not query the user for an, to them, unknown authentication token on renegotiations of the tunnel. + Invalid or corrupt SOCKS port number when changing the proxy via the management interface. + man page should now have proper escaping of hyphen/minus characters and other minor corrections. * User-visible Changes + Linux servers with systemd which use the openvpn-server@.service unit file for server configurations will now utilize the automatic restart feature in systemd. If the OpenVPN server process dies unexpectedly, systemd will ensure the OpenVPN configuration will be restarted automatically. * Deprecated + --no-replay (will be removed in 2.5) + --keysize (will be removed in 2.6) * Security + CVE-2017-12166: Fix bounds check for configurations using --key-method 1. Before this fix, attackers could send a malformed packet to trigger a stack overflow. This is considered to be a low risk issue, as --key-method 2 has been the default since 2.0 (released on 2005-04-17). This option is already deprecated in v2.4 and will be completely removed in v2.5. - Rebase openvpn-fips140-2.3.2.patch - Drop 0002-Fix-bounds-check-in-read_key.patch * upstreamed in c7e259160b28e94e4ea7f0ef767f8134283af255 - Partial cleanup with spec-cleaner OBS-URL: https://build.opensuse.org/request/show/586118 OBS-URL: https://build.opensuse.org/package/show/network:vpn/openvpn?expand=0&rev=133
113 lines
3.8 KiB
Diff
113 lines
3.8 KiB
Diff
From a33c0d811ad976561e5cb5bfc8431c1a286e796b Mon Sep 17 00:00:00 2001
|
|
From: Nirmoy Das <ndas@suse.de>
|
|
Date: Fri, 23 Jun 2017 11:00:08 +0200
|
|
Subject: [PATCH] fips-140
|
|
|
|
Signed-off-by: Nirmoy Das <ndas@suse.de>
|
|
---
|
|
src/openvpn/crypto.c | 2 +-
|
|
src/openvpn/crypto_backend.h | 3 ++-
|
|
src/openvpn/crypto_openssl.c | 6 +++++-
|
|
src/openvpn/ntlm.c | 2 +-
|
|
src/openvpn/options.c | 4 ++++
|
|
src/openvpn/ssl.c | 4 ++--
|
|
6 files changed, 15 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/openvpn/crypto.c b/src/openvpn/crypto.c
|
|
index 5f482d0..ff0f9a7 100644
|
|
--- a/src/openvpn/crypto.c
|
|
+++ b/src/openvpn/crypto.c
|
|
@@ -876,7 +876,7 @@ init_key_ctx(struct key_ctx *ctx, struct key *key,
|
|
if (kt->digest && kt->hmac_length > 0)
|
|
{
|
|
ctx->hmac = hmac_ctx_new();
|
|
- hmac_ctx_init(ctx->hmac, key->hmac, kt->hmac_length, kt->digest);
|
|
+ hmac_ctx_init(ctx->hmac, key->hmac, kt->hmac_length, kt->digest, 0);
|
|
|
|
msg(D_HANDSHAKE,
|
|
"%s: Using %d bit message hash '%s' for HMAC authentication",
|
|
diff --git a/src/openvpn/crypto_backend.h b/src/openvpn/crypto_backend.h
|
|
index b7f519b..2911248 100644
|
|
--- a/src/openvpn/crypto_backend.h
|
|
+++ b/src/openvpn/crypto_backend.h
|
|
@@ -604,10 +604,11 @@ void hmac_ctx_free(hmac_ctx_t *ctx);
|
|
* @param key The key to use for the HMAC
|
|
* @param key_len The key length to use
|
|
* @param kt Static message digest parameters
|
|
+ * @param prf_use Intended use for PRF in TLS protocol
|
|
*
|
|
*/
|
|
void hmac_ctx_init(hmac_ctx_t *ctx, const uint8_t *key, int key_length,
|
|
- const md_kt_t *kt);
|
|
+ const md_kt_t *kt, bool prf_use);
|
|
|
|
/*
|
|
* Free the given HMAC context.
|
|
diff --git a/src/openvpn/crypto_openssl.c b/src/openvpn/crypto_openssl.c
|
|
index a55e65c..79f5530 100644
|
|
--- a/src/openvpn/crypto_openssl.c
|
|
+++ b/src/openvpn/crypto_openssl.c
|
|
@@ -926,11 +926,15 @@
|
|
|
|
void
|
|
hmac_ctx_init(HMAC_CTX *ctx, const uint8_t *key, int key_len,
|
|
- const EVP_MD *kt)
|
|
+ const EVP_MD *kt, bool prf_use)
|
|
{
|
|
ASSERT(NULL != kt && NULL != ctx);
|
|
|
|
HMAC_CTX_reset(ctx);
|
|
+ /* FIPS 140-2 explicitly allows MD5 for the use in PRF although it is not
|
|
+ * * to be used anywhere else */
|
|
+ if(kt == EVP_md5() && prf_use)
|
|
+ HMAC_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
|
|
HMAC_Init_ex(ctx, key, key_len, kt, NULL);
|
|
|
|
/* make sure we used a big enough key */
|
|
diff --git a/src/openvpn/ntlm.c b/src/openvpn/ntlm.c
|
|
index 0b1163e..93283bc 100644
|
|
--- a/src/openvpn/ntlm.c
|
|
+++ b/src/openvpn/ntlm.c
|
|
@@ -88,7 +88,7 @@
|
|
const md_kt_t *md5_kt = md_kt_get("MD5");
|
|
hmac_ctx_t *hmac_ctx = hmac_ctx_new();
|
|
|
|
- hmac_ctx_init(hmac_ctx, key, key_len, md5_kt);
|
|
+ hmac_ctx_init(hmac_ctx, key, key_len, md5_kt, 0);
|
|
hmac_ctx_update(hmac_ctx, data, data_len);
|
|
hmac_ctx_final(hmac_ctx, result);
|
|
hmac_ctx_cleanup(hmac_ctx);
|
|
diff --git a/src/openvpn/options.c b/src/openvpn/options.c
|
|
index fef5e90..33b6976 100644
|
|
--- a/src/openvpn/options.c
|
|
+++ b/src/openvpn/options.c
|
|
@@ -850,6 +850,10 @@ init_options(struct options *o, const bool init_gc)
|
|
#endif
|
|
#ifdef ENABLE_CRYPTO
|
|
o->ciphername = "BF-CBC";
|
|
+#ifdef OPENSSL_FIPS
|
|
+ if(FIPS_mode())
|
|
+ o->ciphername = "AES-256-CBC";
|
|
+#endif
|
|
#ifdef HAVE_AEAD_CIPHER_MODES /* IV_NCP=2 requires GCM support */
|
|
o->ncp_enabled = true;
|
|
#else
|
|
diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c
|
|
index 15cd94a..21f50f1 100644
|
|
--- a/src/openvpn/ssl.c
|
|
+++ b/src/openvpn/ssl.c
|
|
@@ -1635,8 +1635,8 @@ tls1_P_hash(const md_kt_t *md_kt,
|
|
chunk = md_kt_size(md_kt);
|
|
A1_len = md_kt_size(md_kt);
|
|
|
|
- hmac_ctx_init(ctx, sec, sec_len, md_kt);
|
|
- hmac_ctx_init(ctx_tmp, sec, sec_len, md_kt);
|
|
+ hmac_ctx_init(ctx, sec, sec_len, md_kt, 1);
|
|
+ hmac_ctx_init(ctx_tmp, sec, sec_len, md_kt, 1);
|
|
|
|
hmac_ctx_update(ctx,seed,seed_len);
|
|
hmac_ctx_final(ctx, A1);
|
|
--
|
|
2.13.1
|
|
|