Commit Diff
Diff:
52d8fa2c09c36632c1cacd8242e22e9de920ec9f
02850008f4a4e8fff5799157d21ee7924345b3e1
Commit:
02850008f4a4e8fff5799157d21ee7924345b3e1
Tree:
5d7c3dc13d3a2ba3e4008cddd3aee9e88ccae815
Author:
Alexander Barton <alex@barton.de>
Committer:
Alexander Barton <alex@barton.de>
Date:
Wed May 6 21:36:19 2020 UTC
Message:
Merge pull request #269 from hillu/gnutls-reload-cert Add support for GnuTLS certificate reload. Thanks a lot, Hilko Bengen!
blob - 0f4768a964fc03bf1c6b7299d1e3ba3cf3834dcb
blob + 6d06f60780ebafae0f04d81517504a9c3d561bac
--- .gitignore
+++ .gitignore
@@ -45,6 +45,8 @@ src/portab/portabtest.exe
src/testsuite/*.e_
src/testsuite/channel-test
src/testsuite/connect-test
+src/testsuite/connect-tls-cert1-test
+src/testsuite/connect-tls-cert2-test
src/testsuite/invite-test
src/testsuite/join-test
src/testsuite/kick-test
@@ -56,6 +58,8 @@ src/testsuite/ngircd-test1.log
src/testsuite/ngircd-test1.motd
src/testsuite/ngircd-test2.log
src/testsuite/ngircd-test2.motd
+src/testsuite/ngircd-test3.log
+src/testsuite/ngircd-test3.motd
src/testsuite/opless-channel-test
src/testsuite/server-link-test
src/testsuite/server-login-test
@@ -63,6 +67,8 @@ src/testsuite/T-ngircd1
src/testsuite/T-ngircd1.exe
src/testsuite/T-ngircd2
src/testsuite/T-ngircd2.exe
+src/testsuite/T-ngircd3
+src/testsuite/T-ngircd3.exe
src/testsuite/tests
src/testsuite/tests-skipped.lst
src/testsuite/who-test
blob - d1f731bc8c05093b65fd55f3a451653a932bfc02
blob + 59d9d9fe8fd5e469650799e6b4cb0b0b3afad2eb
--- configure.ng
+++ configure.ng
@@ -506,6 +506,8 @@ if test "$x_ssl_openssl" = "yes"; then
x_ssl_lib=openssl
fi
+AM_CONDITIONAL(HAVE_SSL, [test $x_ssl_lib != "no"])
+
# use TCP wrappers?
x_tcpwrap_on=no
blob - af715af8c7c1b773680b63f14890663962467623
blob + a8896a1f634db1fd511a9129442e2d50b3b05420
--- src/ngircd/conf-ssl.h
+++ src/ngircd/conf-ssl.h
@@ -40,6 +40,7 @@ struct ConnSSL_State {
gnutls_session_t gnutls_session;
void *cookie; /* pointer to server configuration structure
(for outgoing connections), or NULL. */
+ size_t x509_cred_idx; /* index of active x509 credential record */
#endif
char *fingerprint;
};
blob - 3f482dc7ff60263ce40822d41d20c4a7b345e409
blob + 4dd335ea9209f6a01fa11f459fb3e0d976e44a21
--- src/ngircd/conn-ssl.c
+++ src/ngircd/conn-ssl.c
@@ -62,9 +62,17 @@ static bool ConnSSL_LoadServerKey_openssl PARAMS(( SSL
#define MAX_HASH_SIZE 64 /* from gnutls-int.h */
-static gnutls_certificate_credentials_t x509_cred;
+typedef struct {
+ int refcnt;
+ gnutls_certificate_credentials_t x509_cred;
+ gnutls_dh_params_t dh_params;
+} x509_cred_slot;
+
+static array x509_creds = INIT_ARRAY;
+static size_t x509_cred_idx;
+
static gnutls_dh_params_t dh_params;
-static gnutls_priority_t priorities_cache;
+static gnutls_priority_t priorities_cache = NULL;
static bool ConnSSL_LoadServerKey_gnutls PARAMS(( void ));
#endif
@@ -266,6 +274,21 @@ void ConnSSL_Free(CONNECTION *c)
gnutls_bye(sess, GNUTLS_SHUT_RDWR);
gnutls_deinit(sess);
}
+ x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), c->ssl_state.x509_cred_idx);
+ assert(slot != NULL);
+ assert(slot->refcnt > 0);
+ assert(slot->x509_cred != NULL);
+ slot->refcnt--;
+ if ((c->ssl_state.x509_cred_idx != x509_cred_idx) && (slot->refcnt <= 0)) {
+ Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.",
+ c->ssl_state.x509_cred_idx);
+ gnutls_certificate_free_keys(slot->x509_cred);
+ gnutls_certificate_free_credentials(slot->x509_cred);
+ slot->x509_cred = NULL;
+ gnutls_dh_params_deinit(slot->dh_params);
+ slot->dh_params = NULL;
+ slot->refcnt = 0;
+ }
#endif
assert(Conn_OPTION_ISSET(c, CONN_SSL));
/* can't just set bitmask to 0 -- there are other, non-ssl related flags, e.g. CONN_ZIP. */
@@ -348,22 +371,21 @@ out:
int err;
static bool initialized;
- if (initialized) {
- /* TODO: cannot reload gnutls keys: can't simply free x509
- * context -- it may still be in use */
- return false;
+ if (!initialized) {
+ err = gnutls_global_init();
+ if (err) {
+ Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
+ gnutls_strerror(err));
+ goto out;
+ }
}
- err = gnutls_global_init();
- if (err) {
- Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
- gnutls_strerror(err));
- goto out;
- }
-
if (!ConnSSL_LoadServerKey_gnutls())
goto out;
+ if (priorities_cache != NULL) {
+ gnutls_priority_deinit(priorities_cache);
+ }
if (gnutls_priority_init(&priorities_cache, Conf_SSLOptions.CipherList,
NULL) != GNUTLS_E_SUCCESS) {
Log(LOG_ERR,
@@ -389,6 +411,9 @@ ConnSSL_LoadServerKey_gnutls(void)
int err;
const char *cert_file;
+ x509_cred_slot *slot = NULL;
+ gnutls_certificate_credentials_t x509_cred;
+
err = gnutls_certificate_allocate_credentials(&x509_cred);
if (err < 0) {
Log(LOG_ERR, "Failed to allocate certificate credentials: %s",
@@ -419,6 +444,43 @@ ConnSSL_LoadServerKey_gnutls(void)
gnutls_strerror(err));
return false;
}
+
+ /* Free currently active x509 context (if any) unless it is still in use */
+ slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
+ if ((slot != NULL) && (slot->refcnt <= 0) && (slot->x509_cred != NULL)) {
+ Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.", x509_cred_idx);
+ gnutls_certificate_free_keys(slot->x509_cred);
+ gnutls_certificate_free_credentials(slot->x509_cred);
+ slot->x509_cred = NULL;
+ gnutls_dh_params_deinit(slot->dh_params);
+ slot->dh_params = NULL;
+ slot->refcnt = 0;
+ }
+
+ /* Find free slot */
+ x509_cred_idx = (size_t) -1;
+ size_t i;
+ for (slot = array_start(&x509_creds), i = 0;
+ i < array_length(&x509_creds, sizeof(x509_cred_slot));
+ slot++, i++) {
+ if (slot->refcnt <= 0) {
+ x509_cred_idx = i;
+ break;
+ }
+ }
+ /* ... allocate new slot otherwise. */
+ if (x509_cred_idx == (size_t) -1) {
+ x509_cred_idx = array_length(&x509_creds, sizeof(x509_cred_slot));
+ slot = array_alloc(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
+ if (slot == NULL) {
+ Log(LOG_ERR, "Failed to allocate new slot for certificate credentials");
+ return false;
+ }
+ }
+ Log(LOG_INFO, "Storing new X509 certificate credentials in slot %zd.", x509_cred_idx);
+ slot->x509_cred = x509_cred;
+ slot->refcnt = 0;
+
return true;
}
#endif
@@ -520,8 +582,13 @@ ConnSSL_Init_SSL(CONNECTION *c)
(gnutls_transport_ptr_t) (long) c->sock);
gnutls_certificate_server_set_request(c->ssl_state.gnutls_session,
GNUTLS_CERT_REQUEST);
+
+ Log(LOG_INFO, "Using X509 credentials from slot %zd", x509_cred_idx);
+ c->ssl_state.x509_cred_idx = x509_cred_idx;
+ x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
+ slot->refcnt++;
ret = gnutls_credentials_set(c->ssl_state.gnutls_session,
- GNUTLS_CRD_CERTIFICATE, x509_cred);
+ GNUTLS_CRD_CERTIFICATE, slot->x509_cred);
if (ret != 0) {
Log(LOG_ERR, "Failed to set SSL credentials: %s",
gnutls_strerror(ret));
blob - 96d37f19a526885f20e1a29922a37c1a4f83b50b
blob + 58693a76da20d7f271b47d56587ac732104d1280
--- src/testsuite/Makefile.ng
+++ src/testsuite/Makefile.ng
@@ -23,13 +23,16 @@ EXTRA_DIST = \
stress-A.e stress-B.e \
server-login-test.e \
start-server1 stop-server1 ngircd-test1.conf \
- start-server2 stop-server2 ngircd-test2.conf
+ start-server2 stop-server2 ngircd-test2.conf \
+ start-server3 stop-server3 ngircd-test3.conf \
+ reload-server3 reload-server.sh prep-server3 cleanup-server3\
+ connect-ssl-cert1-test.e connect-ssl-cert2-test.e
all:
clean-local:
rm -rf logs tests *-test ngircd-test*.log procs.tmp tests-skipped.lst \
- T-ngircd1 ngircd-test1.motd T-ngircd2 ngircd-test2.motd
+ T-ngircd1 ngircd-test1.motd T-ngircd2 ngircd-test2.motd T-ngircd3 ngircd-test3.motd
maintainer-clean-local:
rm -f Makefile Makefile.in Makefile.am
@@ -39,6 +42,7 @@ check_SCRIPTS = ngircd-TEST-Binary tests.sh
ngircd-TEST-Binary:
cp ../ngircd/ngircd T-ngircd1
cp ../ngircd/ngircd T-ngircd2
+ cp ../ngircd/ngircd T-ngircd3
[ -f getpid.sh ] || ln -s $(srcdir)/getpid.sh .
rm -f tests-skipped.lst
@@ -46,6 +50,14 @@ connect-test: tests.sh
rm -f connect-test
ln -s $(srcdir)/tests.sh connect-test
+connect-ssl-cert1-test: tests.sh
+ rm -f connect-ssl-cert1-test
+ ln -s $(srcdir)/tests.sh connect-ssl-cert1-test
+
+connect-ssl-cert2-test: tests.sh
+ rm -f connect-ssl-cert2-test
+ ln -s $(srcdir)/tests.sh connect-ssl-cert2-test
+
channel-test: tests.sh
rm -f channel-test
ln -s $(srcdir)/tests.sh channel-test
@@ -113,4 +125,16 @@ TESTS = start-server1 \
stress-server.sh \
stop-server1
+if HAVE_SSL
+TESTS += \
+ prep-server3 \
+ start-server3 \
+ connect-ssl-cert1-test \
+ switch-server3 \
+ reload-server3 \
+ connect-ssl-cert2-test \
+ cleanup-server3 \
+ stop-server3
+endif
+
# -eof-
blob - /dev/null
blob + a80fe730fabaa5bd06d68cebe22c1529c4df458f (mode 755)
--- /dev/null
+++ src/testsuite/cleanup-server3
@@ -0,0 +1,2 @@
+#!/bin/sh
+rm ssl/cert.pem ssl/key.pem ssl/dhparams.pem
blob - /dev/null
blob + 6a8c1b6f72d582f18cd9ac5009cea37bf68db0b3 (mode 644)
--- /dev/null
+++ src/testsuite/connect-ssl-cert1-test.e
@@ -0,0 +1,21 @@
+# ngIRCd test suite
+# Server connect test
+
+spawn openssl s_client -quiet -connect 127.0.0.1:6697
+expect {
+ timeout { exit 1 }
+ "*CN = my.first.domain.tld"
+}
+
+sleep 2
+send "oper\r"
+expect {
+ timeout { exit 1 }
+ "451"
+}
+
+send "quit\r"
+expect {
+ timeout { exit 1 }
+ "Connection closed"
+}
blob - /dev/null
blob + a4237537f26627744624d1c923f7b62a6a77d24d (mode 644)
--- /dev/null
+++ src/testsuite/connect-ssl-cert2-test.e
@@ -0,0 +1,22 @@
+# ngIRCd test suite
+# Server connect test
+
+spawn openssl s_client -quiet -connect 127.0.0.1:6697
+expect {
+ timeout { exit 1 }
+ "*CN = my.second.domain.tld"
+}
+
+sleep 2
+send "oper\r"
+expect {
+ timeout { exit 1 }
+ "451"
+}
+
+send "quit\r"
+expect {
+ timeout { exit 1 }
+ "Connection closed"
+}
+
blob - /dev/null
blob + 198c982ff6f202f940414bace9f9c6f6c9dcd161 (mode 644)
--- /dev/null
+++ src/testsuite/ngircd-test3.conf
@@ -0,0 +1,31 @@
+# ngIRCd test suite
+# configuration file for test server #1
+
+[Global]
+ Name = ngircd.test.server
+ Info = ngIRCd Test-Server 3
+ Listen = 127.0.0.1
+ Ports = 6789
+ MotdFile = ngircd-test3.motd
+ AdminEMail = admin@irc.server
+
+[SSL]
+ CertFile = ssl/cert.pem
+ KeyFile = ssl/key.pem
+ DHFile = ssl/dhparams.pem
+ Ports = 6697
+
+
+[Limits]
+ MaxConnectionsIP = 0
+ MaxJoins = 4
+ MaxPenaltyTime = 1
+
+[Options]
+ OperCanUseMode = yes
+ Ident = no
+ IncludeDir = /var/empty
+ DNS = no
+ PAM = no
+
+# -eof-
blob - /dev/null
blob + 054c670c88f26f3d546b3ef549ec0ef2b02ca71d (mode 755)
--- /dev/null
+++ src/testsuite/prep-server3
@@ -0,0 +1,4 @@
+#!/bin/sh
+cp ssl/cert-my-first-domain-tld.pem ssl/cert.pem
+cp ssl/key-my-first-domain-tld.pem ssl/key.pem
+cp ssl/dhparams-my-first-domain-tld.pem ssl/dhparams.pem
blob - /dev/null
blob + b17d672119e19f172da22e9f778a092c1775409c (mode 755)
--- /dev/null
+++ src/testsuite/reload-server.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# ngIRCd Test Suite
+
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+
+# read in functions
+. ${srcdir}/functions.inc
+
+if [ -n "$1" ]; then
+ id="$1"; shift
+else
+ id="1"
+fi
+
+echo_n "reloading server ${id} ..."
+
+# reload (sighup) test-server ...
+pid=`./getpid.sh T-ngircd${id}`
+if [ -z "$pid" ]; then
+ echo " failure: no running server found!?"
+ exit 1
+fi
+kill -HUP $pid > /dev/null 2>&1; r=$?
+if [ $r -eq 0 ]; then
+ echo " ok".
+ exit 0
+fi
+echo " failure: server ${id} could not be restarted"
+exit 1
+
+# -eof-
blob - /dev/null
blob + da7b37eb13ce810423e7a169471b5423fbc636f9 (mode 755)
--- /dev/null
+++ src/testsuite/reload-server3
@@ -0,0 +1,7 @@
+#!/bin/sh
+# ngIRCd Test Suite
+
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+${srcdir}/reload-server.sh 3
+
+# -eof-
blob - /dev/null
blob + 1b3961d90c281a0d7b6cc75d656f913517b00c47 (mode 644)
--- /dev/null
+++ src/testsuite/ssl/cert-my-first-domain-tld.pem
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEDDCCAnSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDExNteS5m
+aXJzdC5kb21haW4udGxkMB4XDTIwMDQyNDA4MjQyNVoXDTQ3MDkxMDA4MjQyNVow
+HjEcMBoGA1UEAxMTbXkuZmlyc3QuZG9tYWluLnRsZDCCAaIwDQYJKoZIhvcNAQEB
+BQADggGPADCCAYoCggGBAJ3HvAIDQxL/o7yoemMH5OZEXyFTQ/Q838UY0lXbWBb0
+Lsz9ft0UFtu/SSabHLLJHQME99IyleYiMwi0Y3oqDCVZp6eqeKS7MTRIot2D1m4T
+QsK13dAvZOaEYPsltdsFDCP75s07tDp9aYYsHDsNhHu8LxUachmb3747/v1E1TGZ
+T5BSnzGxEsQo1vzKKMpMbjct1d3zdQRB1o/r6BlaPykTAaB1DkM7GOOdtprhO/Sh
+PbfXL+BHgldPbxboul7NTt1r2CfqFmz4Pi4PbCruv0HVG8N8egN6Jb80UuwOiCcM
+BxY9uhCh6ZPoZ9ufmGALhkgD0rlt/sQfKQ0EImzx8cC/6zvSfJQ0WazLp/wCImkP
+QZwKm/U6RMHWtthHg4pJRsYF5rL2+YMqebTcG655+fgQm9EI+ZcAqWIbnogGA046
+oS1X7805ogBo7OPMlJ19NjxOc3yS9dXlk6hEe0AKSCCusy4lI4gcGd2gwmAtXp3i
+ZVkFBsUsmBe3x5sEAEVVyQIDAQABo1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM
+MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFFst+QAEUdCP
+V80/hmOEBKtjOMRLMA0GCSqGSIb3DQEBCwUAA4IBgQCOEIJgi0H1lc33dU8Na4//
+CI3rOOYwFnSiiUe8A5n38LsU2ZrwwJmn60JgNdAmrNkXTI8qNTuTU6XIOAqq32FY
+wdNqPt7wE7UDRMQeMDlLNo+lnuI1XrBxk9mEpfmyGeGqeIDIr5vlEWs4Snr73RC0
+iQBUD6qGdhZa/ABm342psSA4OxtjCn6mBBT/gSi8yCO0Po8yFvndGMe3kNQFwir4
+supxptzqFDCDOQOYSgUy2QT7wlFAqPdZWMSepdeoaBYrqBsvf9shWC0iChKJxnCp
+SVZpoPysxuVyQMKjjzTJcNDwydMyIny4Z9rt+kkvgn/JDxIQe1+jJ8dJR+VWQeNe
+we604uEsN0hWq1FkkMO8NQdbM4xipDciEanHunWvwFkXuIuc0aEpqIchU32O2wav
+ck8ytssLLQDGaJLHx6iOB2MCi8HbS8U9xfrg8JJIFnxmnkKdI6x2akzYm+nqDxqQ
+dGeoVJgegiamYlydkGskw04oGkD16H0LQwlzsDwgvP8=
+-----END CERTIFICATE-----
blob - /dev/null
blob + f8d89850fcfb2b2311daae31ebbb8109e0a052c4 (mode 644)
--- /dev/null
+++ src/testsuite/ssl/cert-my-second-domain-tld.pem
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEDjCCAnagAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDExRteS5z
+ZWNvbmQuZG9tYWluLnRsZDAeFw0yMDA0MjQwODIzNDBaFw00NzA5MTAwODIzNDBa
+MB8xHTAbBgNVBAMTFG15LnNlY29uZC5kb21haW4udGxkMIIBojANBgkqhkiG9w0B
+AQEFAAOCAY8AMIIBigKCAYEA4+442scsdqSf6O4UO/RskMzOX8BhDcSwrhGe97jd
+CuQKUqS6OT1UoHK0DdMkxHlOMhifPzKxoBQlI/02l14tV//xNArKj4a+BZzNS1mp
+3adjgTc3uRDQHmHVZUzH4VXhL2zZ1EXVaJULZVWJYAqMW8GOObs+Kwijo+zxBGRs
+96Re9sg3XMkCUN+ZMoCpqoU4R/QiJ5z7B4AXS9CVcvczQKiULn1otP+UQQ4ABHlN
+t8pZzR6P/WGy91PvGt5wWfpReGveP/Zl2tksVXXs0CQgteneblYVzj01MaobVW59
+/LGUpe0oQy2rtzQVX3DZkDoGwGh4lof2Af+xMjCbVL6oDbPPooXG8TJnDP3AVhMG
+KIb+EhBUIEJnd/z6ZXTWbv0KQOt4wiVBzuXVBf7xxn/aH4+3kyrnj7CsUHXM4++x
+KRZq7gaP7nRbN22rw+WCHnqvMfAGnS7/6AjKFUWxmNWxRXMX+ehsSbT/XQnQm88e
+oUBLzQc4JrNSPklVJ82Qp19tAgMBAAGjVTBTMAwGA1UdEwEB/wQCMAAwEwYDVR0l
+BAwwCgYIKwYBBQUHAwEwDwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQUdnjZogYk
+7JK21Fj2NfYwrtJzK1EwDQYJKoZIhvcNAQELBQADggGBABDreWdgeyLMvqv1fO1f
+zbkSxUp57XoQsX3G/1nUfjT2Zujxwvu8D9N74R3I/BsxVTiI4RL2LZj33q+eq0KX
+LG/zBH2DEBheMmQtbMS6Ah+MTSlvG8SDlRRYPEVdYYtXOwskGNyIwcqNTr0j2Mrn
+Zlre0VJQc5r94seoVCjCseio26I9qf0LW2QsGfk4vSMJlhTRkcbBjKABG8xGXv61
++Hd4OFA0e/gOzFZFwDxWEsks5d8w6kzyipdGcCezBhlDi/qNCAex1GVTdUsCbGNS
+9N2i1Cty01AJbrkfWwKCc/Xg/YV/9PVncoiwJSIILllmFvLPu0vRof8AX/4DxEkS
+YFnN2x+qyukW+DfSnC3YSqyKdKtvB0U0Xf4tcHQfX2kHS/PqOIR6F9trY45ZlXoA
+nQKf1vcsIJzHW1mi9SvyVgyp3HftPw5xIU15mHRHBfBEzkVNwZJxyCl6nd++4vMS
+DmzpJPCT/a8rl1Jj5yyQ5zJp06Z7FbPpkT9kiAB5+U/vKw==
+-----END CERTIFICATE-----
blob - /dev/null
blob + 011750bb0cb54cebb91a3672d4cfb3e6aea6dd60 (mode 644)
--- /dev/null
+++ src/testsuite/ssl/dhparams-my-first-domain-tld.pem
@@ -0,0 +1,77 @@
+
+Recommended key length: 256 bits
+
+generator:
+ 39:76:54:fb:49:4c:58:2c:f6:62:3a:81:d1:1e:ef:55
+ 97:da:5a:9c:f8:11:e4:23:26:91:e2:d4:14:94:14:e1
+ d2:82:69:b6:f0:2e:af:08:cc:bc:21:0d:e5:a7:40:f9
+ 8d:18:a2:52:6a:41:de:57:c7:17:0d:23:b9:36:3c:33
+ ef:ff:0b:85:b1:a9:59:65:49:46:36:3b:57:e4:b7:91
+ 4b:6c:56:1a:47:44:d8:5b:8a:bd:93:93:41:81:01:9d
+ 31:8d:3d:b8:a6:6c:7e:48:aa:86:b6:68:eb:66:0b:f3
+ 42:58:c5:ef:65:75:9d:8d:0f:18:21:25:86:40:a6:fd
+ 23:15:58:82:57:df:b6:0d:e5:c9:f1:85:ef:ec:ae:4a
+ b4:1b:70:ac:f5:c8:75:57:d6:4b:17:ca:f1:a1:45:13
+ c0:e7:2b:b9:26:92:c0:a1:c4:ba:87:4e:b7:37:2f:6c
+ 02:51:86:95:2d:f3:c1:7e:c1:f7:00:52:00:0d:43:f2
+ aa:8d:af:f6:5a:4f:a8:65:a5:26:af:58:fa:5d:fb:77
+ 42:e2:1e:19:f5:0f:8a:f2:9b:6b:9a:c0:2c:60:4f:45
+ da:9c:54:97:67:6a:e3:62:b9:c1:a0:3d:bf:cb:aa:22
+ 23:3b:08:bc:29:6a:a5:91:5e:76:1b:60:1d:c2:02:85
+ 2e:c6:85:20:5a:6e:0b:84:e3:e3:88:4e:c5:48:f3:c8
+ c1:71:b0:22:22:70:00:27:99:c6:dc:50:62:2d:be:55
+ 65:af:60:d7:43:44:2f:97:72:a2:66:48:fa:ee:af:7a
+ 81:cc:77:97:95:61:74:37:44:f2:b9:8e:9a:90:e4:45
+ 89:69:66:fe:52:fe:82:d2:de:4c:11:64:a2:c3:6e:00
+ e4:a7:58:4f:e9:61:0d:d2:72:a1:fb:72:89:84:73:64
+ de:1a:2c:0f:7e:46:5f:73:f6:67:3f:14:86:1c:90:bf
+ 49:d6:d1:3c:6a:6a:8b:42:29:22:02:47:c4:b9:bb:64
+
+
+prime:
+ 90:cb:d2:ec:9f:0c:6c:69:f5:c0:46:e1:9c:fc:4d:3b
+ ff:65:40:32:66:d5:fa:e0:ee:88:7d:35:ad:5e:1a:37
+ 07:db:c0:ed:a4:b2:94:ed:41:b4:be:be:35:e3:36:ff
+ 04:c2:48:4d:f0:e9:d2:54:54:de:10:4b:1c:6b:0e:e6
+ 8f:c1:8a:9f:9d:e2:f0:9e:35:52:b7:2a:29:5e:e1:95
+ c0:e0:6e:2b:a9:eb:00:fb:fe:90:d9:aa:02:2d:52:e5
+ 09:fe:5a:e9:5e:73:e1:94:d1:a5:a1:f5:3b:97:e8:53
+ 67:ea:86:a7:f2:70:5c:31:7f:ed:23:f1:ce:01:62:e5
+ 0c:7b:7c:18:67:ec:42:35:e8:d1:3d:e1:74:f9:77:02
+ fb:8d:24:a7:bf:3a:38:36:cf:82:9e:90:b2:7c:c3:f3
+ d3:e4:f1:55:ca:4b:1e:5e:50:b9:3b:d8:6a:6c:c2:51
+ a9:a7:e2:86:02:ef:7b:c2:d1:80:e2:dd:e0:7c:e2:03
+ e5:b1:e9:5b:45:c7:56:bb:37:56:9a:4a:0e:7e:b6:f6
+ a5:95:ef:93:5f:f9:38:16:e3:73:b5:68:a7:98:15:a2
+ 6c:ff:6b:2e:89:f7:9f:f8:a9:d7:ce:a4:9a:de:cb:42
+ 90:40:7b:fe:6c:3a:e0:4c:42:fe:0c:af:4e:7f:37:be
+ fd:3b:31:17:f6:30:0d:52:a5:ca:19:c3:c6:a4:dc:48
+ ec:59:02:6e:5a:80:b8:09:7d:3d:9a:00:32:7a:d7:fe
+ 84:38:12:22:7f:c6:97:88:91:05:7f:ba:74:2b:8c:36
+ a0:e4:d7:1c:22:2f:0b:6a:cb:a8:71:40:d2:b1:ed:9f
+ 43:79:2f:a6:34:7d:c0:65:c4:04:fa:d4:5c:14:7c:4b
+ 6f:cb:b2:f8:f0:91:05:33:b7:23:58:e8:4d:ff:3f:ef
+ a4:f3:17:78:9b:5b:f6:f1:49:82:12:de:5d:f7:1d:47
+ 1e:08:7f:ee:2d:10:68:f8:a5:97:03:9d:32:d2:9c:b7
+
+
+
+-----BEGIN DH PARAMETERS-----
+MIIDDQKCAYEAkMvS7J8MbGn1wEbhnPxNO/9lQDJm1frg7oh9Na1eGjcH28DtpLKU
+7UG0vr414zb/BMJITfDp0lRU3hBLHGsO5o/Bip+d4vCeNVK3Kile4ZXA4G4rqesA
++/6Q2aoCLVLlCf5a6V5z4ZTRpaH1O5foU2fqhqfycFwxf+0j8c4BYuUMe3wYZ+xC
+NejRPeF0+XcC+40kp786ODbPgp6QsnzD89Pk8VXKSx5eULk72GpswlGpp+KGAu97
+wtGA4t3gfOID5bHpW0XHVrs3VppKDn629qWV75Nf+TgW43O1aKeYFaJs/2suifef
++KnXzqSa3stCkEB7/mw64ExC/gyvTn83vv07MRf2MA1SpcoZw8ak3EjsWQJuWoC4
+CX09mgAyetf+hDgSIn/Gl4iRBX+6dCuMNqDk1xwiLwtqy6hxQNKx7Z9DeS+mNH3A
+ZcQE+tRcFHxLb8uy+PCRBTO3I1joTf8/76TzF3ibW/bxSYIS3l33HUceCH/uLRBo
++KWXA50y0py3AoIBgDl2VPtJTFgs9mI6gdEe71WX2lqc+BHkIyaR4tQUlBTh0oJp
+tvAurwjMvCEN5adA+Y0YolJqQd5XxxcNI7k2PDPv/wuFsalZZUlGNjtX5LeRS2xW
+GkdE2FuKvZOTQYEBnTGNPbimbH5Iqoa2aOtmC/NCWMXvZXWdjQ8YISWGQKb9IxVY
+glfftg3lyfGF7+yuSrQbcKz1yHVX1ksXyvGhRRPA5yu5JpLAocS6h063Ny9sAlGG
+lS3zwX7B9wBSAA1D8qqNr/ZaT6hlpSavWPpd+3dC4h4Z9Q+K8ptrmsAsYE9F2pxU
+l2dq42K5waA9v8uqIiM7CLwpaqWRXnYbYB3CAoUuxoUgWm4LhOPjiE7FSPPIwXGw
+IiJwACeZxtxQYi2+VWWvYNdDRC+XcqJmSPrur3qBzHeXlWF0N0TyuY6akORFiWlm
+/lL+gtLeTBFkosNuAOSnWE/pYQ3ScqH7comEc2TeGiwPfkZfc/ZnPxSGHJC/SdbR
+PGpqi0IpIgJHxLm7ZAICAQA=
+-----END DH PARAMETERS-----
blob - /dev/null
blob + a15886108d8c8fdde6ffffa0045ff8d73bec94e5 (mode 644)
--- /dev/null
+++ src/testsuite/ssl/dhparams-my-second-domain-tld.pem
@@ -0,0 +1,77 @@
+
+Recommended key length: 256 bits
+
+generator:
+ da:16:f5:61:0c:09:de:cd:9b:be:b8:2b:c9:96:97:1b
+ fc:29:b2:a5:1b:ee:d3:36:bd:6c:73:7e:1c:2a:35:71
+ 26:c6:54:b6:28:24:db:87:9d:fc:9e:26:28:e9:01:b8
+ 85:f2:02:9b:6a:c3:f5:3a:85:ae:1d:8c:e9:e8:c4:41
+ 3a:78:2f:9e:f0:2a:77:18:99:a6:91:2b:2b:8c:10:98
+ 89:04:d9:03:5f:4f:77:d6:27:1d:5e:ee:a2:d0:b1:c8
+ a7:64:b4:7a:67:5f:aa:3f:02:b0:d2:f7:cd:4c:7a:9d
+ 63:57:99:8c:89:17:3f:2d:2d:1d:f5:58:61:49:62:54
+ 55:17:be:ea:43:03:44:d7:02:39:67:26:b3:7a:4f:00
+ a3:a1:3b:d9:f3:aa:7a:c5:00:46:86:92:e2:2e:d8:09
+ ee:ca:97:06:c5:33:e5:99:f3:4c:46:81:50:59:6b:60
+ fb:a3:24:2a:f8:8f:e0:fb:a5:c3:9a:7d:f7:f2:d7:30
+ e5:1b:fa:15:a0:ca:6d:f5:64:4f:20:a3:fb:f4:31:55
+ b5:58:c4:6f:06:7d:5d:36:16:03:31:73:57:6b:39:c6
+ 10:21:d9:f0:eb:74:43:2e:b0:da:ee:96:86:6e:0c:b5
+ 08:78:af:3d:9b:66:71:bc:05:63:9d:aa:a6:2e:bc:c9
+ c0:e4:a4:c6:60:e8:5d:d2:96:55:a3:72:4e:7a:ec:b2
+ a8:23:b9:3f:7c:33:5d:f0:5f:29:57:cd:8e:9a:fd:7b
+ b6:83:7f:56:ba:64:bd:a8:1c:83:7f:ee:04:f1:bb:1f
+ 70:6d:08:46:a2:95:e6:6e:2a:54:44:d9:af:9d:22:a4
+ 50:6d:88:65:de:05:89:99:75:7e:0c:12:d9:25:43:f7
+ da:b6:41:f8:60:68:f7:6a:f6:a4:8d:8b:93:82:87:56
+ c1:80:4d:e6:66:37:1e:22:5c:86:90:d1:8e:02:3a:18
+ 34:84:6a:da:e5:4f:a5:4f:29:78:46:97:71:24:80:92
+
+
+prime:
+ f8:98:84:b9:b2:75:39:d5:da:14:fa:4a:03:96:57:78
+ 95:4e:8c:ba:c3:89:de:36:2c:4a:2b:0a:31:08:09:89
+ bb:f6:00:a1:0b:64:02:52:1e:3f:23:67:df:2c:97:7a
+ 7a:81:e0:b0:ae:00:bf:a6:8f:02:e1:62:d4:dc:9e:62
+ 9a:27:f2:cf:4f:88:73:96:de:8a:61:1c:ac:3f:bb:f3
+ 0d:be:5e:07:3b:6f:da:0c:10:03:b5:b2:5a:60:3e:c8
+ 6f:aa:2c:3e:92:b9:ec:ee:08:29:90:c3:5e:8e:c1:a4
+ a7:1a:ab:87:f8:70:13:e8:b1:2f:b5:79:c1:bb:8f:21
+ 76:b4:1f:ba:91:62:f9:d3:3a:d7:c8:23:00:3e:fe:a5
+ 49:51:f8:eb:9f:46:e3:7d:1a:d3:54:a1:3a:d1:4b:05
+ ec:77:6e:80:dc:1b:22:e1:36:2a:a1:75:20:8c:48:bd
+ 53:a6:24:c0:b2:47:36:51:0d:69:b3:cc:e6:fe:8c:34
+ 0e:1f:16:03:af:81:b7:62:11:a8:82:06:c2:70:00:23
+ fe:0e:e0:fa:a1:e7:3d:cc:81:ae:76:f4:3e:66:84:df
+ 3f:63:ba:4e:aa:21:1d:5c:a2:a2:55:0e:53:31:40:7d
+ 7a:99:20:77:23:82:0c:a7:b3:1b:dd:13:fc:23:5f:6d
+ 58:6c:a7:1f:f6:1a:7c:2a:57:31:c1:10:7b:f1:54:a9
+ 8c:49:7f:17:14:5f:a4:69:16:11:6c:7d:1d:eb:d4:88
+ ab:6b:f8:8d:8b:be:0d:45:c7:7b:04:4f:a3:5f:f4:4f
+ 83:12:0c:00:73:5d:57:02:0c:95:b6:ce:70:60:52:80
+ 05:79:55:ed:99:e3:0c:23:dc:23:cd:9b:d3:a5:8e:4d
+ 94:c8:61:2d:56:b1:15:19:ca:b2:2c:76:7c:89:04:44
+ 18:5c:72:1e:03:9b:e0:dd:69:44:9f:68:0d:c4:2a:34
+ 5e:bd:4f:6c:14:41:93:08:0d:4b:4d:de:97:41:9b:8d
+
+
+
+-----BEGIN DH PARAMETERS-----
+MIIDDgKCAYEA+JiEubJ1OdXaFPpKA5ZXeJVOjLrDid42LEorCjEICYm79gChC2QC
+Uh4/I2ffLJd6eoHgsK4Av6aPAuFi1NyeYpon8s9PiHOW3ophHKw/u/MNvl4HO2/a
+DBADtbJaYD7Ib6osPpK57O4IKZDDXo7BpKcaq4f4cBPosS+1ecG7jyF2tB+6kWL5
+0zrXyCMAPv6lSVH4659G430a01ShOtFLBex3boDcGyLhNiqhdSCMSL1TpiTAskc2
+UQ1ps8zm/ow0Dh8WA6+Bt2IRqIIGwnAAI/4O4Pqh5z3Mga529D5mhN8/Y7pOqiEd
+XKKiVQ5TMUB9epkgdyOCDKezG90T/CNfbVhspx/2GnwqVzHBEHvxVKmMSX8XFF+k
+aRYRbH0d69SIq2v4jYu+DUXHewRPo1/0T4MSDABzXVcCDJW2znBgUoAFeVXtmeMM
+I9wjzZvTpY5NlMhhLVaxFRnKsix2fIkERBhcch4Dm+DdaUSfaA3EKjRevU9sFEGT
+CA1LTd6XQZuNAoIBgQDaFvVhDAnezZu+uCvJlpcb/CmypRvu0za9bHN+HCo1cSbG
+VLYoJNuHnfyeJijpAbiF8gKbasP1OoWuHYzp6MRBOngvnvAqdxiZppErK4wQmIkE
+2QNfT3fWJx1e7qLQscinZLR6Z1+qPwKw0vfNTHqdY1eZjIkXPy0tHfVYYUliVFUX
+vupDA0TXAjlnJrN6TwCjoTvZ86p6xQBGhpLiLtgJ7sqXBsUz5ZnzTEaBUFlrYPuj
+JCr4j+D7pcOafffy1zDlG/oVoMpt9WRPIKP79DFVtVjEbwZ9XTYWAzFzV2s5xhAh
+2fDrdEMusNruloZuDLUIeK89m2ZxvAVjnaqmLrzJwOSkxmDoXdKWVaNyTnrssqgj
+uT98M13wXylXzY6a/Xu2g39WumS9qByDf+4E8bsfcG0IRqKV5m4qVETZr50ipFBt
+iGXeBYmZdX4MEtklQ/fatkH4YGj3avakjYuTgodWwYBN5mY3HiJchpDRjgI6GDSE
+atrlT6VPKXhGl3EkgJICAgEA
+-----END DH PARAMETERS-----
blob - /dev/null
blob + 667ffacce405714903959148f463c558c47ac007 (mode 644)
--- /dev/null
+++ src/testsuite/ssl/key-my-first-domain-tld.pem
@@ -0,0 +1,182 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: High (3072 bits)
+
+modulus:
+ 00:9d:c7:bc:02:03:43:12:ff:a3:bc:a8:7a:63:07:e4
+ e6:44:5f:21:53:43:f4:3c:df:c5:18:d2:55:db:58:16
+ f4:2e:cc:fd:7e:dd:14:16:db:bf:49:26:9b:1c:b2:c9
+ 1d:03:04:f7:d2:32:95:e6:22:33:08:b4:63:7a:2a:0c
+ 25:59:a7:a7:aa:78:a4:bb:31:34:48:a2:dd:83:d6:6e
+ 13:42:c2:b5:dd:d0:2f:64:e6:84:60:fb:25:b5:db:05
+ 0c:23:fb:e6:cd:3b:b4:3a:7d:69:86:2c:1c:3b:0d:84
+ 7b:bc:2f:15:1a:72:19:9b:df:be:3b:fe:fd:44:d5:31
+ 99:4f:90:52:9f:31:b1:12:c4:28:d6:fc:ca:28:ca:4c
+ 6e:37:2d:d5:dd:f3:75:04:41:d6:8f:eb:e8:19:5a:3f
+ 29:13:01:a0:75:0e:43:3b:18:e3:9d:b6:9a:e1:3b:f4
+ a1:3d:b7:d7:2f:e0:47:82:57:4f:6f:16:e8:ba:5e:cd
+ 4e:dd:6b:d8:27:ea:16:6c:f8:3e:2e:0f:6c:2a:ee:bf
+ 41:d5:1b:c3:7c:7a:03:7a:25:bf:34:52:ec:0e:88:27
+ 0c:07:16:3d:ba:10:a1:e9:93:e8:67:db:9f:98:60:0b
+ 86:48:03:d2:b9:6d:fe:c4:1f:29:0d:04:22:6c:f1:f1
+ c0:bf:eb:3b:d2:7c:94:34:59:ac:cb:a7:fc:02:22:69
+ 0f:41:9c:0a:9b:f5:3a:44:c1:d6:b6:d8:47:83:8a:49
+ 46:c6:05:e6:b2:f6:f9:83:2a:79:b4:dc:1b:ae:79:f9
+ f8:10:9b:d1:08:f9:97:00:a9:62:1b:9e:88:06:03:4e
+ 3a:a1:2d:57:ef:cd:39:a2:00:68:ec:e3:cc:94:9d:7d
+ 36:3c:4e:73:7c:92:f5:d5:e5:93:a8:44:7b:40:0a:48
+ 20:ae:b3:2e:25:23:88:1c:19:dd:a0:c2:60:2d:5e:9d
+ e2:65:59:05:06:c5:2c:98:17:b7:c7:9b:04:00:45:55
+ c9:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 45:26:8b:e4:c9:ef:34:bd:6b:d2:bc:78:5f:3c:cf:7a
+ 88:4e:b5:39:5c:18:08:31:fe:9d:21:5a:55:b6:e6:e0
+ 80:3e:81:7f:7f:7f:55:81:5b:f5:c0:80:cc:f4:22:a6
+ 9f:73:26:f6:2e:0b:7a:80:54:a3:a5:03:d0:3f:eb:70
+ d7:39:5e:87:9d:36:7d:80:54:2c:dd:8c:7e:42:95:9d
+ c5:6d:b6:ed:8f:57:a6:3e:4d:98:7f:9a:08:79:04:5e
+ 4c:cb:13:5d:b1:a4:0c:da:78:4c:40:ba:e2:ba:ca:ec
+ bc:0e:5a:8e:6b:a1:83:aa:6d:22:b8:5f:e2:32:19:f9
+ da:60:23:85:f7:ee:66:8e:28:64:09:08:c5:15:dc:a7
+ 95:71:76:41:3f:79:72:b3:34:49:81:98:08:bc:7f:e0
+ 0d:9f:71:e6:bb:a8:85:97:23:f3:34:5b:ef:09:2a:ef
+ 1c:30:9d:94:33:14:c4:30:65:f5:07:32:5a:b4:40:00
+ 77:4e:93:b3:f4:6a:9d:9f:dc:6b:8f:0b:43:81:43:ff
+ d5:43:a9:93:68:f5:ab:2b:b9:8e:36:7b:13:0e:11:51
+ 5f:aa:46:24:a7:3b:19:4d:31:e9:2a:a2:7b:d4:a8:68
+ 38:9e:70:dd:68:9a:a0:f8:f3:27:40:b2:24:1b:80:93
+ 7e:ae:d1:25:6e:90:7d:7f:52:84:a8:46:1b:54:c9:c7
+ 9a:e5:a0:06:94:bd:d4:94:33:c7:25:f4:6c:13:e3:38
+ e0:83:97:51:aa:52:25:06:d9:64:b2:dc:79:53:e5:37
+ 0e:e4:33:e6:f4:bb:10:1a:66:11:9f:86:69:b0:2f:9c
+ b4:f8:89:e6:a4:a1:96:5e:14:3d:a4:24:51:21:98:17
+ 28:46:79:85:75:e6:f4:79:26:8a:db:18:94:35:07:ab
+ de:5f:49:e5:88:02:95:13:d6:ac:ca:e6:4d:65:be:8f
+ a5:f5:27:da:a9:72:b0:d5:6d:9a:4d:45:b6:69:a4:4d
+
+
+prime1:
+ 00:c2:19:9f:3e:b1:d3:f8:18:d0:79:56:3f:6d:d5:67
+ 6b:0b:48:bd:4a:b6:c1:c9:1d:70:b5:ff:73:cf:bc:37
+ 09:e9:b0:15:a6:6c:ff:bd:20:c9:ea:67:09:ce:f7:fe
+ d1:74:c3:d4:4b:87:38:47:9f:7b:b2:77:a3:a2:db:7d
+ 64:d2:77:dc:50:a3:56:2e:44:2a:1c:90:5d:f2:f9:e8
+ 4f:84:43:83:a6:b2:48:c4:dc:26:bd:87:d3:e3:f3:be
+ 20:cb:7e:ce:ea:b7:93:1f:b9:6b:57:ee:73:d7:d6:08
+ 35:b9:10:2f:60:03:e5:68:d5:5d:59:c7:e8:66:7a:51
+ 6a:59:75:71:4a:be:1f:83:9c:01:bc:d0:5c:e5:7b:a6
+ 5d:7f:f2:4a:e0:a2:31:58:c3:5d:c7:a5:2f:19:1e:10
+ 56:c0:fb:83:35:84:c3:d7:ca:f7:3d:9f:1d:95:5e:3f
+ 7d:d9:9d:ef:15:a2:15:c2:ae:ff:92:74:db:92:ae:21
+ 43:
+
+prime2:
+ 00:d0:18:f2:f7:da:77:4a:6f:60:a0:93:92:d6:7e:da
+ bf:86:19:df:70:f5:41:99:eb:13:49:6d:c2:79:7c:51
+ 20:4f:b0:10:01:0d:87:17:90:87:78:41:22:95:f1:72
+ 2b:78:97:c3:12:6a:ca:49:73:50:68:fa:d7:12:56:5e
+ d5:bc:3f:eb:e5:ec:55:82:1b:2d:c8:15:da:d4:63:81
+ 0e:b3:45:bb:1f:52:9b:b6:3a:96:36:87:79:43:cd:58
+ 5d:a4:11:f6:a4:77:5f:9e:df:26:b2:e1:5d:0a:8d:bf
+ 32:9d:52:1e:9b:21:66:ca:45:23:23:f4:04:71:23:9a
+ 4b:19:e3:10:ff:12:9c:90:b5:ae:80:3e:0e:a8:67:64
+ 61:ff:4e:83:db:ae:34:22:94:58:b9:e1:c3:bf:c5:39
+ d2:60:a0:b2:7e:e0:08:92:b7:f2:8c:28:69:2c:9c:97
+ 59:b6:55:d9:0a:ff:c3:d3:b4:a6:eb:5a:55:35:59:26
+ 03:
+
+coefficient:
+ 51:2c:52:fc:45:b3:05:bf:1b:ca:e3:12:a6:b1:20:8a
+ 52:98:d0:87:84:a0:a5:04:12:19:af:13:4c:8c:3c:d7
+ 91:bb:c8:0d:cc:7e:14:89:4c:bf:05:c2:fe:f2:7e:29
+ 5c:5a:3e:37:6e:9f:16:66:5f:93:83:87:c8:e9:3c:0e
+ de:00:44:18:3b:7a:76:d8:fb:32:b2:4b:db:af:c3:11
+ 45:3e:55:ae:ac:94:a5:20:ba:11:d5:4f:01:64:a4:c3
+ 70:af:4b:e9:23:a1:9e:b8:7a:3f:79:27:e1:2b:ff:a8
+ ed:1f:7e:0c:27:11:6e:4d:8c:1f:37:90:a6:98:b9:e3
+ 5a:a5:04:65:5e:36:a6:1b:2e:32:f3:14:0f:94:3b:88
+ be:94:ee:5d:b0:0b:3f:3e:8b:9b:b6:60:5c:94:5c:88
+ 01:54:90:07:8b:69:ab:fe:72:4d:6b:6a:6c:5f:c1:b9
+ 5b:52:ef:c6:38:03:06:0c:25:78:73:d1:e1:db:54:46
+
+
+exp1:
+ 33:25:37:3d:f8:f3:c6:db:1b:0b:ed:fb:16:c0:f5:d8
+ 52:07:df:c1:31:39:0c:fa:91:f9:93:0f:7c:3c:b7:30
+ 08:80:da:a3:98:f3:26:6d:de:66:c2:b1:e5:f4:99:13
+ ae:35:ef:d9:db:0e:ac:68:cc:da:71:06:10:62:cf:be
+ e2:6a:ad:06:1e:94:15:ea:e6:41:d2:94:be:f2:b5:11
+ 46:e3:d7:6b:f4:6c:92:5b:04:66:4a:c5:3d:ba:bb:6d
+ be:d1:72:4a:8d:06:da:84:2c:51:e6:46:66:28:42:cf
+ 8d:2d:43:9e:84:48:4e:00:72:f1:b6:68:79:a0:5f:95
+ ab:6e:f3:e4:63:06:c0:d2:39:ee:fb:e4:8e:9f:af:6d
+ d1:ca:11:8a:f1:92:19:36:99:9e:82:db:4f:3e:09:c6
+ 22:61:e3:e8:15:4c:d9:ae:e4:c9:3b:05:3b:97:b3:19
+ 41:5f:89:61:64:ed:60:f8:65:e5:bc:9f:23:1e:79:2b
+
+
+exp2:
+ 5f:18:97:a7:d6:49:1f:55:e8:85:59:0b:08:44:6e:38
+ 89:d2:b6:fe:4a:c5:d0:cd:d1:41:84:0c:14:32:50:6c
+ 80:9e:07:a2:43:89:51:a6:75:91:e9:ca:21:55:76:04
+ 11:96:e0:c9:40:cd:f2:64:e5:01:24:68:36:74:0b:e0
+ 86:a7:7b:68:d5:e8:79:8d:6c:0d:7c:97:44:e9:b7:e7
+ 7c:db:47:d8:d7:8a:5a:eb:49:0b:e0:3a:f5:56:18:a4
+ aa:3e:9f:44:a7:5c:a6:20:79:f1:d2:f5:0e:c6:99:f2
+ 4a:5c:65:aa:24:c8:71:74:c8:cb:3c:4e:ef:59:02:c0
+ 81:32:f7:e8:68:9b:ed:b1:68:ee:27:ed:d0:dd:76:cd
+ 25:bb:be:9c:1c:6e:ac:c2:b8:0d:31:f3:9f:66:44:b7
+ 33:fb:1b:b6:c9:30:81:c3:d7:ee:5e:e5:39:42:d2:13
+ 68:34:b0:fb:ca:c7:b5:ae:5f:7d:3c:09:a6:58:77:fb
+
+
+
+Public Key PIN:
+ pin-sha256:nCxZsiBRLBQ0Lz6/eXIc9kEBwXZg06i/XORB+NNXVrE=
+Public Key ID:
+ sha256:9c2c59b220512c14342f3ebf79721cf64101c17660d3a8bf5ce441f8d35756b1
+ sha1:5b2df9000451d08f57cd3f86638404ab6338c44b
+
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
blob - /dev/null
blob + 8cfe8d09c3f846d19ce5425a0d51080013381e3c (mode 644)
--- /dev/null
+++ src/testsuite/ssl/key-my-second-domain-tld.pem
@@ -0,0 +1,182 @@
+Public Key Info:
+ Public Key Algorithm: RSA
+ Key Security Level: High (3072 bits)
+
+modulus:
+ 00:e3:ee:38:da:c7:2c:76:a4:9f:e8:ee:14:3b:f4:6c
+ 90:cc:ce:5f:c0:61:0d:c4:b0:ae:11:9e:f7:b8:dd:0a
+ e4:0a:52:a4:ba:39:3d:54:a0:72:b4:0d:d3:24:c4:79
+ 4e:32:18:9f:3f:32:b1:a0:14:25:23:fd:36:97:5e:2d
+ 57:ff:f1:34:0a:ca:8f:86:be:05:9c:cd:4b:59:a9:dd
+ a7:63:81:37:37:b9:10:d0:1e:61:d5:65:4c:c7:e1:55
+ e1:2f:6c:d9:d4:45:d5:68:95:0b:65:55:89:60:0a:8c
+ 5b:c1:8e:39:bb:3e:2b:08:a3:a3:ec:f1:04:64:6c:f7
+ a4:5e:f6:c8:37:5c:c9:02:50:df:99:32:80:a9:aa:85
+ 38:47:f4:22:27:9c:fb:07:80:17:4b:d0:95:72:f7:33
+ 40:a8:94:2e:7d:68:b4:ff:94:41:0e:00:04:79:4d:b7
+ ca:59:cd:1e:8f:fd:61:b2:f7:53:ef:1a:de:70:59:fa
+ 51:78:6b:de:3f:f6:65:da:d9:2c:55:75:ec:d0:24:20
+ b5:e9:de:6e:56:15:ce:3d:35:31:aa:1b:55:6e:7d:fc
+ b1:94:a5:ed:28:43:2d:ab:b7:34:15:5f:70:d9:90:3a
+ 06:c0:68:78:96:87:f6:01:ff:b1:32:30:9b:54:be:a8
+ 0d:b3:cf:a2:85:c6:f1:32:67:0c:fd:c0:56:13:06:28
+ 86:fe:12:10:54:20:42:67:77:fc:fa:65:74:d6:6e:fd
+ 0a:40:eb:78:c2:25:41:ce:e5:d5:05:fe:f1:c6:7f:da
+ 1f:8f:b7:93:2a:e7:8f:b0:ac:50:75:cc:e3:ef:b1:29
+ 16:6a:ee:06:8f:ee:74:5b:37:6d:ab:c3:e5:82:1e:7a
+ af:31:f0:06:9d:2e:ff:e8:08:ca:15:45:b1:98:d5:b1
+ 45:73:17:f9:e8:6c:49:b4:ff:5d:09:d0:9b:cf:1e:a1
+ 40:4b:cd:07:38:26:b3:52:3e:49:55:27:cd:90:a7:5f
+ 6d:
+
+public exponent:
+ 01:00:01:
+
+private exponent:
+ 30:61:85:91:f2:cb:1e:57:ed:55:8d:0b:a0:7a:4e:7d
+ 21:ec:00:69:1e:70:c4:ba:58:08:87:7c:bf:b1:b3:b9
+ 19:f3:d6:e1:6c:7a:f7:36:a3:82:52:98:e9:ea:06:71
+ b1:b2:86:42:ec:e8:c5:38:e1:75:55:2f:3c:4c:12:45
+ e6:9e:f5:54:01:11:1c:21:c3:a1:37:f6:71:8e:db:ec
+ c6:f3:4b:9c:39:5d:37:3f:eb:b6:57:2d:48:14:2d:9d
+ 81:ea:92:06:3b:d8:83:bd:77:50:c8:2a:43:c7:99:69
+ 74:99:52:e9:ca:d5:69:9d:0a:93:a5:c9:2f:e3:ed:60
+ e7:83:6c:96:4b:cc:a3:00:35:a6:18:11:35:72:6b:9a
+ b9:b3:39:78:bd:1a:8f:ca:01:a7:e7:1b:81:ee:b4:e3
+ 59:a5:32:85:0e:2f:b5:3c:6b:de:a3:e4:4f:37:4e:f6
+ d5:be:f3:68:ce:f8:e8:fb:14:c6:e1:26:2c:24:fd:3b
+ dd:4b:70:c1:20:aa:0b:b5:0d:16:a8:45:4c:97:e9:0b
+ 08:97:c3:e9:ae:bf:0b:f7:1c:b1:81:63:ea:f4:72:dd
+ b7:da:5d:ab:21:06:c9:e3:99:3e:6c:c7:15:ca:79:fb
+ 44:7b:77:06:69:d9:59:a2:3c:b0:96:7b:66:6f:48:0c
+ 42:87:9c:df:4b:3a:dc:15:1f:48:0a:eb:b0:b1:38:98
+ 5b:6d:7f:34:ce:43:60:25:64:7c:8d:c0:d1:69:27:b8
+ ac:33:85:be:26:65:98:9f:8a:eb:cf:9a:6b:d7:5b:a3
+ 49:60:f9:ff:fb:5f:67:d9:08:20:a1:d8:d0:20:25:d5
+ 62:f9:d6:07:82:f6:c6:a6:55:65:71:3f:b8:64:b4:bd
+ 35:a9:2d:62:6c:cb:2c:e1:96:f0:9e:40:39:03:3b:10
+ 38:72:ac:af:6e:0a:ba:ea:f5:c1:c0:c6:86:60:58:a9
+ 28:23:6c:dd:8a:f2:84:76:a5:db:ef:f9:29:b9:b4:81
+
+
+prime1:
+ 00:f5:32:7d:80:4d:14:b1:3d:a1:ef:1b:7f:22:87:9f
+ d4:3d:4d:ce:e2:11:96:29:0f:ea:0b:c4:24:9c:9a:fa
+ 8a:4c:9a:5e:cd:48:aa:ce:6d:c0:fd:d4:53:46:1f:06
+ f4:4f:da:2c:e5:f1:cb:19:19:a3:a4:37:11:47:ed:3d
+ fc:4c:b8:f1:93:b8:d8:f7:6a:dd:5c:bd:51:4d:c6:09
+ 27:bc:c9:9a:19:05:0a:e9:00:ec:72:75:7f:89:0d:63
+ 65:e2:89:ac:ce:f1:78:20:0a:b8:fd:fd:a5:88:a7:7c
+ 38:1e:55:7d:16:23:6a:4d:dc:87:56:ef:ff:02:db:bd
+ 1b:61:60:b5:8f:7a:e1:d1:26:e3:2d:d5:21:bb:03:84
+ e2:a8:34:d6:7f:16:61:3c:a2:55:e1:c4:8a:82:61:74
+ e0:63:cb:53:fd:6d:6a:0d:f5:b5:55:e0:ef:83:2a:46
+ 80:7f:85:57:60:d3:b6:c3:2b:ba:af:88:c8:b8:3c:2c
+ a1:
+
+prime2:
+ 00:ed:f8:fc:68:1c:ae:2e:6d:63:f1:8b:6f:85:5c:5b
+ ba:3e:68:f9:61:03:44:60:83:90:26:8e:4c:8b:e0:49
+ c1:5a:a1:5c:e5:f1:67:43:0b:f6:b5:29:84:40:a8:0f
+ e8:bf:bf:62:7e:33:ca:86:a2:c4:47:3b:4a:d6:9c:09
+ a0:bb:10:00:ec:e6:81:f2:bc:86:3f:58:4d:3a:a4:98
+ 94:7e:5d:43:7d:33:3f:53:76:55:d1:73:a4:1f:fb:76
+ 75:92:70:8e:82:68:d8:f4:f7:b7:36:fa:3e:cc:a7:7a
+ fc:a4:7b:8c:72:b4:83:d7:ce:d8:f8:b2:35:ce:36:59
+ 7e:95:55:b8:c4:a9:44:26:a1:fe:be:f4:b9:67:bc:12
+ c8:e7:c3:0b:8a:51:b6:5c:1b:77:58:1f:53:ac:30:41
+ 43:5f:97:a2:fd:70:ac:4a:91:e0:bc:f6:4f:b1:06:47
+ 2d:89:77:ae:59:e0:5a:e2:31:c7:d9:a6:10:b8:7e:13
+ 4d:
+
+coefficient:
+ 2a:54:f9:93:b2:32:7a:c4:b6:41:0e:1a:8a:0e:d9:db
+ 4b:02:68:8d:15:10:84:42:ba:c9:35:e5:6d:ac:8e:ca
+ 47:5d:6f:fe:e4:81:c6:ce:ab:7c:b8:5a:59:12:96:a4
+ 0b:af:fb:d0:d7:e2:92:60:1b:81:05:4f:43:4c:5c:98
+ e1:84:a8:6e:bf:ad:cc:ac:de:26:d5:a8:58:09:45:ec
+ 38:d8:5d:ec:a7:39:46:88:d1:cc:ea:b9:13:5c:9d:bb
+ db:69:d0:a7:e4:0e:33:b1:71:eb:13:14:28:72:45:b0
+ 71:05:2a:a1:45:26:6c:a1:35:bf:a8:b0:1d:01:80:d9
+ af:66:71:3a:f4:e4:3c:fe:e8:68:2b:aa:64:a7:43:f3
+ 7f:38:4b:51:a1:ed:73:69:52:30:25:b8:62:5b:c7:cd
+ 02:f5:6f:4a:21:94:cb:29:44:76:f0:f8:96:50:57:33
+ 8c:eb:7b:08:70:fc:bc:fd:69:c1:3a:3a:82:5a:4c:15
+
+
+exp1:
+ 71:83:42:5e:97:50:b1:0d:1b:5e:9a:98:2c:e0:24:ba
+ 18:f7:60:83:80:28:c8:31:b9:e4:60:95:a2:7a:8c:ea
+ 61:b4:45:97:3b:c0:f7:78:10:14:72:ab:6a:97:0a:9d
+ 28:2a:95:06:8e:fd:bb:4d:07:59:0a:b5:51:5b:1f:8b
+ 21:e9:ac:cc:fa:92:57:58:7d:ca:65:4a:b2:7a:af:da
+ 59:a7:eb:53:11:e6:8f:20:02:56:aa:d6:b4:18:22:a0
+ 14:54:30:50:4d:b1:93:03:e3:c8:92:18:84:3f:25:5e
+ c5:8c:46:30:6d:8c:d5:26:f6:f0:e4:82:66:4c:5c:2b
+ c4:d5:04:b8:bb:e6:b6:f1:0d:d3:36:0c:3b:8b:d1:85
+ 2c:e1:e9:3b:44:9d:17:78:ff:d1:59:2f:d6:54:4f:cb
+ 61:e7:cb:a6:53:74:f9:a9:7a:9d:9b:58:c6:9c:57:af
+ 3d:59:f9:ad:b5:d5:b2:5d:18:3c:13:52:f9:17:c2:81
+
+
+exp2:
+ 10:56:1e:65:bb:4a:4d:cf:9e:a3:cf:51:a9:93:0c:8c
+ fd:89:d1:4c:d2:9f:98:0c:90:11:c5:85:05:b9:30:f7
+ 00:14:c1:be:db:52:9e:6c:ac:d4:04:f4:9a:47:af:47
+ e8:19:e8:56:07:92:28:a9:f5:d5:7a:01:8a:38:0e:05
+ 25:b2:54:8d:ee:c9:0e:f3:d8:37:73:05:62:38:38:6d
+ 41:3b:7f:cd:91:7e:10:69:b8:3c:77:b6:d5:a7:3a:9b
+ 99:a0:f6:77:87:61:15:78:07:f0:d3:3f:0a:67:98:ee
+ cd:0f:da:35:69:a4:ff:64:a8:ca:71:d9:75:bd:8f:69
+ 3c:31:35:4c:f2:dd:c5:d5:2b:1a:ca:cc:0b:8e:02:b0
+ 1e:10:ea:b2:e5:27:22:ad:94:04:cd:a9:bd:d1:56:39
+ 9c:cf:59:16:12:ed:10:f5:70:bb:28:21:92:62:7e:f2
+ 66:54:7b:f8:99:89:43:ab:ed:2f:48:d2:2f:08:20:a5
+
+
+
+Public Key PIN:
+ pin-sha256:NiuGB0c98aUqMKk4SVQIIwXNglOf+6m1LuVn6aQ2A1U=
+Public Key ID:
+ sha256:362b8607473df1a52a30a9384954082305cd82539ffba9b52ee567e9a4360355
+ sha1:7678d9a20624ec92b6d458f635f630aed2732b51
+
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
blob - /dev/null
blob + b9043f4354c3a50c777c877f01ef32571e786bbd (mode 755)
--- /dev/null
+++ src/testsuite/start-server3
@@ -0,0 +1,6 @@
+#!/bin/sh
+# ngIRCd Test Suite
+
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+${srcdir}/start-server.sh 3
+# -eof-
blob - /dev/null
blob + d7487693fb322d676844a8ffebdd2c958bb718f5 (mode 755)
--- /dev/null
+++ src/testsuite/stop-server3
@@ -0,0 +1,7 @@
+#!/bin/sh
+# ngIRCd Test Suite
+
+[ -z "$srcdir" ] && srcdir=`dirname $0`
+${srcdir}/stop-server.sh 3
+
+# -eof-
blob - /dev/null
blob + 3b23958b71bd2bd4d89c347cf2c1eae2528e6b73 (mode 755)
--- /dev/null
+++ src/testsuite/switch-server3
@@ -0,0 +1,5 @@
+#!/bin/sh
+cp ssl/cert-my-second-domain-tld.pem ssl/cert.pem
+cp ssl/key-my-second-domain-tld.pem ssl/key.pem
+cp ssl/dhparams-my-second-domain-tld.pem ssl/dhparams.pem
+# -eof-
IRCNow