Fix regression with password protected private keys (polarssl)
PATCH 1/1 Fix regression with password protected private keys (polarssl)
Hi,
Between versions 1.2.7 and 1.2.8, polarssl changed the errors returned by the X509 parsing functions, which broke the OpenVPN implementation for password protected private keys in polarssl builds. Later, for polarssl 1.3, the return codes changed again.
The attached patches fix the regression by checking for the new errors in OpenVPN. Since the 2.3 and master code is slightly different here, I made a patch for each branch.
The polarssl change for 1.2.8:
https://github.com/polarssl/polarssl/commit/b495d3a
An later for polarssl 1.3 (search for pk_parse_key()):
https://github.com/polarssl/polarssl/commit/1a7550a
-Steffan
From 3c6c25b8c2270ad0af71a8837b60ea40ecfe66be Mon Sep 17 00:00:00 2001
From: Steffan Karger <[email protected]...>
Date: Fri, 19 Sep 2014 06:43:48 +0200
Subject: [PATCH (2.3)] Fix regression with password protected private keys
(polarssl)
Between versions 1.2.7 and 1.2.8, polarssl changed the errors returned by the X509 parsing functions, which broke the OpenVPN implementation for password protected private keys in polarssl builds. This patch fixes that by checking for the new errors in OpenVPN.
--- src/openvpn/ssl_polarssl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
src/openvpn/ssl_polarssl.c +3 -3
@@ -273,7 +273,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file, status =x509parse_key (ctx->priv_key, priv_key_file_inline,strlen (priv_key_file_inline),NULL ,0 ); -if (POLARSSL_ERR_PEM_PASSWORD_REQUIRED == status) +if (POLARSSL_ERR_X509_PASSWORD_REQUIRED == status) {char passbuf[512 ] = {0 };pem_password_callback (passbuf,512 ,0 ,NULL );
@@ -285,7 +285,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file,else { status =x509parse_keyfile (ctx->priv_key, priv_key_file,NULL ); -if (POLARSSL_ERR_PEM_PASSWORD_REQUIRED == status) +if (POLARSSL_ERR_X509_PASSWORD_REQUIRED == status) {char passbuf[512 ] = {0 };pem_password_callback (passbuf,512 ,0 ,NULL );
@@ -295,7 +295,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file,if (0 != status) {#ifdef ENABLE_MANAGEMENT -if (management && (POLARSSL_ERR_PEM_PASSWORD_MISMATCH == status)) +if (management && (POLARSSL_ERR_X509_PASSWORD_MISMATCH == status))management_auth_failure (management,UP_TYPE_PRIVATE_KEY ,NULL );#endif msg (M_WARN ,"Cannot load private key file %s" , priv_key_file);
Signature · 1 line
1.9.1
From 5671a73039e94df29fbe07b8250284366ebcda7d Mon Sep 17 00:00:00 2001
From: Steffan Karger <[email protected]...>
Date: Fri, 19 Sep 2014 06:19:13 +0200
Subject: [PATCH (master)] Fix regression with password protected private keys
(polarssl)
Between versions 1.2 and 1.3, polarssl changed the errors returned by the X509 parsing functions, which broke the OpenVPN implementation for password protected private keys in polarssl builds. This patch fixes that by checking for the new errors in OpenVPN.
--- src/openvpn/ssl_polarssl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
src/openvpn/ssl_polarssl.c +3 -3
@@ -298,7 +298,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file, (const unsigned char *) priv_key_inline,strlen (priv_key_inline), NULL, 0); -if (POLARSSL_ERR_PEM_PASSWORD_REQUIRED == status) +if (POLARSSL_ERR_PK_PASSWORD_REQUIRED == status) {char passbuf[512 ] = {0 };pem_password_callback (passbuf,512 ,0 ,NULL );
@@ -310,7 +310,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file,else { status =pk_parse_keyfile (ctx->priv_key, priv_key_file,NULL ); -if (POLARSSL_ERR_PEM_PASSWORD_REQUIRED == status) +if (POLARSSL_ERR_PK_PASSWORD_REQUIRED == status) {char passbuf[512 ] = {0 };pem_password_callback (passbuf,512 ,0 ,NULL );
@@ -320,7 +320,7 @@ tls_ctx_load_priv_file (struct tls_root_ctx *ctx, const char *priv_key_file,if (0 != status) {#ifdef ENABLE_MANAGEMENT -if (management && (POLARSSL_ERR_PEM_PASSWORD_MISMATCH == status)) +if (management && (POLARSSL_ERR_PK_PASSWORD_MISMATCH == status))management_auth_failure (management,UP_TYPE_PRIVATE_KEY ,NULL );#endif msg (M_WARN ,"Cannot load private key file %s" , priv_key_file);
Signature · 1 line
1.9.1
ACK, verifying against the polarssl commit.
Your patch has been applied to the master branch.
commit 4b9eaa1ee40648f101deb4ebf07a04cd5b5400e9
Author: Steffan Karger Date: Fri Sep 19 06:19:13 2014 +0200
Fix regression with password protected private keys (polarssl)
Signed-off-by: Steffan Karger <[email protected]...>
Acked-by: Gert Doering <[email protected]...>
Message-Id: <[email protected]...>
Signed-off-by: Gert Doering <[email protected]...>--
kind regards,
Gert Doering
ACK, verifying against the polarssl commit.
Your patch has been applied to the release/2.3 branch.
commit f056c8eadc4d5fcda5d1e861425802f503587f16
Author: Steffan Karger Date: Fri Sep 19 06:43:48 2014 +0200
Fix regression with password protected private keys (polarssl)
Signed-off-by: Steffan Karger <[email protected]...>
Acked-by: Gert Doering <[email protected]...>
Message-Id: <[email protected]...>
Signed-off-by: Gert Doering <[email protected]...>--
kind regards,
Gert Doering