Here is a working Patch against 4.1.2, should also work on 4.1.3. Backportet from the 4.2.0 tree.
Am Donnerstag, 30. Januar 2014, 15:38:07 schrieb Reindl Harald: > Am 30.01.2014 15:19, schrieb Uri Shachar: > > On Thu, 30 Jan 2014 14:47:10 +0100 Reindl Harald wrote: > > snip... > > > >> one remaining issue currently is that DHE/ECDHE seems not to be supported > >> while httpd/openssl with the same environment do > > > > snip... > > > > Added in 4.2.0 - Check out https://issues.apache.org/jira/browse/TS-2372 > > cool - thanks! > > hopefully the same way as httpd starting with 2.4.7 > http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile > > > DH parameter interoperability with primes > 1024 bit > > Beginning with version 2.4.7, mod_ssl makes use of standardized DH > > parameters with prime lengths of 2048, 3072 and 4096 bits (from RFC > > 3526), and hands them out to clients based on the length of the > > certificate's RSA/DSA key. With Java-based clients in particular (Java 7 > > or earlier), this may lead to handshake failures - see this FAQ answer > > for working around such issues. > > means that if you have a RSA3072 DH-params are 3072, the same for 4096 etc. > and if someone want to control that he can add params to the used PEM file > and it could look like below containg all TSL relevant params/keys/certs > > [root@testserver:~]$ cat conf/ssl/testserver.rhsoft.net.pem > -----BEGIN CERTIFICATE----- > *snip* > -----END CERTIFICATE----- > -----BEGIN PRIVATE KEY----- > *snip* > -----END PRIVATE KEY----- > -----BEGIN DH PARAMETERS----- > MIIBiAKCAYEAsprp4BdLI4Vo8JcsJbu6/UJK+udAl3C1sHrBahXXdVxt6ArjbktI > up5BfGoiBfj28K0DiGSdXvnpDemaiJd29X+M7+XvJN6px0EP54aU+2Y+LeceI5WK > FBokp1wQFVG0f6ccNlXvoLec1iQLog+ygDT5m25yGKjfHTpRgJovoi5Jwoqtl0H+ > XQ32oHh3/8IA1CjoWDkuHJGEWX6z26W9dTn9U4t9e0dIL+ulX6cQfkkJDSzwBgEs > y9jimihp73zu7hAIu/zNBMFWYswbZ4Z5SA1wENNRsO3nmBCekCjfKp0MuEJGQ/xx > U2Hrcd6UAPwTEjuWmBOi/DlAPQyLbTVDinBDfoZHsrl1Je1Hxwix4nsLsml0NoDw > i0jzihtOCoKiTuP7BWemZy2eKOqcRnu764bcFp8/l3klKWpuOH6Vd/7rfoe/FzQR > 8M8b5lTGTktjVPhZaRLe9lrHkVCa7MnPdHBK/JHvGBHsvGFQur4oQm5culCeQAxq > 0C/m6ck3xYTLAgEC > -----END DH PARAMETERS----- > -----BEGIN EC PARAMETERS----- > BgUrgQQAIg=> -----END EC PARAMETERS----- -- Mit freundlichen Grüßen, Thomas Berger Piraten IT -- Piratenpartei Deutschland - Pirate Party of Germany Pflugstraße 9a, D-10115 Berlin, Germany Vorstand: Thorsten Wirth, Carolin Mahn-Gauseweg, Stefan Bartels, Stephanie Schmiedke, Veronique Schmitz, Gefion Thürmer, Björn Niklas Semrau
diff -uarN trafficserver-4.1.2.orig/build/crypto.m4 trafficserver-4.1.2/build/crypto.m4
--- trafficserver-4.1.2.orig/build/crypto.m4 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/build/crypto.m4 2013-12-23 23:52:17.025503995 +0100
@@ -111,6 +111,19 @@
])
+AC_DEFUN([TS_CHECK_CRYPTO_EC_KEYS], [
+ _eckeys_saved_LIBS=$LIBS
+ TS_ADDTO(LIBS, [$LIBSSL])
+ AC_CHECK_HEADERS(openssl/ec.h)
+ AC_CHECK_FUNCS(EC_KEY_new_by_curve_name, [enable_tls_eckey=yes], [enable_tls_eckey=no])
+ LIBS=$_eckeys_saved_LIBS
+
+ AC_MSG_CHECKING(whether EC keys are supported)
+ AC_MSG_RESULT([$enable_tls_eckey])
+ TS_ARG_ENABLE_VAR([use], [tls-eckey])
+ AC_SUBST(use_tls_eckey)
+])
+
AC_DEFUN([TS_CHECK_CRYPTO_NEXTPROTONEG], [
enable_tls_npn=yes
_npn_saved_LIBS=$LIBS
diff -uarN trafficserver-4.1.2.orig/configure.ac trafficserver-4.1.2/configure.ac
--- trafficserver-4.1.2.orig/configure.ac 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/configure.ac 2013-12-23 23:52:17.026503995 +0100
@@ -1088,6 +1088,10 @@
TS_CHECK_CRYPTO_NEXTPROTONEG
#
+# Check for EC key support.
+TS_CHECK_CRYPTO_EC_KEYS
+
+#
# Check for ServerNameIndication TLS extension support.
TS_CHECK_CRYPTO_SNI
diff -uarN trafficserver-4.1.2.orig/iocore/net/SSLConfig.cc trafficserver-4.1.2/iocore/net/SSLConfig.cc
--- trafficserver-4.1.2.orig/iocore/net/SSLConfig.cc 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/iocore/net/SSLConfig.cc 2013-12-23 23:50:18.832503995 +0100
@@ -162,6 +162,24 @@
#endif
}
+ // Enable ephemeral DH parameters for the case where we use a cipher with DH forward security.
+#ifdef SSL_OP_SINGLE_DH_USE
+ ssl_ctx_options |= SSL_OP_SINGLE_DH_USE;
+#endif
+
+#ifdef SSL_OP_SINGLE_ECDH_USE
+ ssl_ctx_options |= SSL_OP_SINGLE_ECDH_USE;
+#endif
+
+ // Enable all SSL compatibility workarounds.
+ ssl_ctx_options |= SSL_OP_ALL;
+
+ // According to OpenSSL source, applications must enable this if they support the Server Name extension. Since
+ // we do, then we ought to enable this. Httpd also enables this unconditionally.
+#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
+ ssl_ctx_options |= SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION;
+#endif
+
REC_ReadConfigStringAlloc(serverCertChainFilename, "proxy.config.ssl.server.cert_chain.filename");
REC_ReadConfigStringAlloc(serverCertRelativePath, "proxy.config.ssl.server.cert.path");
set_paths_helper(serverCertRelativePath, NULL, &serverCertPathOnly, NULL);
diff -uarN trafficserver-4.1.2.orig/iocore/net/SSLNetVConnection.cc trafficserver-4.1.2/iocore/net/SSLNetVConnection.cc
--- trafficserver-4.1.2.orig/iocore/net/SSLNetVConnection.cc 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/iocore/net/SSLNetVConnection.cc 2013-12-23 23:51:25.440503995 +0100
@@ -448,6 +448,7 @@
sslHandShakeComplete = false;
sslClientConnection = false;
npnSet = NULL;
+ npnEndpoint= NULL;
if (from_accept_thread) {
sslNetVCAllocator.free(this);
diff -uarN trafficserver-4.1.2.orig/iocore/net/SSLUtils.cc trafficserver-4.1.2/iocore/net/SSLUtils.cc
--- trafficserver-4.1.2.orig/iocore/net/SSLUtils.cc 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/iocore/net/SSLUtils.cc 2013-12-23 23:52:31.379503995 +0100
@@ -34,6 +34,10 @@
#include <openssl/ts.h>
#endif
+#if HAVE_OPENSSL_EC_H
+#include <openssl/ec.h>
+#endif
+
// ssl_multicert.config field names:
#define SSL_IP_TAG "dest_ip"
#define SSL_CERT_TAG "ssl_cert_name"
@@ -178,13 +182,32 @@
SSL_CTX_set_tlsext_servername_arg(ctx, lookup);
}
#else
- (void)ctx;
(void)lookup;
#endif /* TS_USE_TLS_SNI */
return ctx;
}
+static SSL_CTX *
+ssl_context_enable_ecdh(SSL_CTX * ctx)
+{
+#if TS_USE_TLS_ECKEY
+
+#if defined(SSL_CTRL_SET_ECDH_AUTO)
+ SSL_CTX_set_ecdh_auto(ctx, 1);
+#elif defined(HAVE_EC_KEY_NEW_BY_CURVE_NAME) && defined(NID_X9_62_prime256v1)
+ EC_KEY * ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+
+ if (ecdh) {
+ SSL_CTX_set_tmp_ecdh(ctx, ecdh);
+ EC_KEY_free(ecdh);
+ }
+#endif
+#endif
+
+ return ctx;
+}
+
void
SSLInitializeLibrary()
{
@@ -401,7 +424,7 @@
}
}
- return ctx;
+ return ssl_context_enable_ecdh(ctx);
fail:
SSL_CTX_free(ctx);
diff -uarN trafficserver-4.1.2.orig/lib/ts/ink_config.h.in trafficserver-4.1.2/lib/ts/ink_config.h.in
--- trafficserver-4.1.2.orig/lib/ts/ink_config.h.in 2013-12-05 23:07:48.000000000 +0100
+++ trafficserver-4.1.2/lib/ts/ink_config.h.in 2013-12-23 23:52:17.027503995 +0100
@@ -67,6 +67,7 @@
#define TS_USE_RECLAIMABLE_FREELIST @use_reclaimable_freelist@
#define TS_USE_TLS_NPN @use_tls_npn@
#define TS_USE_TLS_SNI @use_tls_sni@
+#define TS_USE_TLS_ECKEY @use_tls_eckey@
#define TS_USE_LINUX_NATIVE_AIO @use_linux_native_aio@
#define TS_USE_COP_DEBUG @use_cop_debug@
#define TS_USE_INTERIM_CACHE @has_interim_cache@
signature.asc
Description: This is a digitally signed message part.
