summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/src/Ice/Network.cpp16
-rwxr-xr-xcpp/src/Ice/Network.h3
-rw-r--r--cpp/src/IceSSL/OpenSSLTransceiverI.cpp23
-rw-r--r--cpp/src/IceSSL/SSLEngine.cpp98
-rw-r--r--cpp/src/IceSSL/SecureTransportTransceiverI.cpp8
-rw-r--r--cpp/src/IceSSL/UWPTransceiverI.cpp11
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.p12bin3948 -> 0 bytes
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.pem52
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1_key.pem60
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.p12bin3948 -> 0 bytes
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.pem52
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2_key.pem60
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3_key.pem30
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4_key.pem30
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5_key.pem30
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6_key.pem30
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7_key.pem30
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8.pem28
-rw-r--r--cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8_key.pem30
-rwxr-xr-xcpp/test/IceSSL/certs/makecerts.py18
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn1.p12bin2892 -> 2892 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn1_priv.pem55
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn1_pub.pem52
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn2.p12bin2892 -> 2892 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn2_priv.pem55
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn2_pub.pem52
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn3.p12bin0 -> 2908 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn3_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn3_pub.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn4.p12bin0 -> 2916 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn4_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn4_pub.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn5.p12bin0 -> 2916 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn5_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn5_pub.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn6.p12bin0 -> 2908 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn6_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn6_pub.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn7.p12bin0 -> 2908 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn7_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn7_pub.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn8.p12bin0 -> 2892 bytes
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn8_priv.pem28
-rw-r--r--cpp/test/IceSSL/certs/s_rsa_ca1_cn8_pub.pem28
-rw-r--r--cpp/test/IceSSL/configuration/AllTests.cpp177
50 files changed, 1170 insertions, 306 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index c64d9fa7cb2..05abc9528f9 100755
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -3056,3 +3056,19 @@ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
}
}
#endif
+
+
+bool
+IceInternal::isIpAddress(const string& name)
+{
+#ifdef ICE_OS_UWP
+ HostName^ hostname = ref new HostName(ref new String(stringToWstring(name,
+ getProcessStringConverter()).c_str()));
+ return hostname->Type == HostNameType::Ipv4 || hostname->Type == HostNameType::Ipv6;
+#else
+ in_addr addr;
+ in6_addr addr6;
+
+ return inet_pton(AF_INET, name.c_str(), &addr) > 0 || inet_pton(AF_INET6, name.c_str(), &addr6) > 0;
+#endif
+} \ No newline at end of file
diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h
index 9a5099a9eb3..df07941f73d 100755
--- a/cpp/src/Ice/Network.h
+++ b/cpp/src/Ice/Network.h
@@ -368,6 +368,9 @@ ICE_API void runSync(Windows::Foundation::IAsyncAction^ action);
ICE_API void doConnectAsync(SOCKET, const Address&, const Address&, AsyncInfo&);
ICE_API void doFinishConnectAsync(SOCKET, AsyncInfo&);
#endif
+
+ICE_API bool isIpAddress(const std::string&);
+
}
#endif
diff --git a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
index e2a48cf7eea..0f8359f3638 100644
--- a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
+++ b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
@@ -20,6 +20,7 @@
#include <Ice/LoggerUtil.h>
#include <Ice/Buffer.h>
#include <Ice/LocalException.h>
+#include <Ice/Network.h>
#ifdef ICE_USE_OPENSSL
@@ -97,9 +98,6 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
if(!_ssl)
{
- //
- // This static_cast is necessary due to 64bit windows. There SOCKET is a non-int type.
- //
SOCKET fd = _delegate->getNativeInfo()->fd();
if(fd == INVALID_SOCKET)
{
@@ -154,6 +152,25 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
assert(false);
}
}
+
+ //
+ // Hostname verification was included in OpenSSL 1.0.2
+ //
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if(_engine->getCheckCertName() && !_host.empty() && (sslVerifyMode & SSL_VERIFY_PEER))
+ {
+ X509_VERIFY_PARAM* param = SSL_get0_param(_ssl);
+ if(IceInternal::isIpAddress(_host))
+ {
+ X509_VERIFY_PARAM_set1_ip_asc(param, _host.c_str());
+ }
+ else
+ {
+ X509_VERIFY_PARAM_set1_host(param, _host.c_str(), 0);
+ }
+ }
+#endif
+
SSL_set_verify(_ssl, sslVerifyMode, IceSSL_opensslVerifyCallback);
}
}
diff --git a/cpp/src/IceSSL/SSLEngine.cpp b/cpp/src/IceSSL/SSLEngine.cpp
index 2bc0b574627..c8342073d35 100644
--- a/cpp/src/IceSSL/SSLEngine.cpp
+++ b/cpp/src/IceSSL/SSLEngine.cpp
@@ -132,12 +132,14 @@ IceSSL::SSLEngine::verifyPeer(const string& address, const NativeConnectionInfoP
{
const CertificateVerifierPtr verifier = getCertificateVerifier();
-#if !defined(ICE_USE_SECURE_TRANSPORT_IOS)
+#if defined(ICE_USE_SCHANNEL) || \
+ (defined(ICE_USE_OPENSSL) && defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10002000L)
+
//
// For an outgoing connection, we compare the proxy address (if any) against
// fields in the server's certificate (if any).
//
- if(!info->nativeCerts.empty() && !address.empty())
+ if(_checkCertName && !info->nativeCerts.empty() && !address.empty())
{
const CertificatePtr cert = info->nativeCerts[0];
//
@@ -159,82 +161,56 @@ IceSSL::SSLEngine::verifyPeer(const string& address, const NativeConnectionInfoP
}
}
- //
- // Compare the peer's address against the common name.
- //
bool certNameOK = false;
string dn;
+ bool isIpAddress = IceInternal::isIpAddress(address);
string addrLower = IceUtilInternal::toLower(address);
- {
- DistinguishedName d = cert->getSubjectDN();
- dn = IceUtilInternal::toLower(string(d));
- string cn = "cn=" + addrLower;
- string::size_type pos = dn.find(cn);
- if(pos != string::npos)
- {
- //
- // Ensure we match the entire common name.
- //
- certNameOK = (pos + cn.size() == dn.size()) || (dn[pos + cn.size()] == ',');
- }
- }
-
//
- // Compare the peer's address against the dnsName and ipAddress
- // values in the subject alternative name.
+ // If address is and IP address compare it to the subject alt name IP adddress
//
- if(!certNameOK)
+ if(isIpAddress)
{
certNameOK = find(ipAddresses.begin(), ipAddresses.end(), addrLower) != ipAddresses.end();
}
- if(!certNameOK)
- {
- certNameOK = find(dnsNames.begin(), dnsNames.end(), addrLower) != dnsNames.end();
- }
-
- //
- // Log a message if the name comparison fails. If CheckCertName is defined,
- // we also raise an exception to abort the connection. Don't log a message if
- // CheckCertName is not defined and a verifier is present.
- //
- if(!certNameOK && (_checkCertName || (_securityTraceLevel >= 1 && !verifier)))
+ else
{
- ostringstream ostr;
- ostr << "IceSSL: ";
- if(!_checkCertName)
+ //
+ // If subjectAlt is empty compare it ot the subject CN, othewise
+ // compare it to the to the subject alt name dnsNames
+ //
+ if(dnsNames.empty())
{
- ostr << "ignoring ";
+ DistinguishedName d = cert->getSubjectDN();
+ dn = IceUtilInternal::toLower(string(d));
+ string cn = "cn=" + addrLower;
+ string::size_type pos = dn.find(cn);
+ if(pos != string::npos)
+ {
+ //
+ // Ensure we match the entire common name.
+ //
+ certNameOK = (pos + cn.size() == dn.size()) || (dn[pos + cn.size()] == ',');
+ }
}
- ostr << "certificate validation failure:\npeer certificate does not have `" << address
- << "' as its commonName or in its subjectAltName extension";
- if(!dn.empty())
+ else
{
- ostr << "\nSubject DN: " << dn;
+ certNameOK = find(dnsNames.begin(), dnsNames.end(), addrLower) != dnsNames.end();
}
- if(!dnsNames.empty())
+ }
+
+ if(!certNameOK)
+ {
+ ostringstream ostr;
+ ostr << "IceSSL: certificate validation failure: ";
+ if(isIpAddress)
{
- ostr << "\nDNS names found in certificate: ";
- for(vector<string>::const_iterator p = dnsNames.begin(); p != dnsNames.end(); ++p)
- {
- if(p != dnsNames.begin())
- {
- ostr << ", ";
- }
- ostr << *p;
- }
+ ostr << "IP address mismatch";
}
- if(!ipAddresses.empty())
+ else
{
- ostr << "\nIP addresses found in certificate: ";
- for(vector<string>::const_iterator p = ipAddresses.begin(); p != ipAddresses.end(); ++p)
- {
- if(p != ipAddresses.begin())
- {
- ostr << ", ";
- }
- ostr << *p;
- }
+ ostr << "Hostname mismatch";
}
+
string msg = ostr.str();
if(_securityTraceLevel >= 1)
{
diff --git a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
index 5de85f884c2..123d5a09a22 100644
--- a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
+++ b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp
@@ -117,12 +117,11 @@ checkTrustResult(SecTrustRef trust, const SecureTransportEnginePtr& engine, cons
throw SecurityException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" + errorToString(err));
}
-#if defined(ICE_USE_SECURE_TRANSPORT_IOS)
+ //
+ // Add SSL trust policy if we need to check the certificate name.
+ //
if(engine->getCheckCertName() && !host.empty())
{
- //
- // Add SSL trust policy if we need to check the certificate name.
- //
UniqueRef<SecPolicyRef> policy(SecPolicyCreateSSL(false, toCFString(host)));
UniqueRef<CFArrayRef> policies;
if((err = SecTrustCopyPolicies(trust, &policies.get())))
@@ -136,7 +135,6 @@ checkTrustResult(SecTrustRef trust, const SecureTransportEnginePtr& engine, cons
throw SecurityException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" + errorToString(err));
}
}
-#endif
//
// Evaluate the trust
diff --git a/cpp/src/IceSSL/UWPTransceiverI.cpp b/cpp/src/IceSSL/UWPTransceiverI.cpp
index b58a688733f..91945bd7fce 100644
--- a/cpp/src/IceSSL/UWPTransceiverI.cpp
+++ b/cpp/src/IceSSL/UWPTransceiverI.cpp
@@ -167,7 +167,7 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
// Ignore InvalidName errors here SSLEngine::verifyPeer already checks that
// using IceSSL.CheckCertName settings.
//
- if(result != ChainValidationResult::InvalidName && result != ChainValidationResult::Success)
+ if(result != ChainValidationResult::Success)
{
if(_engine->getVerifyPeer() == 0)
{
@@ -259,7 +259,10 @@ IceSSL::TransceiverI::startWrite(IceInternal::Buffer& buf)
//
stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::Expired);
stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::IncompleteChain);
- stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::InvalidName);
+ if(!_engine->getCheckCertName())
+ {
+ stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::InvalidName);
+ }
stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::RevocationFailure);
stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::RevocationInformationMissing);
stream->Control->IgnorableServerCertificateErrors->Append(ChainValidationResult::Untrusted);
@@ -292,6 +295,10 @@ IceSSL::TransceiverI::finishWrite(IceInternal::Buffer& buf)
IceInternal::AsyncInfo* asyncInfo = getNativeInfo()->getAsyncInfo(IceInternal::SocketOperationWrite);
if(asyncInfo->count == SOCKET_ERROR)
{
+ if(CERT_E_CN_NO_MATCH == asyncInfo->error)
+ {
+ throw SecurityException(__FILE__, __LINE__, "Hostname mismatch");
+ }
IceInternal::checkErrorCode(__FILE__, __LINE__, asyncInfo->error);
}
return;
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.p12 b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.p12
deleted file mode 100644
index 63ce4672787..00000000000
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.p12
+++ /dev/null
Binary files differ
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.pem
index 337d8b48e66..65100bab23f 100644
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.pem
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1.pem
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIIEtTCCA52gAwIBAgIJANEJuarXnGShMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
-VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
-b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
-BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNTA0
-MTQxOTIwMzBaFw0yMDA0MTIxOTIwMzBaMIGIMRIwEAYDVQQDDAkxMjcuMC4wLjEx
-DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
-cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
-AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBANeK0ZahjAszXRN95TCwneiMyPvgSAb5OpJtO9G7FYvIWUUap46uYVx5Adv6
-eGi5k+vixScHwfTHUpeGOlWO1QUYPNLa4bsqf1T7s8a8+2HNude5uskJPLurZYG9
-b3C8V1dSWxqtrUYsX/xCn45ScBBno8q9Gqjm8abFxa3bXjE72tcAQQimu/IFQcyZ
-Ffk2kbtNdJWpZHoUFKMPbG6EHDeS0yhvmo7b6eNp6YTzFx9a4OnjUUbPwYFZH3IV
-eDIftNZtQN2niDrKcOKeLPeweIGv+9JNdkqN1kGrJt2lLJQE+ALLhp55d4lX+S0w
-fhrLQGVTHtDbF9KGizF+z+h+atUCAwEAAaOCARgwggEUMB0GA1UdDgQWBBR7piAe
-mqqX28rsqrZhGMfDp2ynFTCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
-6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
-DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
-DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
-b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
-AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCFFCYmn6R5
-XwXe8DjMWeAvP+JpQUfqPqQ5Yil11SA+8eGsJqUfgx9+90+sZ48c7kohDtNWSJKs
-ZofvFiTbSykjbKuyDaCElv71MtdZpR0kxAxNF1K+N7/F5SWsvOb43dWfhHqkWdCw
-Xo2m+igL5zwmMqGRFrnJLrYs6+Fusm+cgpznG4XzaLsR21j+hu3DTcOQNoTBMaUs
-7xKTjXRLY2wFXvzQ3d32Ga4niMEqweQsv2eJHRbUqzUhRNJ0UXuwxs0sXNpVCaYS
-Hg8IdkAEwLKH2I9yN8obmhBHlStP9jfzSYOw4a7KeLWyQ9iRj4rkkXUQ570wnasv
-zFeZFMVF5Y41
+MIIEtDCCA5ygAwIBAgIIQoFWIYE7CvkwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
+BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
+QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
+A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE3MDIy
+MTIxMDEyN1oXDTIyMDIyMDIxMDEyN1owgYgxEjAQBgNVBAMMCWxvY2FsaG9zdDEM
+MAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVw
+aXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0B
+CQEWDmluZm9AemVyb2MuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnRBH5lEj+LJC0JfOFBXGj5Ik1XB/hiGAe0wb3qM7x84paim4merjRHXuCX5i
+tzsIKaUi0pNw/JBUPkGJr59qvbMYhc3PzvKLJHX2KOi9beDtRBKsiRwSU1qkyw8f
+Kwrly0V71ne3p2z74/z3FkaeNyb5IEQxcrpRi3xXTFl/nNnGyHAZd3okImjh0gfN
+ElscDp++JnY5W3RDWTi+v4Nmq1fZzs20nJ/4r93LnZfrCqm/hNZJz94cYSSLztnK
+hSVdS+vo6ilWgaEMcsi4SnQK/yvYj4H12SwaW/Vc3/FX6fxmq1Y72vggYTo+MOt6
+dGT66FnnLfA/ojl8qsqesMBRdwIDAQABo4IBGDCCARQwHQYDVR0OBBYEFB5ynD4W
+cyfHqU/g3UKI0i1EMv9tMIHCBgNVHSMEgbowgbeAFP7XxgZVu03CluMlwNTgoS/o
+YmIZoYGUpIGRMIGOMRgwFgYDVQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsM
+A0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAO
+BgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZv
+QHplcm9jLmNvbYIIae4r8hQdO20wCwYDVR0PBAQDAgXgMCEGA1UdEgQaMBiHBH8A
+AAGBEGlzc3VlckB6ZXJvYy5jb20wDQYJKoZIhvcNAQELBQADggEBAIJlyxl6DxnM
+zUVtEn/We+qqU5qIqiRDbxPoV2rPNiAvkexTXAC2qQfqmdtHW1EcBUPptHpApBJt
+P+0jYxkCjZ7YgjZ8LcxXkzW+TAKYtkhz5wlkEPCsfv4kgdHOAMOwDzQ8cyMuYVRv
+oGiEm3OlCgqPhJDPlpyx+S5yw7Ezt6uJj6AhISaXuUNrPYOZ9+sE57Ka/kMyVKvL
+JoB62iMx1aWQIUqWdEMn7CP6GK3lJVM//uMK8V64t3jaJbD7a3VX31jMbGXvxfbP
+n/AGDHGHj6pCcftL/XTsqGPzelRSz3bjXsUdwd+IAikkSrNF09ljozWY48ildJvY
+TDrqQafWBpc=
-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1_key.pem
index a681a486b85..1366eaffd9a 100644
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1_key.pem
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn1_key.pem
@@ -1,30 +1,30 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,5F83839A3F7CBBBA
-
-FQXNM3MPK8jqVRH0nfoJZFHPSugipU5O9eiqxJhBwjXmBz9qhTwLUVgQ75gKQP5/
-c2ed9E9pghpc937mstBqhSfV+gQlcQFtuztqE1Jhye+NRAKtFC4i8Br8/OcJCvBy
-PuxjVMhhZpcrtDbji6dUAtYL+GAkdpo5DxO5N5MAgRVlm3KK0p1XzCFRtSFtn69z
-+NFX8SjZ+eqfr19tMn3kSXyEiRCalml8Nc+MPTL66RTHK4iNvqVQDgeOTK/8GDns
-qpRhzgDtDqNZDQi/5JKbriouvIDObVKKXS0KlesfrfT7uPC9y7wyOzGEydoRdLS7
-hMzfyh3aAJ4PLUt8MrXbuZA69NedwBQpWZvSTT56vgwKapqIh30hGSeTqaHiQhjn
-zM2JqVOBNYgkXZMhZWmwUlrcBO5ps+ENbTLqDEkjevUYDoVlAxcCNVP2guN9Zl5/
-/8w7CFKmlSownwypQdsHNw5xwEu2A6yTfzqprKsBCcY98VpFgGIz0EVAuk9B/HWX
-8wOwr+vJScth3u3Su2BTf6fSEKBV2DmEFUYY8Mv1XC3Oy7KSsCWStLiwQ0u7JPmV
-jkdjmTghlOmzYk/J+e2hkC3XP+6Z2auDFHXKRpkME7sOWJ5fwzdmWqZXP7VD+HQZ
-GxE8eK4BcqVmuVBnDTcZAifeA3DyTPLAy2mMRqMpyH5BTrH9Krg5ZDHRvACtZS3S
-WmZnA735MPISNG5XKTGfd8SjIBDUsrTzKEbtFSQps+jly6j/L+u00DoZt0jxnnRG
-mlzzFfR6H8++fs/bXsVaF2CA97aUWbB2qajKpgluzQSddsMNE1A215QDep2xPMWe
-lmvFCttpeFOaSsy0uU2vnTgCi2vMznT6vEmvOwn5NOVhkJmgWkG7RRfNtAlc8rUA
-+YLfw4VHHpR1StYmmfc7eJNpDZ4Vh20InXaa01iRLYmDyEqfgiz+J42Cctlu2PXZ
-+tPQ23cyjn3OT7jmC4SZzUlhglnmYVayJlf4ZF0No1NwDsPakzytEtJo2fssjYLk
-Rdop9NotXw8jb6ByzOf8cEDdQrZ3mdRn6sPwD27IXrMQWNEmlwyPPvXK/v1Alp89
-iz5K/LHUcYGZAGCoAgiApyXW9G2CSku2OJk4OsB4fTtL4eiPNm2rVuipNsCGN0Mm
-UAcIHcge6MpUY+i285eYPKiKynR7DJAi4MIlqXkJMwhnanWfB6P2hEhPB81PYWVp
-x0NagC3r02Lel5u5y/W1PpysQWhHiriDxFOhqY3HX1NWKJSvwE8IgQhxX8Nj5qwQ
-S8Yz1ilDR1eSq/wpOUM4yEdkGdoG5jg2nphO95qiYibjnU3uML/Kwq6gjShh+g2s
-kuW4M3eY5Xj+pGb3+JkVOZw3Ze/fUYZAbnlCY0wH77t047sUoSWTtTM8ZdK8kuxM
-ehZPbGuucQHAQ8m5j2BLn1H609RsIlFB79GQtjXfFhbpEQl2OJltfl6PUQea3brB
-cmXs0/bMFohCv3eIVC3yGp5XyqTdaJQPuS0lkUYkchQQoIPKCPPmrjGN5dVy/yS1
-kt4WvsnT2HUXNMc0dUO9S8lL+UtePNoh8bbDaGSA43vVLThcMAlueEhL2i5qcHy2
------END RSA PRIVATE KEY-----
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIYdepdCOWSksCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECAIj1PZFUHjtBIIEyDOImuCflkIe
+ofcntpJNEiXZ3I4/OFc9BL59wy3KFaMoLRUeTC0/BZJqb39DYArHXYZa87pb+l7J
+Gy1IidCI/3dj1fj42mqz6Z65aWpQ13pVO6H8KAewqGJkZyptLMLpFEXhrx5j9reI
+XMheBQC9UAlgfWIO6+kGmZ3fdGwgNUZkILF6lp3v6oeXvW5t9uHcd1zhS09IW4Ks
+ly2ijSjUxoqo7pRH/r00jxBmS7Jw0M0gYH81mBblgsWrkvLoUB7Df4c/RZuGevor
+cahy1uPd+8gd5TUpviiopgguBbgnq0BisCiXU3vidcc4HfKBXrevvVOk3eTqYmE0
+AH8vGIm+pZVlkKPyj04fi7q8If7dRuHWbPCDsAyGEChcVXIZjSHR4+PNjtln5Qqv
++ZjG8HmHin1ynbvowDSghPWcKvWr3vlbjIXRbpsbPgcm0YpnEHbSIocPhxbO+6oL
+/l0fB6aJcXMFXIiUzFj0Hcug95y5TtdDxjIHtc+r64K9vq6l1WHv8iHVzws7rBXX
+ahu3d2i8ciLeOdWk21BT1IfatxQYZC3pxiuM9Pnc1pJJHeCF6iOardiDnD7WKqsQ
+j3tOGXmpnYd841ulAcRlYDq7Et9/s7pOl/eHLZSLXxNHkms9Gw5GWoFX2Nmwq6Zj
+TSV4j+qTLx/xAfScwItfrWb6eeLWjEuhSOHYC9sDSjmnD7AM0QSgkYFvfpj+gsqP
+f2gJgDWppFMjkKRPli1LETaSj5GDIBEF+0dIJ0NR5ERpO7pb1GAHUBx5tkW8U0qJ
+7yaco/nkm3KY0trHkC0oLVVRbuf9HzNS/cvPEfUfwmcexggZhuKoVVr/H0i4bvLs
+9KmzxWvzIKUp1CrTu+VNcsM/ZOIXflJqJFLB2ePj6aHusJVzG2KduC6aGmPl/D1M
+Om456l+3NiMs6DR3caV6EkFYeLm16Cl8zDpnBoigRt1dprBOHC9G/V+ul45k3yv6
+BTwf0IS9+1bvSWrMoHZ8KiaoJi7vk8s+3laYsi6JrAe0HtviCm1C1lMKfCQPcYkV
+0SPcHKbLFxv2ei3lQ4LltjG4QmjyRNWq1pwAzfupqAdDXc5+R1D8VVjp6XoEtrV9
+B7xQJTbZnIeLMT59lX4bomn9ktrv1LQ+dmaFgwb/fToFP5VbQEuNtfUG7Fs6LBmy
+L3+RLF+ZQb2ECiRMIwCmA+Dgwvi4cMCw48xe8eBHnuDt75L02LxmZDiI2OU9+eP3
+h6Apbow1Gs/mRCKvw6Oi5YYEYJDlQMv4OtKIr+a49eHoHke2IybbAhSL77rMfY8W
+jKxBi4zzctqL010mTcMlN1+ijk8BCUTu+7VIXqygnHjm0n/FvMgvssNUxkf6iciY
+LmpkamQ9+JHy+w3j/iNkyTogoesyBSZFW5XbhKsRfrSrEzEK/mAr/bz/ayEORJ0c
+ma1EAtZrNxdCBcTDRoTr40jnyHOXTzY6xCcdkVMPp3+Y6oAahVe6ODi5m6rccdXh
+v/IjnsC19OpqE/ZMUxeK4aft0wUgeYFClRT2gfuseXsvGtyitms49QywkjSF3ix2
+OFaue1h7Bmrit98zxGvEfdOCcyXEOQ0Wo0UsVCPA0obaZJf/kQ5f2zeM67J9wj9I
+wYmo37xaBlp+NNCeJG2Tew==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.p12 b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.p12
deleted file mode 100644
index 6785193d1e0..00000000000
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.p12
+++ /dev/null
Binary files differ
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.pem
index c54f190670c..43f43851545 100644
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.pem
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2.pem
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIIEtTCCA52gAwIBAgIIJoFRkbPzeYgwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
-BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
-QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
-A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE1MDQx
-NDE5MjAzMFoXDTIwMDQxMjE5MjAzMFowgYkxEzARBgNVBAMMCjEyNy4wLjAuMTEx
-DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
-cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
-AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL78jI+GvD8e+WV/e+nftq930TOAtYalz7ewqiIey2/+8I2OSz1BcybYloO2
-WF8vBAIwULAEDKZs1SBIRRLl8TbRWzxKiRt9cwYuwLU7eccnpc3RkyzR3/riwQ9P
-fGqfBzuvWRMFES9OO0qYSDsxMTbTuqGe45wllgSjxCxyRbZ/e0MWZZfOIktNG+UY
-oirSGW/omwQ1KLqfoQkawIAmMDxkxmZZx7QSAjwB4MKPQx+bpOyGqzI5A5lYAFzu
-mJfqOnusvw0ZPu6RjnquTHYnkXPQ3wzhbF+P97UrpH5G2wLtoptGURntUiIv7B/E
-0SmOGmyVQA5fB8/C6IehVWuTRG0CAwEAAaOCARgwggEUMB0GA1UdDgQWBBQ8Ub4X
-Mn1Tae99mxRpu2zlipF/BTCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
-6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
-DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
-DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
-b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
-AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAZnA9BsWpC
-44mCDBEtS0J1UfKQoG8yH67tVul4YdqDC5aYfw2GOSTT/vPPUNmI/3Wa/Jb3CRvU
-WUiqVWoRyKB50gGnbE0kUQj2jv3IaNhsnmEZ0xKkbq5h2rNkKuhEd8Erj3FC83iP
-rzJVO7qjboYGVkukIcTsMpU3wtwohCB+8v1NDOlMv/Z9vZSeGwjebWJtDAD32oWN
-bmAbnjxEF5Uei3MO/fWK9wvElSa4TAXVS7+ovAzvs7o+ikD+cLcbtfXhMBZH0cg+
-y2Ht1A5mP1AsK04W96fs/ZIdZxiaVIjRR2hN4BUZYOxar0wxwy2oyDcyHTjuLKNn
-DohtzPbwUer8
+MIIEtjCCA56gAwIBAgIJAJQs7Na56PxiMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGJMRMwEQYDVQQDDApsb2NhbGhvc3R4
+MQwwCgYDVQQLDANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdK
+dXBpdGVyMRAwDgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3
+DQEJARYOaW5mb0B6ZXJvYy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC2HWyUPZ5KsvjKh4vsTHAWfvI63g5pdYN+cHUaKAvpWnEXQRYSYnLP4YcJ
+JWNZFG/ZafzTt9Y3K00nb/P2nmueosX48EN+RoYsBpcNcrsyLnf28Fi2nQdZQbp7
+t912IcZKrabZTYEYPoL8C8F3aEuDde2bJa5wTlaanV6DlbZptNFJBrNGgZSNB4Zu
+5Qc0rIHUM8TJYNWU1SrTmf9DNtZBTI3HTtDpw09Y9FthPD6/xRRfjDCHJNHOtL+k
+MAcJ0m8UbWKJpAhhdZFPZDawd3fjjKK/RmE/GFQqJDScDsyvAiZF5jDo3yPUNUwF
+CQRGInpiTyMQcCwSirrHASZN0rppAgMBAAGjggEYMIIBFDAdBgNVHQ4EFgQUKhSg
+z/uqY16GSxIx7T/RQWaFoygwgcIGA1UdIwSBujCBt4AU/tfGBlW7TcKW4yXA1OCh
+L+hiYhmhgZSkgZEwgY4xGDAWBgNVBAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UE
+CwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQ
+MA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmlu
+Zm9AemVyb2MuY29tgghp7ivyFB07bTALBgNVHQ8EBAMCBeAwIQYDVR0SBBowGIcE
+fwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWXAtNYyL
+ZIw7drl3McU9O8wRungv4DrLiddGvFnuK/Oy+m1AySQyFyjOyUaQVTy6zhOa1dBd
+3AN5TRX7bX9PKhrVxtoOeFsPec7JxetbS+tG+ov9bxCaRrbwe+EsyJNDr/dc690g
+x4YYJ8siDba6TDYA/T8oTMv2MQREta7TWHH78yEAvS4jUJHtfroiDb3GwIJdb5d3
+oNBMgVJwMcFe0A2voWOOVKsXoNBRDj3p0EU6a6F64G+yWY1JFcEgHxConAngTqlk
+Fl5TCcdGBcrGidqclPC836/OnV9w4Xr+Wr0MWdD8RkdqDSRT0PdnQCucFYNSrszJ
+nZPjAhCNBO50Gw==
-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2_key.pem
index 5ef923b79a1..db7728382b6 100644
--- a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2_key.pem
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn2_key.pem
@@ -1,30 +1,30 @@
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,70386A3E57A24D9F
-
-822rA3E1/F5d1pVnZ+rsuSS3WwVsyvRZyKIAvyluWnZShI6gIbRcHtg9nDjQO8P1
-xoZVN2yQHclKWS48Z1yLIcAklK2GU4wxYNQYSeKeMX6DRRIDeMjW7L4C4o97G9ot
-hhUVrktDF/vRO6W/Rq1AjEH9hv/4u/Ci+JOvMpAi7g7V80UJI1KuuqguZtBdbRAM
-oUOkM87WdQnGLTekS4mngkUpOJhiBaCn5gCQuTw26ji7VNFjmw3r5fhTA3XNEwqL
-clk01wdlkNtrVd5fl0OW2G9KRO8Z3V5+QQ5q6rZaPZqcU/wvTbgtrsIujrqizRiS
-6Po+/l0yl9DQhfFBaPcVFher8fozRGsywniMrzxh1RucXVE7PgleJhlSz+AFerzX
-x/BPHeYk7ZDubgP9uTVZ9SpBoqzwpUajdXZz3ByqcbE8V24NMKBxvV/B6Q0eZ8GT
-wuRz7SmkHGRqTKnXwJNMeDCR5wHAMYyUgGW5HGimxQVOQQN54ND3egMSdNIoZhYn
-aYBDwupXN+JVAVtvRhiSq1fgtu9uP1/+mXS4z8ZjomIkfDdXk+Izq36KMwsg/MZk
-J2YibPTNFAn7d+m7BktcOgDOd3oHGvZcWHLjV1jVLaHM9ZTnXUBUL251d5v/UQNJ
-1a18skMpNTAcnitPiuYnB5/De50IIdX92HWbLMtSVTZ1syaO12eS7wWq3/RPYo17
-PyRr+/S4mSa1maXSYqSsJKQ9OdpWbBxLiqoNULQXTNCb7WRWDx6YE8o9wv42ygqA
-gBXkKkBU8npYn6+RvvOuJPWMQloEgy7GXDC8X0XKMrd//Gd65QNUadtDeVmrWXTC
-UnaN86IGbO1ejf7Klj2lhJz7ZSuA920Ouyx1NjU+rj5KGP2ifyHoQTLzs3MK00/+
-hlqnswsddLARZqW9aRfnu2fxJ2KzP826xRrZssTsE2Sf1/ZAU82czg2z8u/Extkg
-pSSXKZ4rTupDBtaKIMpbZEnTN+YnfHJJw/6L8ANl+2POKvDOO+slBw5fFIX4VNZF
-LqRig+HwfrD5notMiURRT6IgepYuxufVjDTzEsCjs+JA/zXpTq7jj4EB58D/7oQW
-oW5qpkLf4FYB/T9DrJfdcJZihPlGaeRb1FkG5NBN/A2rmOnrnAgxBpcFH6wQYeRA
-Lf8yrkk7zGl4oF5FLwlwDR7Ys1urAWRPACpvWprqwSYV4jrNQb421G/pY+/zYU3M
-ZdAgTO7VW6eN2D5Jb5zyr6v1CT5wfoQ0FRSIdNzoxFxfpkfflAhx2hxUvTu7EJHo
-PaL1R+2v75A1FJ+NEgfAFHL4c40aHf/V6smFDc5JTrksjezwVlvhyUb52ziCARM7
-XU11+iXWpBPUdJik4qHD5MGphXYl3TC+R3lzGJPHZSwfKlfLvm3l7wn3vZ/GgX/u
-NxFoRGEXCuI7My/eVNjLRFr/7zy8Y8O6kEekQIFAkNLhGQpl8BwY670cuj6qJr4r
-1tWyCY8+XCKtRPkGb6SOq4S8T5hOwS8JjSS3sCF+VX3T2INKVF92jEz74A9XpWsc
-GDFpOSipROrHFoSwg+NU8n/xU4kOCZozR/lbw0PAfqk7mrVv5CKvSw==
------END RSA PRIVATE KEY-----
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIx66Ud+88lJ8CAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECNV+TdKyQ5gcBIIEyJ3ESTa9fjfb
++BwE6s1wws7avYDaYyhpX6IPyoE6DjucCWz98C7v2CcwGDA/lEMVChHQcDp8VXkG
+2l+k9MIHoVB2y5dlZfCBQKlMwbPeBVFUR83U/Osnn3qNquPhnPJFCOXxwo28qNp5
+TX1lcDxGlzuQ8lluQmQ4OINRCsJRwJpaBkzoip0sFoVAGGICvpWvkhR3OrLpGVeJ
+9HxcZfyJeyqYdFZBrIv1AFi2qNjxIZTQS2kxMuxWSdh9alYSorINzUxA1rVScCV2
+pqEYPWAHqnHUOs0hFUxDYB17k7sGjQvSF2qBuPkpy8taQa1TcgLsIEkm/NkpV2YA
+lVHj6viLr79U45ukJ6Sac33vYvvowRnLBVg33mC+f40KneWXK7eIZCoH10ubTkjZ
+Iots/gEdVWjM0x9+1R/yTzeeKb2YeC+XTKNbCpGdGt/hHdtKWriQDDHG4ZKncBWr
+tynYz9kA3N5xtqt8XPDSBWrdvzIihpX67yllTW4C6VQ6VrGeyMMJmj7BrsaPdIqw
+3x/IVDUSRm6om55ROmwCQzOtQhlxXstSehw+v/ZjzE0SBPuIZ7milzX9riaWeDHL
+tmCZH0gvuTP16FRVtARCDkBuyZDhSqV/Xr39mfAD4w9r8YQzBhXBX+Du7nOeCcdo
+hJAdi0GfnD6N+sgL0TVNFx5MR0A9ekHOOIsEbhHf0zjgqLj1vHP2a9zWPtQYXC4p
+B9U5vviFtPyq9Tdg08JyPUUNbiBwpzM2a+N4tL33GMy8s5Fq0TMemrAlpKXP9Fdp
+EXBUMvef7vPsG1BrpMhkOiSMXI2yk92+Pg2S+wVCsERmoWz4SlvGNuJ6FK93W58d
++JJKBn1e+vI3WeN4Md71/Mfhlf3pvYa3GtOapBiZdd4cYfTQZqTURQ6qrIM1kT/4
+Cnv0O0iS/Iok7rV+vCOGwu8WMEx1JylYXHax3L1thxC/Z37juA+qDyyiR9Wb0kRz
+o5vzUyG7pnthYx5C3Tn/WRc7Nq4pDNfZuNV4HOkht5YVbE2vI2af+MUKkNwYb4ac
+TYvax4YWl5Rb7YJ+hJxXDfvxuKqy2NBTs8vHsjtHt5C1Ona7d4m0MnKNPmq7CrV9
+qJqdAD59Y0g0Hx0jfphzBAa9fkzudcBGxW7ZvelJA+ckw1LcMhBC3EgsPRnTEfyl
+mOhPxS8hac+r5w6cO0A6fOCsuAc3H5BNapT2MlNQ7v8ZvJzPiwGNHxNNE0BvVs68
+DjLBgYDOQQxUdVrTxWLOzTpyTAhE3gIfX1DAqd5gRqU0R23Yxpfj6r3aik74QzWk
+YRcv43VoRBBiZZ1FokvxsdhvX034Bjf+QiUs+M+AOGDCyxba83hbKJMj29PUGykC
+MPE/1qSN2Fy6B4VhHD05nwSumKxBBJXvpqFkAnrysOmJfeqroaSdDV8hNPvPl2gx
+2qk3MulenHE7iXQvP7i74yunjbPEAUxRTdnlOMqs6xJaEcfemJxXrzwWnqGkkkh4
+yBvdV2d826WaxPes3WDRCU96mgK58EiTTkFQVjIQNs/45nMeq4uYTEHNlLFQf8GY
+Z59PhvnJsWlDdZ3XXYfwjoTN+U3uB8Y1HL6LGq05lkfVDTpqj031FRoy6UlX8Y/O
+ltvDij4FNeLJRuYPmIbeow==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3.pem
new file mode 100644
index 00000000000..a06c101a83a
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEyDCCA7CgAwIBAgIJAIFeKa69VILFMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGFMQ8wDQYDVQQDDAZTZXJ2ZXIxDDAK
+BgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0
+ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkB
+Fg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AO4z2dCqCl6q1DQkSQ9n0O4ARD2lQMZiyLPxQdBjzlokmH8xgueo8KgfqRrnceZA
+jtejPIIZ3F4E4s77f3/0rrbu+hVsC4WoQnRQ9ozInSPVOUHunufOjf11bhlVCLnL
+RoPbTMEpR0sYQzXlJUcEV5v4PKNFG+DrLBPxPpJHO9/wY5vJEVYizEcl/6zmA8Jc
+zdZMCBg6cjcd659HfnzdDkXkhIvY4wE693nomP0nrpTuZUnDDYOnSlVeCM71wNyt
+4lQstH+fcFh1r1cGNpf0JrV/EoxOcLH6fVuwMYFuJafI2kdfGK2W39TREhA8s7s4
+wI88PVHa03cMennSsNlfBPMCAwEAAaOCAS4wggEqMB0GA1UdDgQWBBTLldzy1rEH
+NhpECcN86858xyGqnDCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv6GJi
+GaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQLDANJ
+Y2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAwDgYD
+VQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5mb0B6
+ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAUBgNVHREEDTALgglsb2Nh
+bGhvc3QwIQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG
+9w0BAQsFAAOCAQEARG6kEexSM3smfskWc/py1oWn9E/czk9DeS3gomAHAXqwLky8
+5FxsDB1W762LR/39qA9TDO0GPK8ouXv52RPHg5l6p52SDAD3wk32PuBgORN/WN4d
+ZN8qVjwmDiob9SZH92QULN11gKGkM6EMixGzqRxitbCtkkRixlkkvs6M3SOeMWSo
+e31+LNSVVI9Rc+MJlvx5GysRWRPF9Lr63R+9rs7UvAJjuR8c5jeeA5H517RzzvSQ
+V8KMy9Bu7Ukn/BPwsp+QOwvj5Q1AHianoWQ7PcDeo3P+wPW9BPQWm6+DMUHybwVP
+MPnM1+HaYjwqvgodrcif2c+rpzHvSzsTiq4Okg==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3_key.pem
new file mode 100644
index 00000000000..90b1053dd82
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn3_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI1O+lddZKi0kCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMVxKeXz7rJwBIIEyFIF23iFbqEn
+wNOcZb6zlwnrUpauAC0sI82sJNtaZOmj6c6FwbMy47w0KJ3JvCDAzypcvQ3wWGtn
+vySqUMiOuNAYMuWGu/rmSfcHAnGhoDBRVJKyDbJMfbpL5n+8jWyipWwN8NzbYmkB
+tGWhIr+2dORzs5NVXWSt/yogpGWMWcDY142VrL7MqQLD/SD1yk/SBYgbF9LhnmPI
+agS8aXrN45pzJPCqANvkSHdMzSr+soXOWKRNUWt6btQyev2iwEdQ2AuRYOuia8Tc
+jixVov4jJzGvejOtXPSNN5PhhH4GQoJgo4BNyJU3ieObyWurYDw92V74aNbVvWCw
+rAEoa+o3v3AHkOIn32vXY9aQyyGV0ZiCBLF0FoRXMRdfvjzntqvS38c+S2PwbU3V
+g6BbiI3+RX0t1M0Kj1dSif5SGc7so7fZOyGXbYRFGI3A9A4pzsbsQOeCdoEtLW+w
+6rSclzbX1MflU9j6bEypOKBhFf+K7Y5cUGEvqzTKLB5p6TWCMAuCQJBTbwhBXmCt
+mlkCC2BVLVa3IXs2JXODN1JFGjX1Vd10uojPJ+bU3vhN84+8rvOxV04ZXASdRXT7
+c0xprqGxZGtwHyYH4eou8b43GMxYiRVz4/lHknGXGMYFu+69NsHICCatGfUrC4Z2
+TY2y/EtiYycPMDJfIiWcSoaWGPxXxydgv8OmC1OJDz7sFqHi8Xt9wb5DSvYrsBhF
+SKkCnL1xqjZxb881h8kcCQ3TymJp8VDc0KQzTTSqx8VKBilxPlyJ5ytVrASbsxeO
+kCGWbg2MIWFBRQXjSaZy6Z6I6aRwwZXIqWEFXXMJMzr7rPV18pRN4Fx6toerig3u
+r8cXld5iXttZOEFtVFgP/DakhD0hHNgroLnBEaTWyVoPfefYIvmcR6JKcTOlueT9
+4NoPgD0o6zDf88Tlc0pMuZhAyEWd3IMUQzKarRJX2OKi1SuvBePGQ/XggZDjwzKV
+5TgXrk1BURlGU/xxDJBh2U0fU402fTKQBFPyXzOMy9HWgyLpgkQLIIItWu11+WUU
+yumKPacJ4SjsuT005iS6ldIJZGsCdd+GZDVAKd2oPoi4XYCMFYsBxKfqjWbTXbgN
+UA5rWAXK/HZQUh3l/e6+trSgQcQFmeOVtlPMvCGs2iU6kK4h40I8jeNsopN7a4Zv
+y1OxhgZOfbD+dX2mfZepaTGTghcCRtZTiw5xglL2WuS4O7JecscmfeitFf0P7uju
+wwHPiZ9dlJlH0am77wsclt+j+SHk2Fs/TgE7it4J4yowFPxi1yEv773OTHBB9LWD
+9PoRiXvhab0TTQiHREtAhq7iPdAFKokrUV0PIiEW9HdJU2dOqeuNScVOLdEOaahh
+flMq/WSKmjqlmDPAGKnVYwff/eIXV5iw1PtcVWPWlT4+h4HwfZqrufgB5xGFnux6
+d2MI6YtuJBIKXJHf/5MShRAP8aTp0eUvoNjIQCNzWkSSdbugNsQQqJBYse0ulU4K
+1xDvRNFMb+B04WrXhnpST5BHUD2fg5z8xN3qEFQD7TNizN0js6qpTF7Sq1+COYVg
+/ZzdsUIT1TtkPU8YTErEdzhgJ8fyOB+B8dkPG1hIsdpwqwIxMcsOLqokIFUlACL7
+613X0AD/30SWVU14Ld2SJw==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4.pem
new file mode 100644
index 00000000000..d7eede37947
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzjCCA7agAwIBAgIJALxy0DDzJCx/MA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGIMRIwEAYDVQQDDAlsb2NhbGhvc3Qx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAM2WV+BXTbdK3gcb/Ptifpn7ejL6vgsK65bCzNJU6PeBy9pwl08xV+Ihx+cr
+qTlCvLPTZbSIU7yRVBiApju4a1sD4+q9J94A7jrTxGb2MltaaMTGzrHsQlfL0Es9
+cYHEWxP0NzCYwwbJFU7e0wwk4VoSW1A0bQ4u2b6aRrRhrfkM3vuIcxIdKK3i6+gA
+JIpIEjLpM3Jl51dSptOiM2Oc+Fm++Jrh/5oahSBhi8Epi7Ewd3FipUlutS4A8XeK
+9wJSttHNa0nQK9bcF/RwWvX4DnqkGaqS9rFILFpxMXRQI9hvpcqML/fUTPHTrWxZ
+cgHbBwllp9qwzwup2KUVPLoaC1sCAwEAAaOCATEwggEtMB0GA1UdDgQWBBQ+j72z
+Nw64fmS9w2CFMNJdGWw68jCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAXBgNVHREEEDAOhwR/
+AAABggZzZXJ2ZXIwIQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTAN
+BgkqhkiG9w0BAQsFAAOCAQEAmg7UiewzGSHnT5LaEPmzojVYAZd1LDqGL4/f/qlH
++FdhZRHsrHG7hXxnapP5P+jPuYfaRFtc77YOqilHVlOSXwLHy2zd84Qy1s9pSBwF
+A+4o6eIzKZzNKHf2yiyaV2TMYzxxCWLDf7F4JRyCFy5eUBui44QJY8j6MZhiq+dJ
+CbVLHggSGlyCnCKH5Nx8FIcKHnAQiaBFVG7jQsm3ucmS8OJbt6A4ebmCj6eoOe1I
+HabuT0nceUrJpU8hKPsj+2DXUPzI0ph9nwaJ+uJ0o5jXs2r5zj2YxhXvmEqogqCR
+V9ExMQwcXuDDjxkZDGjtpB4a3G3xIfQx/Fyl68q/9UI3Iw==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4_key.pem
new file mode 100644
index 00000000000..fd764949a21
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn4_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIyeuz+wehOvcCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECL9uJ80nDy0UBIIEyFUUBZQ4teRf
+C9Ob9SSXnv5bgiKRg2DvUNaiS/ryVIjIbCXDN0hZo3jSgkqeSkIA4DGPwF0zCkJy
+zWHDnRUjSWMiI1wpwJF7vsdk18Yr1gif1XsXigQisFKDI8zeRrQL+DztQqRqo+Pe
+SPSgnRobR8Qgui5LebZtHXknRYtSkkilxW/RfwwPuLGMEmr2KD1Eq2oCzeHNaXM5
+iV0jbVAYWMnON8uCBgeIIfoZQrmJFKDTYMZXRBeh+OiCWtjEm58HFHedGq7/BRPf
+dwYXFXN2N+mK3cq6TMXnX1TU51AS6ZCmhSszMldxtvDzLl5JOVh1sol/T03AHjtq
+KU/Iqy4avPN3vctrVZLeg7urIUJYqueMSjTgH8FjxjS89UF4KJ4fu6CZmy9/pp6d
+2BWya5AjwMBYBb0wy6MIvytwgIjWKotlfUOoJMkTMZ0WGxnX4p4a23ppACnBkx9g
+qsJxutmXFerQZHVSY7AAPfCB39VDFobwhw3RcaY7XDgJmVobEGJ/GlXTHEBroOTO
+BsDJhsjrLOpYg4Igt0TU70u08hztQtNN12mDs9T6iFqZKhKdPECea65hmjc9G+ub
+0jYgWhgJc0EJTMmY0qBB2SujpsV6WOrDWP87Bio94uYa0bK23FWsQswdSBFmythV
+c0WVekU1lUX+fByOSv24hy9o83ehjlF1KLmHQboDL8VRjN9qYVk2KkADE324n4bs
+0d+FvrgErQMyuv2DAdtvbul0b6T0+5Mr2WaEcnWlXOGRjoa/w9QzyvBZ715pvabf
+vmv8LQLWe7q653oRShNcwLEJzG3fjEzopRZ4Y6OXXSerQlxn9RRwNjBWjygJGPWQ
+Fwz15VrMmNjNEjk+0ZRxwxJWnf6YVPsZYyyjMZUmwEbp30m6UvKtmFGnXCgleAUp
+7hrm03QeWdUa5QHsAgD5z5SIeaNkGSIjqK5ln5EFC/lx6o4G/+dvjwC+Ps0ZqIcU
+2QvBdowj9XO73g2XVwo68rYF/ND3Z9WpyL2YRI1fuz9gJdnioecBK9tizlmiv8Cm
+k+x0Y9qJoaq8E+2kweGn6opuOHTdkuuRXA6utf168ohR86wnhN6wnmdCJMDbOLv5
+23Sw/FD8Yi5FasxPEfQhT1v8Ll4aB5ObegwufllMH0PpAAGOSFD3ZYe14DwOOGgX
+7p1CwGP0kkE0oCNRCfzyllOrO7DhaC34QDpyBtUVdn2jC1I3gS4TM8LKeuu5k9Fs
+R+Y/d0rt5VB/FU+AfWB9WCXh+6Vf6MCYgYhsX5T867S2V1S381VcJCgW/n3INs0e
+P4h08RWYSImSfcJhgkmi0tYhKQpVozcEC1qbY2S3WNHhHyG5UheDQMfaSijFCJ3l
+1GSsvFT1mFvkcd2u+qo9iG4ZqV2fIdkT+Eiy2WPV2SStQ74EVkjlVgnZurNc17kE
+BO8wTk4CETK6BW2HLFdg2v1P2hbFgljnKEX4SUX5WKHBy2zkE0FYhZVXb98ToVNN
+0UB6mWMNuA0IX5yZVzSJFVgVf9i2AEGVBcc2eEVyeRIJV+D5wLGySPH0y3bWZ4xt
+awJB5djDh+XD9qi9jqktk0wq5d1pYwPmlWS/5tl+vsMfKtgGVGrXKBdeAbA9k6sI
+Db+whlf07r/vmVSwsY+U5w==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5.pem
new file mode 100644
index 00000000000..85c395be386
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzTCCA7WgAwIBAgIJAPjdB2ZZ+e6eMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGIMRIwEAYDVQQDDAlsb2NhbGhvc3Qx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKsVuocDMy6GHOy6sOSWHhola/IbFgKIWru7eb1klOa77ztlSkphRt4CI/r5
+4P1LmRtaV29iWUrUKjTbOKC26CsdGJMWXKKQP5xec65sqfUMsETNpLHIKMnTiZo2
+aR4XP2rpDI8ujuh3W2BfWM6IveovaqhqN1xyyhkA2qb9JRyp+ZK6jHC3YP8pvf7e
+O2+3g9UDkzX20ecl5smt+HfH18DkZcKO6B5afx9B7K0z7K2K0OrCJxKRJKw5IAVD
+IRjCaYyYHsukrWny1efaH7XdFW7A9JdduhO2JQTDvzNMcji40QSjHG/xqMVR4aIX
+5vyE8l/6FN/8gzrDcxy/PQRPN6cCAwEAAaOCATAwggEsMB0GA1UdDgQWBBTjb2Qn
+McDS174FV0n28AWppRPWmjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAWBgNVHREEDzANggts
+b2NhbGhvc3RYWDAhBgNVHRIEGjAYhwR/AAABgRBpc3N1ZXJAemVyb2MuY29tMA0G
+CSqGSIb3DQEBCwUAA4IBAQA0l0h7YkvQkSGzgadyNrNO3PpUQW0hKe297L0eM2fJ
+ES3OkgQLU5C3XeR4Hwm6r+1qwD8CGeAGs2s0RsQXY34RV6OFKPyeM0xAVWLOem82
+AizOKeG/IlP84TTHhOWZfaIqZr1T10BpKrbwaPG1QZiKqxgwssvPHHOtI5TazrIk
+fP3ma9s2okxtNqMn6Vk/QjDGgUSGzZFxx6gcIcBfMFK3Nwp8v+FynjGLb6F0CsnQ
+lOlfZd4Z2qMMG8kIvx6Oxuqhmu+geR7/IWmlCUG6HIeFE5Pu1m7FOUJIVkTOiOYV
+cQIKzCqGt9JHQYjmIGyrIWyRJbg25ZCej+11t5wAIAFd
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5_key.pem
new file mode 100644
index 00000000000..45921a8b9ef
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn5_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQInmQOgfW/q6sCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECPD8x4AP2oViBIIEyMA8T2EZNuH3
+2BKDoUBJfiXtvirStp1uYLF5VITZ5L3sEBPMbm3xXC7R3HP3KVyyGsvCd0V+H0/+
+Y6GVyB13C3kyBcjrlJtbrzBzsYV8jRLi5aSNRjQdG06QEFSHPKBpK4EkajK3K9VG
+Mdwkz/sm4ybpf/a7uWLTrx39Ybzsp/poO9CH1m+7uRO9EB0f/xbovO+oLtfozA52
+v/n42wZSkILHw5MsQtwOcy/iFGJ0JECKZ0Q9/GqRHZW2AZGEuRSxlXdEjmsEZB4G
+JOH9GHa6V0eGnktpJbiu0SGqcTgvUFm8Z7v4oPYI1Z40LaljAwd/8pv7karWbp0N
+ZUEdUKCp9kzwvcUBJifAFxerkY/cdBraB/w0GA2qGkmGtpG6frBu+R68F35X6jb5
+uVB3dJTmI902PMBeAMm7LrqSVgr6nRotdGBU7UvA4AaWmtckP0hsTltkU/HT5DIa
+dl3+EPc1gfYGyV7v42woyYSWCfwEO56h5kL4INdKUafJ5liix9y4zorbRs66NO/a
+H4HNv3NBSEwBzFYvYtekXN8uuOuPBaIWl1kZ8JgGSogSnxCq0wt2D9XbrGmhSQnR
+yTNS8Ntn7xMIO8OrqMsHWvH9JyYv18s3O6jdP3rWYUSeSF8xkddJaJJDRmbyplkU
+P0zsjluMoftFvMeBgRzcE71QX4UbXZfD7Bo8AsE23INVXUzut+wg5+F0WPKW3oOU
+zDQLp9G/eYRzvE6i87am9ZOTkoB3hCIHhG7yXJKehbg/ESsxWx+V/g9bhfbCJd6t
+q4UOJLz2BCnKh3uI6sloF0OQJqJEUShsSMCsQTzt2lEmO2RP9HPSGZH0nKisMLWl
+qpCaA118O2fIg2ZsWX/ongyP9XKpg52xCob+t0vglbE+mx3Ew0DwPDjuG+7OGulN
+g97uE7+sdMrz2sJkpqu3qqoh3Z+Xpg59yu7pGcAZ+3vZKdBj13oFcYIlnVukgn3k
+4WqlpXQ0Bvjwh6toZy876wQTkVEJMv+3eJqKzLBZmRRdCMUhCQdcRqGJ9KHEOwtY
+DCcu2j7qwN3ll0bGQ6rQiHaWKVWUzzOEyY9HWkCdHchjcwSmMP5ODD7QzF+wGUvv
+R/t1bbYsoI2INyNPTIXp7ji0mtVUu9s9SsP0jrXUQM5WWtxlxYVD1xxj0euHIEvs
+tkuzNr8q3ngpJNob2v6lnK+dj7XFA7P6+uu+e84KNnIFKk+4do+ZRzElb0btg3LS
+gWs2m/TtCnolwi0kX+tF6Yyr70ddDOsCqHCqsfGJiN2BP0Meo8ozqNs7zGYuZo1o
+Yk6KbgGwcpTlpG1vZ2KrB10zblLInMlE333TQdwp/vftmwz0DoP5E1wJZmPEkTxh
+nRo7zbC67Wl0B7YAi72ZQPLB4ipYyRaNU50ycNcL/0plU24qeGogOrcTAW8BA5RU
+uQGW3adLqw7eRHO/S0cJP0TW1SwOHwzuiA1UEiv+HW7K7b9EiZnLSGL/3KyIAXQn
+LoN/4iSJlj6C7TJhu+7kMnZwCvuOGz2T+y2x9w8HyoRDUg9EeLyBy3xqBrKDlAHy
+/Yy3z+Y1dbJSMch80ZkHPAG6WL6/Px6AI02qIm4Z2EumPOwn/o4WXgpSaTo4Avtu
+OWYT5NrDG1MGB0Kpr2NfgQ==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6.pem
new file mode 100644
index 00000000000..1d06cdac957
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEwzCCA6ugAwIBAgIJAP2BPBPs9/CvMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGFMQ8wDQYDVQQDDAZTZXJ2ZXIxDDAK
+BgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0
+ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkB
+Fg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKB566ZcFEHBv1PXwC6MIdriYjbz0HNNqnWtjT6b7xuZiw8sghuTCho5KP1MF6ss
+qgEWL/kJwLXQLTDFFE7Ou+eyhNOqBqXJTNFgZ7Bn/JLc1i5QtvfMqmcHenVm3UT5
+iUENLnDU+3v+soxV8GUbLDd+JCs5tY5dnvqAbumQInLbFKC0g69GSfHzC1PceaKY
+Umb5ZJh/Q7Zx/GqAEP+/KGuHucax9jsGa8xBpFYulZxlu/J4dGm7DWMPUm1Ht9oZ
+8YA0m4VsymP+XDZMA5X8hTtXzaEdwaBf0201AY8GKWTGJvPzmlBaTCycQdayDH1M
+gQMFOU7K2AiPSdV1BsHaqH8CAwEAAaOCASkwggElMB0GA1UdDgQWBBTqbh1yow2p
+Yn5ArkIbcUNQVF9wVjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv6GJi
+GaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQLDANJ
+Y2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAwDgYD
+VQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5mb0B6
+ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAPBgNVHREECDAGhwR/AAAB
+MCEGA1UdEgQaMBiHBH8AAAGBEGlzc3VlckB6ZXJvYy5jb20wDQYJKoZIhvcNAQEL
+BQADggEBAH/UDYumjsPfFxjUee3Q+Jehv4EXgWidOmT4/ORG7cm3DuFJhsiErv4b
+Nyuet+LfAlM7/U2Li0SH/eedjz/C7nLDaGWO88v32lqYzR4L/qYQZNhlNlDdIV9S
+Upa4oXTY3Y1fWt8PSK4lsYVXDpNRyiUqqI5xHYAncEGrAolrG+KG7y5jX8b7pid1
+Xct9dhcRNikoIcm+ePZNpZOJT1jvCO/r28g67Pc9wdTjvJSWzDnaZFFHrICvsW6Z
+g6ZxPq1TMN9yqMZb8o54ab1BHAlkGS33qZ+pcNQ1vkCpuFTzazAGuztVHNkFF88h
+WCmPLrqKZADr+WorGTJYTbTZoUXIkuk=
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6_key.pem
new file mode 100644
index 00000000000..91c0be73c4f
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn6_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI7azkUeN8YQ8CAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECEa2VJQTz7BeBIIEyBO0Mvi3c++5
+PoDMTAq/WLP0UZXxq9jo6E+c0uV/FCsReEbN8b80L0JdKV7Dkk/+ccYwnb7uvirR
+y90BQakj0x/RBllis7oG/4aEhXCaSF4xHGzo70t2QdcW2B8KZcthOVNyF6XKQUt4
+gsJLoZg/wDyvY/9xM3GmeyWfJ8YBY9WfhDPO87omNCo+PEJg1Oi8jOlkev2Czsra
+HywQqu47AKTgFQXi9e5+sONo5sa0kpFtinbc9NQSIWFcSmEsWoANZ0AirV3FJ1TL
+CPSiXfphLLbV3yiaC2bfOCFKxNnkvY2V6salrB643AT34V5WPxmCfm4KAXRzfTGo
+LGYRBajqeyNWs6N3T0BF/MlH8XZ62OOMdqeZ0feXFPOmHLZp25zmfXpnCKOFUTCw
+qNZG8qnBmzIe/XvNGLIYpjuO6Zv+aBk1dIL7JrGSk9534kxZI762dF8s3R1KE9sS
+mSZ1EDFljifqgWM8/jcNgac6tBFsEGA91KbdL869yIKblXbgUcCE2SADFy767Jxi
+zpSNQCJ/BThnSVyVS59ZL4iSY7IrHS0RtMr+c6cvM/2JsqUC8CCbouBn+8qjSzRZ
+LozKamJuXpeQcjhwD9ksS7s+niPpIbFlobPK0yPCVFKwLZOK+fg2HCxZnAs0goCp
+YCiZtzRy2zVA0tPpbNksB6cr0SQKgkG9ReVSQcb5iowpfz64UnBdnjFSjc6P/4ro
+W4KWb4Db+G2lZe1ubFurLkm5Ug9/FASP2FkEx5i7y0+UerWIFnYpsdwL0PeBI468
+KfBScWBoKYuwqFDkEiMezp7P2R8hgyDIX/0INWZfHFB/V8gwrctkx+2abqLVtyHO
+btkmYw9pdCsAxLh6UNfUVtZKjCSYMPHRykEW5uuxG1ECkD3W0BtNkHEhfiwLnbMe
+dF7LQObRxV1QXuJT+k57E91qQitEMvD5krtXf2YkG73+pITsvtGJXmp/a3XGcXyk
+Mu3cdLWvG/XctTUeOVm0xSudJWEWDb2o2IPt6I/jHtHmnqJ+naDkeOsl7NWOhmzv
+yfAZBsTNCVTyxJWwp0T0xZOVBHHjsYOsdQRGobZSh81bhloSAXi07erotx54PpHt
+WLdCU+1F58c7irVfmysrO8N/NmdDFS24oeA8gEmxV1Hc4FAFjM/kM63DGXNAyBCa
+4G6HGGv5kscq7lPe+N8/QoeGzRbrf6tN+LDHS6rLMG2x7OgvlbJeWf++CQj07QnK
+0J8QvWbM+w2dLyu+bFnSsL89WWsOew3B4+A24JXbeGZhZdTpIU+uAhYFnWMvMpum
+/6ZofPFsEaf3aS0zcug4vsvE/TGELODaJXdOtm/WKCd0aCRfhlsnhvvuID94YhyE
+R2t3jqJwJ/nHc3ghv9HfIQJbR6foLR/+3mH3ICaOACbadv7SPr4mF+LGt3O/1w99
+GQjnq/Srhun+scN6CrAdTJszSqrpfq8fZjQBAW0al52J27zz941MZhoqjOcwffXf
+kDG1v4JFUOWmtSBPumySWN5cfzxze5DNHrCT3r0cyfra92nzwZ2hU2kYal4qDHV7
+3MhMxDR4ll7/S2jhM8cRGPPVWVDlhf839c4JRXkJ3kc4rFSLqioxIOZkKCip5Apm
+b/aziV/B3nRV/9kCAyUzWQ==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7.pem
new file mode 100644
index 00000000000..5dea1614fa9
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEwjCCA6qgAwIBAgIIL9LiO0uZDNgwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
+BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
+QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
+A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE3MDIy
+MTIxMDMxOFoXDTIyMDIyMDIxMDMxOFowgYUxDzANBgNVBAMMBlNlcnZlcjEMMAoG
+A1UECwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVwaXRl
+cjEQMA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEW
+DmluZm9AemVyb2MuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+xFzwRFE7O3o3GiVKYZiRBD1+h5hrKFhckGyEzqdVutdPnTWUX1pChwT+isX2vi0c
+fss4tHM2dc0l6xQp50Cuhm37rTlY5sdNoRk0zzRNY+3UY5IeJLTgpmO1f6+YvrvU
+uAaTfHsiFZQATiHHjWgFK3xx13/8Wdn31lpDmf7oZdf459+PveUpLxK9iQz8V6UX
+tDL+rcTUsFD2N5GMH0h9fuUTrkLVqBodK6feD9qQyIteR28TwKDYxIlc+Wwx5KxF
+Z+AeYvJ2wtCKimy6g+G0cQwg3dtJ4N3OtN4EbWcHU2FLs99roMfXVh6Eh+eD0/Qf
+7ZAf/dqCSkOoFz3XQUinAwIDAQABo4IBKTCCASUwHQYDVR0OBBYEFGSele0L170R
+6PexXhcNTBSZxsl6MIHCBgNVHSMEgbowgbeAFP7XxgZVu03CluMlwNTgoS/oYmIZ
+oYGUpIGRMIGOMRgwFgYDVQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0lj
+ZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNV
+BAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHpl
+cm9jLmNvbYIIae4r8hQdO20wCwYDVR0PBAQDAgXgMA8GA1UdEQQIMAaHBH8AAAIw
+IQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG9w0BAQsF
+AAOCAQEApBbKAoPRP18nR0p3BKPEFcgH330IwOXdVliooRUjXi0KDKLhBs2RkKud
+D6xEAplksh/k4roqh3imKc6gsFGiz81pS9+GhpcWkBMqPruvypaNzoPnU1XRD0xZ
+HaR8LybWX8OkEmTEFxuJcp2oBD+rSAS0RBGQrC7Psh+dOONONC/eU6NKD9En+hdR
+n3avyHfTQHrJSQTP1GiNjnoDanma0tIlSIzPsaqRJddpK/zGffmQrpQ1WeIKQImM
+Bjk8cNvisE0u6jS4BG8yc7ua4iUpU71JwJw09dLXGtorXjHQw588LiR9IUzoIbOc
+2HLYROu9hIM3Ub2SQHvXOHJv7VAE5A==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7_key.pem
new file mode 100644
index 00000000000..db692f2b091
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn7_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIW5zetLue/0cCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECOPdNyEWVmg1BIIEyI1AZlwwVgQ6
+39cUktU4lp7lXM2cQenF0dOVkzDhqL7mBxJl6vGSUr5H15MkE8L9hjZOi3MVw0IN
+RFpDNHOB7oHWU04sjEHa6Pd18E8lEWuim/hHcTUzCIUod+OG8DjsLSFqADtK5oZP
+Dw90Kt1lYEUD7lprMRyZgeTTNarrhVrhgPqmEyNiwbTYIvPJUBmPiXMZFdibSs2n
+H7kIlDRXf61JfP5H62iIGGjnA35YweQNSvrjwgGjvMeqBrTE7FqK4feOMB6YS7Nc
+Kexg+lFuzPSta3HwKjkDdUFVshRXDPivF4sb1iw/Cl/Xc8J4eTUDaz5rZlRGeL/8
+ngqijBCerxOlosVdAaebM+e2AGRngEbnB9UHnC3AFuxMCxsxD2JH9QcuJJuRLvxb
+/zWQ4dWPzB7Qer9ng6/dlWc6zKQQ9YqgbCEvh1Kr/ulpuzrY6pIxHE/+RAfd4vg6
+pydJJfR7/v0Cry8JhlhUAYyTvEJiEk0BNJnUJuVX/xGpMN5AW0KcccNTqFudCyhj
+S69cjplggR+6um3oxl5g/gPkM5b6WBImurDdrAGYallsERdikkEZ0FBGKIaHpjNK
+gRLsKvw+U7PaWOHWELqiiD36+uUTSHlMq18mDO+YpWyMk2yvr9huQOUN1/mOnR5T
+aAmodQREx5YQ0AJ4ItnR1WqKJJZBrcC8FObBjeWS3t5N+7M0foOZo102LZcVM7Aj
+Sc0RlVo95wHu8fhFv6a7vVJpwOF6y64GiyOuo7OvSizELdo5QUdK9OypW5Np03zT
+ZU/pWvk/oiTE2bnVHoxAA8UelF2KHhGurKH5J8iP3wLycOeIQiL0xXwx+KhYg6+d
+GUJxTA5UzAhTlXbL0l6xE5QxhWrZd/cAWVU2h9AzNsYqqGZgS2TlGwHLL4xOLlBY
+7MzEVdrLHFyd7j3WwtbCu2mq7P/2sebqOr5dOPdE4Iqo9vS7XTxw11rc6yM9zCcN
+wZajSMn+nbAA2tTrXYcNH3bli7NLodlLfnDkXZD1BF0nCWVUUyEkfBfnclNScoow
+cKQyBsIGig5YuJJ7XUJRgJFDAOLR8LJKI5kcnXrspMYcHNj4moUBYDfKdUly01pm
+q8SjVbhqCmD5leTUpAKKVnFIDiR0tOkzwTA2AuREkzxuXvMGPNIczl9SmDRlgauD
+fVgs5VpZ2RGG5FlGiA4nv8XsPIy/cdlINt24uqmVGEbSL3seQQRKqqWF4eoiE25I
+dMuKwDM2pBw3xAubQ0uN4SmmqGCGG/CK6fBWJvWSUwTPxdBEgtRF/oila2E4ZDTM
+EcmmSnZjnPDXN5n+dwReAThmumRyxUOkWI0uyB5DhpP9mYY7aZZsx5fpmRvJYvwh
+OyJHYx87pBvIFXmRl7CCzM+SUurRcOpc6/hz0udWBNQR9PKusPjfKaWX6m8wTsuK
+PVth1s/V9/xINjP/62qgvhVyYQrvsX8Ab3flvuQsNSdE6vdTGRclBJozrU4wZAQ5
+FvCwH6ESsed+6JzVi4OyvJY0pdTabp7P5rooJICg5uHV6SHs984qQaD1yNwJiyoW
+0U473owT1+fxBPUizquODQsKycLt4WQyJ02YW0jV+T+toQS9SbwHoRTaghia9Eax
+2D6wwl7LMu+sWmuq/cFEkQ==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8.pem
new file mode 100644
index 00000000000..45888275f1c
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEtTCCA52gAwIBAgIJANJXqxY7yVqIMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGIMRIwEAYDVQQDDAkxMjcuMC4wLjEx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAJjPEKUpvrb8X8j/WdXJC+Cgm7Ij/w4cVbolZjoLYY8IhavW81HGMzdXngr8
+aW74I98/p2h+1KRSlUMUIRgHmjYyMbwPNCGeV0PMmE8kNLc1XUyxX0LjJvPevuMM
+pTxw9OsV7ghEUoJN2JjD6rd02Qp0jiKSCQEf3ie/UR8z8Xb2le4FvOgM6AXGQgha
++9d0WZjPRrMmkKIKkVhLTzk6w8BEJ6KUyfQQrcDIXpElPVGoDWhSRBEEl5etzgYE
+7+lmO6yZw12D0w0QPSvssa0xWYcCgpzh1RKChCO+sXuaZYRpO5zMP1u97/8wSEoB
+kRK9v4Q+j6RBo7wte6jr/S7zVLsCAwEAAaOCARgwggEUMB0GA1UdDgQWBBSSAvEG
+QkNtNxBSnx4BehPz/zoLTjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
+AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAgUyzmA3jQ
+ftTT39Y+FG3/EJicTJUIyjuj7MBPmXHnj0X3fm5cXvHiOnW3U7z0BiqXjsoGFn0f
+kNcLrDqZ9ahiDdIMtwO4e+l5YWZyXbuFVoo4ANNe6JJjPVaiWhPiItrYUQiyCpO3
+eu3atDvaOWyCYElhdEkh1XMbPjLbxcZzujww5D4dnp6BI7adbAsATp1vmKyBmA9s
+s1DwHC+yLVJ9MJkiZhN04yk5y/+3Uq1ZXlLb81qft3S26pGJNAO4InRfDx1rO5p0
+eYnsfHMKLTEOqDeLYp0kYwCxe8uwOi5GBmrsc3e6AwxflHMSt9mmEE+FPYN6EMaY
+8eXMy+3ByCCG
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8_key.pem b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8_key.pem
new file mode 100644
index 00000000000..37d3d7941fa
--- /dev/null
+++ b/cpp/test/IceSSL/certs/db/ca1/s_rsa_ca1_cn8_key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIqrf5RQ/gXcgCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECL6/X/P50cPqBIIEyGwoWYqFMB5Z
+WgxMkoGPDZC7izJdi+yILy3D0QtxBmH3nHWr4LM3HOM39sFPAaXwY7yRH3jGP5nb
+wXuolUJVY7mnySnlhyHH+O1JyZ60tSKr6LS0X3kEtgGcHSyFIBfwczUPczeYEVUV
+HtAxf9YVjm3JwtGvmh00FNLbksj4H7LWRlXTvvsNm/6OISvL8zvGGSyPyZb/hHpU
+YfE1W1UDCULjQRMmH9x38mEFZXS1dZTDRn2Te8Ls5doNEu9C35FAmWGRXkHi3W+c
+IYs8t4I6aqsy8HFpiBx/2dDnVMAwgmbTSuxro+BZENI0Z2PHOZTvHRSNPNnoV/WH
+SZHUTwRkydkX7ofvU+VAYjUlS1qERRaGPygDbLO3qgPu0gB5xkUfwYXB4JnyhH6c
+yISVnM1DQDplWaAvoXLKBLtPqMwJITZZ8hadvXKxyGEdGaVdx7PYdwZWf3VuusuG
+4wFtfnCT220UXeeI0SLPNuE/W7ECaQIwhikZSLwHPQC+wFXHn6UPxl896BMIMr9C
+SL8hFT+tkwakQZ7TlO8cMzajX6OhTB64KzVDWrSH93lh+bbYCM/YB6InlsZBZQGW
+972pkfLos8oIE2gm/GlMdaVRk80KB/i5LOqSUc9/gqkJdU/kt95W+JnvcGvc0WDZ
+WfQk8Wzm8Z1IbZAjrmfxTcBKi/8AWdIrWPpS21L2antFZ9zIzjCU8tKPz+jCCS7r
+kvgENsdVLgu6nwCUnH3DmckmuxkD3djMwf5Ml3RQl9YDJtz/+I0RosG1ZPXD7oPr
+ni63CyXrrFZ/Ka7hWPwfiQJWmxoexWxW5NziJdkDWgvv2k5qDSCkWzXMd/bhAW7h
+1Zfmvholi8iOOo1Xxd4PESFeCQsMVzedTrA1JfCWjWEvAAc7k6TchiNygSBUuPiF
+eVyUGSRJYcr8ZiaqimQcMQv5hbNK8p2vkSdBGhGhqA5hLRx7uBIym5k0HYmRDdAL
+TBnWRNMplh+qzVQYa/QqsHm1rBzPuNARLGcwWLmAr9DT8x4F9jlggl/tktSGmx6W
+nykJAcyYKgV8u9vPSo3byhRI87pX40dRhJzFrVS6VEd0UbEVlfFkei9e7jwBtYbr
+ea/mmCRyhuAhwkngj+r8e/nDeV2iagbfnXcWkM6+HU7XMlI4zQQAtxS/8PNvxGeG
+5A9m2A6wgdChQPbkTcHExHWjy+wzKGpEg9H96UJ+YsuHa46GKinKjzm19cb4qLZI
+OAsIN4ZKB29JHtA9XiS/r0XcdRwknvRgyZf9nUAbx4WPwdKGvAdHpiK0XuA07Egx
+SExLJpKbYAg8iHc4AorCxfnibAWf2bSdq82UnogrBMLcvXHm2qT61XU9hVk5cVvU
+hG+toBmFjDfpjXyBi20fJ6jdocowIV6VeL65H5yyvpkt11aSsXIVUAl77M1WwziS
+kMHv5t/gcqirxSUAdoKK2gHTipXP11vrOdJpQ/7zlu68fCiGr6bDflWW4z1QRYzO
+4KSOeszEvHDH8M7kxdlynA9fzx/GJdj8orlXjRm/CqWCOiQJ5V2a/3862aTvyRlQ
+q0ASscp6NhZaFHzJ74riUOsrjAb3eMDfuslJNi2GJ5fVFAiCYO88yVtfve483S4c
+9ajj72N6HEm5gjzFUc6l+w==
+-----END ENCRYPTED PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/makecerts.py b/cpp/test/IceSSL/certs/makecerts.py
index 265c4cf9c83..dd4766156cc 100755
--- a/cpp/test/IceSSL/certs/makecerts.py
+++ b/cpp/test/IceSSL/certs/makecerts.py
@@ -102,8 +102,16 @@ certs = [
(ca1, "c_rsa_ca1", { "cn": "Client", "ip": "127.0.0.1", "dns": "client", "serial": 2 }),
(ca1, "s_rsa_ca1_exp", { "cn": "Server", "validity": -1 }), # Expired certificate
(ca1, "c_rsa_ca1_exp", { "cn": "Client", "validity": -1 }), # Expired certificate
- (ca1, "s_rsa_ca1_cn1", { "cn": "127.0.0.1" }), # No subjectAltName, CN=127.0.0.1
- (ca1, "s_rsa_ca1_cn2", { "cn": "127.0.0.11" }), # No subjectAltName, CN=127.0.0.11
+
+ (ca1, "s_rsa_ca1_cn1", { "cn": "Server", "dns": "localhost" }), # DNS subjectAltName localhost
+ (ca1, "s_rsa_ca1_cn2", { "cn": "Server", "dns": "localhostXX" }), # DNS subjectAltName localhostXX
+ (ca1, "s_rsa_ca1_cn3", { "cn": "localhost" }), # No subjectAltName, CN=localhost
+ (ca1, "s_rsa_ca1_cn4", { "cn": "localhostXX" }), # No subjectAltName, CN=localhostXX
+ (ca1, "s_rsa_ca1_cn5", { "cn": "localhost", "dns": "localhostXX" }), # DNS subjectAltName localhostXX, CN=localhost
+ (ca1, "s_rsa_ca1_cn6", { "cn": "Server", "ip": "127.0.0.1" }), # IP subjectAltName 127.0.0.1
+ (ca1, "s_rsa_ca1_cn7", { "cn": "Server", "ip": "127.0.0.2" }), # IP subjectAltName 127.0.0.2
+ (ca1, "s_rsa_ca1_cn8", { "cn": "127.0.0.1" }), # No subjectAltName, CN=127.0.0.1
+
(ca2, "s_rsa_ca2", { "cn": "Server", "ip": "127.0.0.1", "dns": "server" }),
(ca2, "c_rsa_ca2", { "cn": "Client", "ip": "127.0.0.1", "dns": "client" }),
(dsaca, "s_dsa_ca1", { "cn": "Server", "ip": "127.0.0.1", "dns": "server" }), # DSA
@@ -127,6 +135,12 @@ savecerts = [
(ca1, "c_rsa_ca1_exp", None, {}),
(ca1, "s_rsa_ca1_cn1", None, {}),
(ca1, "s_rsa_ca1_cn2", None, {}),
+ (ca1, "s_rsa_ca1_cn3", None, {}),
+ (ca1, "s_rsa_ca1_cn4", None, {}),
+ (ca1, "s_rsa_ca1_cn5", None, {}),
+ (ca1, "s_rsa_ca1_cn6", None, {}),
+ (ca1, "s_rsa_ca1_cn7", None, {}),
+ (ca1, "s_rsa_ca1_cn8", None, {}),
(ca2, "s_rsa_ca2", None, {}),
(ca2, "c_rsa_ca2", None, {}),
(dsaca, "s_dsa_ca1", None, {}),
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1.p12
index e88bd852150..31b77a4e6de 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1.p12
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_priv.pem
index c4756f51b86..5766c5258f9 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_priv.pem
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_priv.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA14rRlqGMCzNdE33lMLCd6IzI++BIBvk6km070bsVi8hZRRqn
-jq5hXHkB2/p4aLmT6+LFJwfB9MdSl4Y6VY7VBRg80trhuyp/VPuzxrz7Yc2517m6
-yQk8u6tlgb1vcLxXV1JbGq2tRixf/EKfjlJwEGejyr0aqObxpsXFrdteMTva1wBB
-CKa78gVBzJkV+TaRu010lalkehQUow9sboQcN5LTKG+ajtvp42nphPMXH1rg6eNR
-Rs/BgVkfchV4Mh+01m1A3aeIOspw4p4s97B4ga/70k12So3WQasm3aUslAT4AsuG
-nnl3iVf5LTB+GstAZVMe0NsX0oaLMX7P6H5q1QIDAQABAoIBABtJptkkIJ+2Y/04
-vhBY+9TaJgPFVDkVynWJQL5/qe2lcq/N/RKSPx8+7p5T6nSPsgt2DTGwyLxdk7Y9
-Nxtn1s4rUF/9eACDE9XFe/AYMtch/XozOFOFSNwViedP/VDPd1tFwOTywfIVYh2E
-rcCN7UQWauUa5comWsebWDh3gkhHKSXlBd1/6a+OotxmT16Jkp2SYqLQILcOL2y5
-yErJD0XFrnA1+JKyRtvljo90zgtgLBXPqRqKey9artgPV0CfGq21wmSgIPxMgHWt
-DNAOHFaxnQG9X3iMpVtyaEHfyofaAAnYDeeXdG/nv7mNqUS7eGtvFEnnt6ILFON3
-8o6s3m0CgYEA7AgafFnFoaSr1sklnn+tqbtuSbv185gDSWbcByuOvE7JhbB2pgFP
-AoHAot1T9MgpQV6Zd6H0Fg1d8shfi8mhwxHtLY14KAvEFhEhSj7z8XshgS8TECGD
-denORKEy3hVWzngYbkaVhFfD1NkIopqgGSnQKJ4+88hXQbVpJtV0VIcCgYEA6cb2
-b+jcn4R59Oa4XzpQztk96kvugtWyLdlWIx9vH/P86m3PB9jm28ZbihJOKAsJxps/
-hDuAsC3KiqdcKHPGErHxdm/bRz1zH9mOVY8Vzuw1UZcXMANVK6vy3H0N7KKj7AXO
-aLr0BjhEs/J9PMXYnNpV1IFJ7X8SCf/+JgQXuMMCgYEArErSApmJMRBCO3wDEOrE
-etSNkhc5VwJMy+Tgkf9SptSgOA1y3oSwBvVuB7SmF1WQ/92tCu3Wfc5uGM35KNIb
-WYiZaBoPbrQAA9enREolyc0GzQTu1mSQUJ9F6UT+G6zZ+8cglkbB16Q1GAcBTaiv
-Ww7xmuTAsTU5tIZW5nkD/LsCgYEAjRbwapAOfxOUCzMn+QkX9g70qDAVjc7tD3DI
-5L+28IDvloiZV3IXunJXktgDZXVr+/p8dhD3VNz+DXp+S0e8NlJAmatemvtCPOmv
-VoHZtp2mfEyEyQxp3caT93Bd9AAgkHTcoyaZ2hshk7z4yrHZTqkS/gLdnEGBoJlo
-SIdVzcMCgYBUnJDvQy7XwWhXZIpPWgZiKL2IC0xDPOq1Bm9oJRY7zx8RdU26oiqk
-my3DwWuHFgHUdBjuDQtbWaXfOpMQidrIUxB22JP1sovxJdS6T4mYZaleDg63SBM9
-q2yt+RgaRQcITLl38aEXIvJC3EGZjgn8K16wxHyAlccrrnw/BKex6Q==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdEEfmUSP4skLQ
+l84UFcaPkiTVcH+GIYB7TBveozvHzilqKbiZ6uNEde4JfmK3OwgppSLSk3D8kFQ+
+QYmvn2q9sxiFzc/O8oskdfYo6L1t4O1EEqyJHBJTWqTLDx8rCuXLRXvWd7enbPvj
+/PcWRp43JvkgRDFyulGLfFdMWX+c2cbIcBl3eiQiaOHSB80SWxwOn74mdjlbdENZ
+OL6/g2arV9nOzbScn/iv3cudl+sKqb+E1knP3hxhJIvO2cqFJV1L6+jqKVaBoQxy
+yLhKdAr/K9iPgfXZLBpb9Vzf8Vfp/GarVjva+CBhOj4w63p0ZProWect8D+iOXyq
+yp6wwFF3AgMBAAECggEAR3aP8Fh88HxTcEuSBYt+4/ZP8hmUvHfj2LXhfGRzH89L
+ArXm+4lnTNAHtaQe0FX4udIcTQmvAAu/ePAi8JitXZDumHrzkarD6pwNm8GB50vP
+SQjiHiR6phh5ILdJrDDyK5H67bNdCb3Jwotn9We+N0PxWGAOy6/AyKGTqvaR3NB3
+Xd+Uz8egOurtbYbK1APtOteZjZyxQG0ufvXHt/XL2I7wDjgSklLKzsVTJRZna9mZ
+SxqfD4wupdjDGf2BaA0DHj8J6oCBl+1BHcPQ75PjMSaYVhS711Eergx0wGO/WdHP
+U1impztsu8SW4QFFWS8M82eky85VSlXs6ieYG7huSQKBgQDNbZ9m4ub5XwrcHnHv
+I1pd7wOZCEgwJzhgzwe6jlwX2EQC7VoN/xsX2Li3IfhyPW0MKBHPK9B/M2qTDlbt
+sJqY1GQlf5nEny6DEOeLJ0Mt0loiJlAJ92T3Zz2UW48oO+iPiprt1iVvUxdBWIjH
+1Qdx8BnOecy2tUt64+0qvbnP0wKBgQDDuqbHcp3uxjC/+k7OBLeANaHb+rZpc28W
+WZAbqEsnCblFAmaADlvf5CZyHgyEDfxp+Hw+C6gM2o8L5iJ079JvRkJIUWlOHB1y
+9TN1cla1jes5LrIA7qfplrFAb4AOX5dCoSglpNuWC3SRDcikpFvGIFRJeNB/qApw
+UXnn9R2VTQKBgHIyjnpTiLL38sGK6ytVK9csF4Pq5rZeFyk57cH3gZp/zs8Rww4k
+0prfD1A+wi4/l286lyvj33PW0VgOkKRxmH99Em8GECUNmH2j2BOzL9U5KoHxam0f
+6jDeY40lmN907kNdeeLdONI6DqN05BSyiAD+yFnPu82V2u/l5OHttm2hAoGAV6Yq
+MX6eQuL1ycKpr5BlLEDYLs5jCW3r/TI2WmxO2zh7gu/EPuwvMF/W55uVNz2cH0hr
+Os21f6wQCuAP5hXPQo1P+VqbsaLdfTFYzetZ8QuQnpbOl6RIBU66KYTE76rW7buF
+YvYkb1jJ5nspsrD3eA3aMNytYb06j3mtAba+fLECgYAvRpgmaKJ4zyvkZFfaFbDi
+j5dUVVWj7c84TZIhK+EzAksAc+F4Ij717+jH5iXLJsfZlJKaXHZPPper3a1yu9U1
+6Ch5mrs/6bEqLgWuGrdRgF75zzWlPYZlxARHWsHXZBlMC0Qg65ck+G3S1s3v5JfA
+3zaN3fRi/0upkmi2El1ofw==
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_pub.pem
index 337d8b48e66..65100bab23f 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_pub.pem
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn1_pub.pem
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIIEtTCCA52gAwIBAgIJANEJuarXnGShMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
-VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
-b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
-BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNTA0
-MTQxOTIwMzBaFw0yMDA0MTIxOTIwMzBaMIGIMRIwEAYDVQQDDAkxMjcuMC4wLjEx
-DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
-cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
-AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBANeK0ZahjAszXRN95TCwneiMyPvgSAb5OpJtO9G7FYvIWUUap46uYVx5Adv6
-eGi5k+vixScHwfTHUpeGOlWO1QUYPNLa4bsqf1T7s8a8+2HNude5uskJPLurZYG9
-b3C8V1dSWxqtrUYsX/xCn45ScBBno8q9Gqjm8abFxa3bXjE72tcAQQimu/IFQcyZ
-Ffk2kbtNdJWpZHoUFKMPbG6EHDeS0yhvmo7b6eNp6YTzFx9a4OnjUUbPwYFZH3IV
-eDIftNZtQN2niDrKcOKeLPeweIGv+9JNdkqN1kGrJt2lLJQE+ALLhp55d4lX+S0w
-fhrLQGVTHtDbF9KGizF+z+h+atUCAwEAAaOCARgwggEUMB0GA1UdDgQWBBR7piAe
-mqqX28rsqrZhGMfDp2ynFTCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
-6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
-DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
-DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
-b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
-AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCFFCYmn6R5
-XwXe8DjMWeAvP+JpQUfqPqQ5Yil11SA+8eGsJqUfgx9+90+sZ48c7kohDtNWSJKs
-ZofvFiTbSykjbKuyDaCElv71MtdZpR0kxAxNF1K+N7/F5SWsvOb43dWfhHqkWdCw
-Xo2m+igL5zwmMqGRFrnJLrYs6+Fusm+cgpznG4XzaLsR21j+hu3DTcOQNoTBMaUs
-7xKTjXRLY2wFXvzQ3d32Ga4niMEqweQsv2eJHRbUqzUhRNJ0UXuwxs0sXNpVCaYS
-Hg8IdkAEwLKH2I9yN8obmhBHlStP9jfzSYOw4a7KeLWyQ9iRj4rkkXUQ570wnasv
-zFeZFMVF5Y41
+MIIEtDCCA5ygAwIBAgIIQoFWIYE7CvkwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
+BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
+QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
+A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE3MDIy
+MTIxMDEyN1oXDTIyMDIyMDIxMDEyN1owgYgxEjAQBgNVBAMMCWxvY2FsaG9zdDEM
+MAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVw
+aXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0B
+CQEWDmluZm9AemVyb2MuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAnRBH5lEj+LJC0JfOFBXGj5Ik1XB/hiGAe0wb3qM7x84paim4merjRHXuCX5i
+tzsIKaUi0pNw/JBUPkGJr59qvbMYhc3PzvKLJHX2KOi9beDtRBKsiRwSU1qkyw8f
+Kwrly0V71ne3p2z74/z3FkaeNyb5IEQxcrpRi3xXTFl/nNnGyHAZd3okImjh0gfN
+ElscDp++JnY5W3RDWTi+v4Nmq1fZzs20nJ/4r93LnZfrCqm/hNZJz94cYSSLztnK
+hSVdS+vo6ilWgaEMcsi4SnQK/yvYj4H12SwaW/Vc3/FX6fxmq1Y72vggYTo+MOt6
+dGT66FnnLfA/ojl8qsqesMBRdwIDAQABo4IBGDCCARQwHQYDVR0OBBYEFB5ynD4W
+cyfHqU/g3UKI0i1EMv9tMIHCBgNVHSMEgbowgbeAFP7XxgZVu03CluMlwNTgoS/o
+YmIZoYGUpIGRMIGOMRgwFgYDVQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsM
+A0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAO
+BgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZv
+QHplcm9jLmNvbYIIae4r8hQdO20wCwYDVR0PBAQDAgXgMCEGA1UdEgQaMBiHBH8A
+AAGBEGlzc3VlckB6ZXJvYy5jb20wDQYJKoZIhvcNAQELBQADggEBAIJlyxl6DxnM
+zUVtEn/We+qqU5qIqiRDbxPoV2rPNiAvkexTXAC2qQfqmdtHW1EcBUPptHpApBJt
+P+0jYxkCjZ7YgjZ8LcxXkzW+TAKYtkhz5wlkEPCsfv4kgdHOAMOwDzQ8cyMuYVRv
+oGiEm3OlCgqPhJDPlpyx+S5yw7Ezt6uJj6AhISaXuUNrPYOZ9+sE57Ka/kMyVKvL
+JoB62iMx1aWQIUqWdEMn7CP6GK3lJVM//uMK8V64t3jaJbD7a3VX31jMbGXvxfbP
+n/AGDHGHj6pCcftL/XTsqGPzelRSz3bjXsUdwd+IAikkSrNF09ljozWY48ildJvY
+TDrqQafWBpc=
-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2.p12
index e2a53b6eac0..6597e476b00 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2.p12
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_priv.pem
index e8716ca4b40..625fe5b3626 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_priv.pem
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_priv.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAvvyMj4a8Px75ZX976d+2r3fRM4C1hqXPt7CqIh7Lb/7wjY5L
-PUFzJtiWg7ZYXy8EAjBQsAQMpmzVIEhFEuXxNtFbPEqJG31zBi7AtTt5xyelzdGT
-LNHf+uLBD098ap8HO69ZEwURL047SphIOzExNtO6oZ7jnCWWBKPELHJFtn97QxZl
-l84iS00b5RiiKtIZb+ibBDUoup+hCRrAgCYwPGTGZlnHtBICPAHgwo9DH5uk7Iar
-MjkDmVgAXO6Yl+o6e6y/DRk+7pGOeq5MdieRc9DfDOFsX4/3tSukfkbbAu2im0ZR
-Ge1SIi/sH8TRKY4abJVADl8Hz8Loh6FVa5NEbQIDAQABAoIBACuL7ATBxORjjJv+
-8GMIFmB14mZq33j/D5ijmHdFLD+yEmlEW5Vw+e+OjOslRYsWbkSNfahUlAnSYNoG
-gHFpqpFENRhPKmnxNavgNyJbmE23lY+TTIp4pChRUZHLHuQ0tHKAbb/vdNajcNN2
-W2nbsov8xN4bG2y8CTOvn4g+2fRdQTRAi0jtMgpBVcJD4FQPJsyZNFo3nwDe1sjy
-/TUCDVxJYEK7EJtavoJGD7Zy0nWKa3Jl5D+3rN79IdtS9TQ22XfvdSjshhz3VB6k
-FHaL/CzjZ6UmG6sGpZr8jpkFIvF08/5/L7lVk/63Lh1JkZZmpPQbaKJIU0q0i+eF
-Pl0SsWECgYEA+2PSBLjQ3zywFMC7Mm0xEK3ASvHvljCum71H8RPJeaRh7IJeIfjb
-NHWfGZJfkSRwFXoaBK4rcG7p/vcbjf+HA/Yl70Yrosqxg4+fjM+k1qNJ9STi65VR
-LTEv3FQlH8XjWTho0jyOn3HEhJJD9++51/GPAUuARWq+jC+iq5ERgekCgYEAwn0o
-ZJ1mkk0I/fddt7H9BGCBnxwxBxPsZqjettJ2iqmB1uzIfHQlPv+dAlpFGCp5GVOZ
-O71/RLDc1WDgYMPd96+afpDiAtYxMcGljswJ53ZNGhsES/hxuuowWWo57A3GgXNk
-739G7jvwCqOgOAz9x/D4bJxxvXXKs64qP6pZN+UCgYAsa0rkwrNFfreuMw/grSKK
-S+k6VN18sEVqB1v64QAsmjsjSzXO0uYIsu/V2ONCBio34UdPpGbQiwiVoJwhzxDQ
-RmIVkVSMgzwyfuI2Q0phEqEyy7282rlpPtOyHrwgjRrK3QjIfSLGUZfjxOR1nso7
-udcG54xWt7HLm28m2Y86YQKBgAGoraKGESzoSU5ZQMxjUUQrSo+/3s8vpVGO2S94
-BhjSr0/U/zTIjNTHu2AcwwAcxKGpq+HtkNtWItwTEnbg1NDbB5dSxwq9JvhErZPV
-O7Rktu2lE1lOijHM85KfrFTOHUZXZKICVOmNS1Pb527y9WsyK/xJLVMvYQY9UxDt
-9ArdAoGAQQZb5WdO0zeWB2GT6DKS0aiokokZJExpTgYmt1+doy6iUj7U9zfYOrZ0
-/x9YDw+m0yIAgPeWTjVAVx6tzYjwxn2/xwgi4tF/5kk32qv3uIwkYaE7z5wshwGu
-RQ+L2daqEy9uNfVQBKAgsWq4D1J1GySGyiCJz9EdYfoRUxioGvM=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2HWyUPZ5KsvjK
+h4vsTHAWfvI63g5pdYN+cHUaKAvpWnEXQRYSYnLP4YcJJWNZFG/ZafzTt9Y3K00n
+b/P2nmueosX48EN+RoYsBpcNcrsyLnf28Fi2nQdZQbp7t912IcZKrabZTYEYPoL8
+C8F3aEuDde2bJa5wTlaanV6DlbZptNFJBrNGgZSNB4Zu5Qc0rIHUM8TJYNWU1SrT
+mf9DNtZBTI3HTtDpw09Y9FthPD6/xRRfjDCHJNHOtL+kMAcJ0m8UbWKJpAhhdZFP
+ZDawd3fjjKK/RmE/GFQqJDScDsyvAiZF5jDo3yPUNUwFCQRGInpiTyMQcCwSirrH
+ASZN0rppAgMBAAECggEBAIxfI7kjwaYMS244imaqCF+em/E6BdvNw3wrDGgL5BqL
+Js5o0a18CsknKeGn2urnsMrhQgqjEc/WZZL3XRGDzKorBvO5phxoGbVHoxivjZDB
+dqB1Y7vmT6rB2g7QizgqEmCvdwLaFZ5tWKMUIJx8XHBI7st+gPV5vJFSqW49cKwK
+cUkbaLrQDXtWDHMJzztpwhBRzzCOYsncZj3OrzlN4cChsnZ9m1v7S2f/Q5EE5GR3
+PZO+/tBjHUlixMnTADOVQK0Wx40XzXt4ZpSk5joypczOEeWHJYSf8jYjS2Ew/zCL
+x54FLYW5tEkki5HMWKQS2ZM7S+TN3tqiFuBwgEPvjrECgYEA4/ARQln9lmLo7hY/
+pecyvNd+Ezbto8LmtVjwRiz6JHKMzqM0mdb5VGy4wdcZvh7RfGlECHS8/jafphee
+yXZRUqSt23Vc8rfeZXS5HsxEepc6VVk60vjPTx+HND6czxmSRR+oaeTpGz9PcD1a
++T/hpmoFBdczJs9+WZPoMY6cBL0CgYEAzIkntFMUMMjqmHEu2RBVKtrJWVwtDKbL
+HEecPhN//AsRmzrJGHiVJXh3MwbTYcD8qi0ARu2EdMnFnZKMZUTyMAgvcRXprAcf
+WRLtuwIcJ2jF1aNrywdM3KaRN1aLzIecuoyH5sFvVM/xljzmBlwjzSnVPrS/OBwT
+xq39YOlwhR0CgYAM8tdYKJqST34iAFuPRioItkkwOD+ZvPm0NaA4rFdteKBtILJd
+RuwVErQQNvL8bO3DnotB27fczSeWnOLlWPZXtok13V3xX+afZtkZWctOF4c10ALa
+d033lbftjN0FmtNHX/wGP/3KEXemzaV8YVelR4KPiWEbhFAOMKvRHOPaFQKBgEJ8
+82My/oU9SsVzRX9aR9U+eeWKiTprner7fFbRj/Emx/pmCajiydj8aAM2XNCSI5BO
+QKDN5Rjx3kNyuCDTYMcsYf+o1+UMC6yw8oawEObesDDahtfg76NqohoTEC7UhqY9
+uI/SoZY4YpgsA7pdiWXQC3nu15otxl/3fz5ZpDIhAoGBAI06xgXhMcT4goOoOFLl
+z71SqsuoLfiB7Gk0xvFPpK21eW7szuWZ1YIVmlcDPGA5l5D+YRyiANPe1vQsqFpS
+1P/QD99Ufi6zb3GpfKNzAlPwfYVuFWaY1xg4dOSScaWiyItDwCNaPwiMlqOU0Js6
+Kzz4BwYTBjcwjLPzSJYZ7OHR
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_pub.pem
index c54f190670c..43f43851545 100644
--- a/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_pub.pem
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn2_pub.pem
@@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE-----
-MIIEtTCCA52gAwIBAgIIJoFRkbPzeYgwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
-BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
-QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
-A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE1MDQx
-NDE5MjAzMFoXDTIwMDQxMjE5MjAzMFowgYkxEzARBgNVBAMMCjEyNy4wLjAuMTEx
-DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
-cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
-AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL78jI+GvD8e+WV/e+nftq930TOAtYalz7ewqiIey2/+8I2OSz1BcybYloO2
-WF8vBAIwULAEDKZs1SBIRRLl8TbRWzxKiRt9cwYuwLU7eccnpc3RkyzR3/riwQ9P
-fGqfBzuvWRMFES9OO0qYSDsxMTbTuqGe45wllgSjxCxyRbZ/e0MWZZfOIktNG+UY
-oirSGW/omwQ1KLqfoQkawIAmMDxkxmZZx7QSAjwB4MKPQx+bpOyGqzI5A5lYAFzu
-mJfqOnusvw0ZPu6RjnquTHYnkXPQ3wzhbF+P97UrpH5G2wLtoptGURntUiIv7B/E
-0SmOGmyVQA5fB8/C6IehVWuTRG0CAwEAAaOCARgwggEUMB0GA1UdDgQWBBQ8Ub4X
-Mn1Tae99mxRpu2zlipF/BTCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
-6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
-DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
-DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
-b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
-AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAZnA9BsWpC
-44mCDBEtS0J1UfKQoG8yH67tVul4YdqDC5aYfw2GOSTT/vPPUNmI/3Wa/Jb3CRvU
-WUiqVWoRyKB50gGnbE0kUQj2jv3IaNhsnmEZ0xKkbq5h2rNkKuhEd8Erj3FC83iP
-rzJVO7qjboYGVkukIcTsMpU3wtwohCB+8v1NDOlMv/Z9vZSeGwjebWJtDAD32oWN
-bmAbnjxEF5Uei3MO/fWK9wvElSa4TAXVS7+ovAzvs7o+ikD+cLcbtfXhMBZH0cg+
-y2Ht1A5mP1AsK04W96fs/ZIdZxiaVIjRR2hN4BUZYOxar0wxwy2oyDcyHTjuLKNn
-DohtzPbwUer8
+MIIEtjCCA56gAwIBAgIJAJQs7Na56PxiMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGJMRMwEQYDVQQDDApsb2NhbGhvc3R4
+MQwwCgYDVQQLDANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdK
+dXBpdGVyMRAwDgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3
+DQEJARYOaW5mb0B6ZXJvYy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC2HWyUPZ5KsvjKh4vsTHAWfvI63g5pdYN+cHUaKAvpWnEXQRYSYnLP4YcJ
+JWNZFG/ZafzTt9Y3K00nb/P2nmueosX48EN+RoYsBpcNcrsyLnf28Fi2nQdZQbp7
+t912IcZKrabZTYEYPoL8C8F3aEuDde2bJa5wTlaanV6DlbZptNFJBrNGgZSNB4Zu
+5Qc0rIHUM8TJYNWU1SrTmf9DNtZBTI3HTtDpw09Y9FthPD6/xRRfjDCHJNHOtL+k
+MAcJ0m8UbWKJpAhhdZFPZDawd3fjjKK/RmE/GFQqJDScDsyvAiZF5jDo3yPUNUwF
+CQRGInpiTyMQcCwSirrHASZN0rppAgMBAAGjggEYMIIBFDAdBgNVHQ4EFgQUKhSg
+z/uqY16GSxIx7T/RQWaFoygwgcIGA1UdIwSBujCBt4AU/tfGBlW7TcKW4yXA1OCh
+L+hiYhmhgZSkgZEwgY4xGDAWBgNVBAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UE
+CwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQ
+MA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmlu
+Zm9AemVyb2MuY29tgghp7ivyFB07bTALBgNVHQ8EBAMCBeAwIQYDVR0SBBowGIcE
+fwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWXAtNYyL
+ZIw7drl3McU9O8wRungv4DrLiddGvFnuK/Oy+m1AySQyFyjOyUaQVTy6zhOa1dBd
+3AN5TRX7bX9PKhrVxtoOeFsPec7JxetbS+tG+ov9bxCaRrbwe+EsyJNDr/dc690g
+x4YYJ8siDba6TDYA/T8oTMv2MQREta7TWHH78yEAvS4jUJHtfroiDb3GwIJdb5d3
+oNBMgVJwMcFe0A2voWOOVKsXoNBRDj3p0EU6a6F64G+yWY1JFcEgHxConAngTqlk
+Fl5TCcdGBcrGidqclPC836/OnV9w4Xr+Wr0MWdD8RkdqDSRT0PdnQCucFYNSrszJ
+nZPjAhCNBO50Gw==
-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn3.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3.p12
new file mode 100644
index 00000000000..e5444b048fb
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_priv.pem
new file mode 100644
index 00000000000..bf7cbc0e015
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDuM9nQqgpeqtQ0
+JEkPZ9DuAEQ9pUDGYsiz8UHQY85aJJh/MYLnqPCoH6ka53HmQI7XozyCGdxeBOLO
++39/9K627voVbAuFqEJ0UPaMyJ0j1TlB7p7nzo39dW4ZVQi5y0aD20zBKUdLGEM1
+5SVHBFeb+DyjRRvg6ywT8T6SRzvf8GObyRFWIsxHJf+s5gPCXM3WTAgYOnI3Heuf
+R3583Q5F5ISL2OMBOvd56Jj9J66U7mVJww2Dp0pVXgjO9cDcreJULLR/n3BYda9X
+BjaX9Ca1fxKMTnCx+n1bsDGBbiWnyNpHXxitlt/U0RIQPLO7OMCPPD1R2tN3DHp5
+0rDZXwTzAgMBAAECggEAa/HdXD0ic+IQRgzHew691I0UX6c6omxzrW/ANnJ0Oc9p
+uAI040xgup+WX5XQvNo2oSvdKMwVXBn0un2oOtEkN8w2UmzjD8+/RbzG7eefpnRi
+/Sjoo/2rxNdpbFtnl+KxcuF3d/V/1F0LYCoWaYdjOFAXEpon1xZbpDHn/BwB2ynR
+9qZrzp9B8pYscOD5HyMSUGP7eVQQsOmZ6IfNIgfXntm4BJ84rn7e+GpKWSPbInoF
+pve/W8/6BpdY0dIgKxRy4u4AVu8v2jtaoGZZDsx6Zu1cOPPDOWBE1WgdHapBrkaE
+w1ZU81GsP+92bLPNcGacNP3kmmjxAi4bObB6/yzd0QKBgQD5j5W0v2rGFCl6zE3l
+oCrEr17KWuCjwidYP7EGJ4UR0jmZ5FiVRxvkSn83yeolzap3n15zfhdD/Mwq5Lb4
+CV62+RQHXS0zvn3zWVP+doDDmFTjtj1Koaf5GXCBczOwXqNyaP6lmrlgfbrRHWrX
+bqWqpbhKAV4IvyHSt6PRhmFyGQKBgQD0WT3DCPCDex/nNjYX1xSn0CYA/AeMIKip
+pVeDiC8AfRGmFKkXCWbW6+zBoo4RH7HY4iASPwLDvFl/kdUNynONzK5DJ4k4EFVS
+KLNe0K2sMqfx38gaUobji4jxa+wtuCrsDgjwScbW8mAdI+78VlTudD3vZf09pTpV
+WtWBOX6I6wKBgEl0g+IRvYHUCWmFnSALhsshu0rgeOJ6kU4eYSKomzhlomKznYdC
+yOjnLI7lNbAu2xAerpRb9skiLY4qh9h2GZTNt6F7QYTLexMXpetuQfRQcBweVegT
+sPdXD5BqsjolgQJ5+QoRgqLuHwDSIdKLVOPnp1jREjaM243EU8mmPiRxAoGAc/ys
+kZj7uh3G7hTQpo5k8qeecpcv6fdSuHyQxxHs5bl4mDJ0dUf0Ng71apEECOLXpBDq
+kl6wrEMK5MBPtuUj5uqCycPJogA2z/Ib+uTpm7TL/cdxD/WerAJ/NcI58RXb4gNj
+gNQ0e7G/p/V3qvY8CJjLEYmDJTD6OKwObvHgu5MCgYAf2NZB3qVhnslNC9sEmaoo
+iyopm9+prAr9RG0CdkEyMxwngOJi4z9Rw1Ym3hQoGPM89L99SxeBBhIuxuMpjmj1
+Wj883WNx6LEpO0fCAYkiuk1gMw5KVHqygrTCea0iuXuILtLegOVQMYn8V33u9pdc
+anhzXQENhVCt4Ng7o9zkUQ==
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_pub.pem
new file mode 100644
index 00000000000..a06c101a83a
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn3_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEyDCCA7CgAwIBAgIJAIFeKa69VILFMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGFMQ8wDQYDVQQDDAZTZXJ2ZXIxDDAK
+BgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0
+ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkB
+Fg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AO4z2dCqCl6q1DQkSQ9n0O4ARD2lQMZiyLPxQdBjzlokmH8xgueo8KgfqRrnceZA
+jtejPIIZ3F4E4s77f3/0rrbu+hVsC4WoQnRQ9ozInSPVOUHunufOjf11bhlVCLnL
+RoPbTMEpR0sYQzXlJUcEV5v4PKNFG+DrLBPxPpJHO9/wY5vJEVYizEcl/6zmA8Jc
+zdZMCBg6cjcd659HfnzdDkXkhIvY4wE693nomP0nrpTuZUnDDYOnSlVeCM71wNyt
+4lQstH+fcFh1r1cGNpf0JrV/EoxOcLH6fVuwMYFuJafI2kdfGK2W39TREhA8s7s4
+wI88PVHa03cMennSsNlfBPMCAwEAAaOCAS4wggEqMB0GA1UdDgQWBBTLldzy1rEH
+NhpECcN86858xyGqnDCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv6GJi
+GaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQLDANJ
+Y2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAwDgYD
+VQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5mb0B6
+ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAUBgNVHREEDTALgglsb2Nh
+bGhvc3QwIQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG
+9w0BAQsFAAOCAQEARG6kEexSM3smfskWc/py1oWn9E/czk9DeS3gomAHAXqwLky8
+5FxsDB1W762LR/39qA9TDO0GPK8ouXv52RPHg5l6p52SDAD3wk32PuBgORN/WN4d
+ZN8qVjwmDiob9SZH92QULN11gKGkM6EMixGzqRxitbCtkkRixlkkvs6M3SOeMWSo
+e31+LNSVVI9Rc+MJlvx5GysRWRPF9Lr63R+9rs7UvAJjuR8c5jeeA5H517RzzvSQ
+V8KMy9Bu7Ukn/BPwsp+QOwvj5Q1AHianoWQ7PcDeo3P+wPW9BPQWm6+DMUHybwVP
+MPnM1+HaYjwqvgodrcif2c+rpzHvSzsTiq4Okg==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn4.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4.p12
new file mode 100644
index 00000000000..225fe79c8ee
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_priv.pem
new file mode 100644
index 00000000000..cb43b1321d6
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNllfgV023St4H
+G/z7Yn6Z+3oy+r4LCuuWwszSVOj3gcvacJdPMVfiIcfnK6k5Qryz02W0iFO8kVQY
+gKY7uGtbA+PqvSfeAO4608Rm9jJbWmjExs6x7EJXy9BLPXGBxFsT9DcwmMMGyRVO
+3tMMJOFaEltQNG0OLtm+mka0Ya35DN77iHMSHSit4uvoACSKSBIy6TNyZedXUqbT
+ojNjnPhZvvia4f+aGoUgYYvBKYuxMHdxYqVJbrUuAPF3ivcCUrbRzWtJ0CvW3Bf0
+cFr1+A56pBmqkvaxSCxacTF0UCPYb6XKjC/31Ezx061sWXIB2wcJZafasM8Lqdil
+FTy6GgtbAgMBAAECggEAd4WBX07CQt6GyFFQOYHgonreZ0b5N4hIwORNmbZ9nm9a
+aYttnD/OnQwQoOf0QPL4q/8psNRVAlrnLjuU6UFlQIu5dJ410E5wMckt9MILMqsU
+H9qJDk2RoGNAnI2DMPNMFAS2FU2qjIZZGfpXbkb+sJPdfHqOMGGye6pLktD7CL+U
+9z6UfEEEUI0p6iwSCGVw4GgQTQxuqk+hKhEaENDMtO2HBJXWNbA5WfkRqm5/JMyK
+819xi9GKo17Uz4VoN1KJZXUY8BP6q+UqfFcLsOdxFyAYyO+4bmrgv0c3v18twxvv
+j6Erz1seYaSqLbyGPacBkgBxL9Pt4xuER4lFRLECmQKBgQDtaT4rf6uDkMoowpTT
+OU82A5LJtHaRhkan6ZAuFXFJEgLuwpJb5FSdK9helxOMTqGPuYdXZPMRjg6nvwUV
+Gbv2J2xNEMAzBeyr0xJeIc13P6fhBLAEfN1zz1jOZbFzQXgx0B3GiW7mx/NODisO
+gzcB19rWXppnbdxtGOzIM8DlZQKBgQDdrzYyxyTuNl7N99ueC0C0UMPQQmo2w18q
+t6msjFJ4SYNzmCOZEgPcjvm/qyEwA9fCwfPgSmqEIHUQp3LV/asBaOLYdWEXh4t9
+BnKDjuSLnb8PGPqztC7Yzo3ZGVZP3+4aOOZE0pp+hzkVn9Waqb9/2vDyEenRyh/1
+0S2vEUuBvwKBgCyplNmIDhMVJQLgADFwYZduuqmZeojL8vTZupcAz6wIaGbUUcZZ
+wRVET1MUJshJbplkNLLbOeL+j4E9LU6X5cVcC0LAOPggUDLO5XCx+T5KymFJiXd+
+qgaEZleFyAk/ssXkOgXEiwl9aicwASecxbdiDTgw2elFQKeBfeH34n0FAoGAecXl
+X79E6hWzvjCI0ygbQvGanqvc7HglrrF04vOx2aGIM9c+trbOqDlht4epk1aJDtK7
+xFkcabfqlltlGWdeqEeVVJIl42bxmJwSC3JS2N6uNPzjuhMgKLhN8xOX9ghsIrte
+wi9t7lMZaGeETpEwQGtkL5Tne/Yr2DwvfBtj/sECgYEAoqIThi0mYtlsQMlWZxIT
+8lzub9FWxSnTcXQIbNCCZeNKDRoGUUS3K/iuIAJ/i/38AzzU+k6z4xQkilIo7Jyi
+bJr7Ur1Bdg4kdG1zAXphiAuyLovxVgvID65fVam7kPiecojXXnv0yDr4DaRKyave
+d/F1R47wMTjk+TWgTfm8bl4=
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_pub.pem
new file mode 100644
index 00000000000..d7eede37947
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn4_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzjCCA7agAwIBAgIJALxy0DDzJCx/MA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAxMjdaFw0yMjAyMjAyMTAxMjdaMIGIMRIwEAYDVQQDDAlsb2NhbGhvc3Qx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAM2WV+BXTbdK3gcb/Ptifpn7ejL6vgsK65bCzNJU6PeBy9pwl08xV+Ihx+cr
+qTlCvLPTZbSIU7yRVBiApju4a1sD4+q9J94A7jrTxGb2MltaaMTGzrHsQlfL0Es9
+cYHEWxP0NzCYwwbJFU7e0wwk4VoSW1A0bQ4u2b6aRrRhrfkM3vuIcxIdKK3i6+gA
+JIpIEjLpM3Jl51dSptOiM2Oc+Fm++Jrh/5oahSBhi8Epi7Ewd3FipUlutS4A8XeK
+9wJSttHNa0nQK9bcF/RwWvX4DnqkGaqS9rFILFpxMXRQI9hvpcqML/fUTPHTrWxZ
+cgHbBwllp9qwzwup2KUVPLoaC1sCAwEAAaOCATEwggEtMB0GA1UdDgQWBBQ+j72z
+Nw64fmS9w2CFMNJdGWw68jCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAXBgNVHREEEDAOhwR/
+AAABggZzZXJ2ZXIwIQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTAN
+BgkqhkiG9w0BAQsFAAOCAQEAmg7UiewzGSHnT5LaEPmzojVYAZd1LDqGL4/f/qlH
++FdhZRHsrHG7hXxnapP5P+jPuYfaRFtc77YOqilHVlOSXwLHy2zd84Qy1s9pSBwF
+A+4o6eIzKZzNKHf2yiyaV2TMYzxxCWLDf7F4JRyCFy5eUBui44QJY8j6MZhiq+dJ
+CbVLHggSGlyCnCKH5Nx8FIcKHnAQiaBFVG7jQsm3ucmS8OJbt6A4ebmCj6eoOe1I
+HabuT0nceUrJpU8hKPsj+2DXUPzI0ph9nwaJ+uJ0o5jXs2r5zj2YxhXvmEqogqCR
+V9ExMQwcXuDDjxkZDGjtpB4a3G3xIfQx/Fyl68q/9UI3Iw==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn5.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5.p12
new file mode 100644
index 00000000000..d325aac9b5e
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_priv.pem
new file mode 100644
index 00000000000..d9cce8f327b
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrFbqHAzMuhhzs
+urDklh4aJWvyGxYCiFq7u3m9ZJTmu+87ZUpKYUbeAiP6+eD9S5kbWldvYllK1Co0
+2zigtugrHRiTFlyikD+cXnOubKn1DLBEzaSxyCjJ04maNmkeFz9q6QyPLo7od1tg
+X1jOiL3qL2qoajdccsoZANqm/SUcqfmSuoxwt2D/Kb3+3jtvt4PVA5M19tHnJebJ
+rfh3x9fA5GXCjugeWn8fQeytM+ytitDqwicSkSSsOSAFQyEYwmmMmB7LpK1p8tXn
+2h+13RVuwPSXXboTtiUEw78zTHI4uNEEoxxv8ajFUeGiF+b8hPJf+hTf/IM6w3Mc
+vz0ETzenAgMBAAECggEAfLI2pOdRK6y2cljUS5ea0yXJWsohLbFiqIhJgCBKYy5B
+fQIjtrjWJURcIzZzpUqvin87UUTWnjKrnKDX0lPePmZTngljdV077+Xr3Qr4iVI5
+O7zDOI0SJaCYH51e2n7JS0wXSlj98jPklwaHvOlvurvaumvIdAp6gOTdeW7y2MNc
+qETrU5HP0Uf7HcVDvvrQ1wr3RhpJuvbYwXtNmi7q7RyipzRXZ1g128QRVk+N5Gwt
+ENcIJJh7PKhwZK7+lX6Kc1gnBjGLSZpQI2tthFEEQkMR3u3wnOHT5aF18Dnx/epU
+tDV/ZUTncRWTBLnMD4+nglL7snKIF4v+X+92uBFUGQKBgQDjyI9qr+2Rd6a4yIrQ
+mwNY7HpPwJ2gbUHSoCZVdwHW2p3+5xKAXIbA6RdU947oawERpThwzXdabIzHVTas
+ti1VjTWWXp0itPzTXOcwrDKjQP6J2eZ7foj93fvFQijVYUcl4YgcK6hfPc6N4hm0
+VmX4E3+37cUt65tBrCIS0947pQKBgQDARyaYOsWPAfU516Pj+Oc2BN9CBu6eP4To
+sNekAKs45jENKKe+O15VrXiiiI029aAtw+ZvJePRIn5JtSjN3LXjamyGsAdr3PBB
+YJBvQvRSUOCjOkZ7ccaIh0TZ+aECcIK5V4TRcYBiBCp+0kpvi5ahUq0VdfrYQPWq
+ZTnmmuC0WwKBgB82+9hd9YtqvzExYjyGEaZc+cH2HmO+tTd89OPfZCQiX2ZwGgv3
+IgxLpQPizPWyvDnDz4E91u5QU9Z5Kf3vFTVVHZPWsWfxL3hzkccMwf+3R2pyrvAb
+fgB0LC1zDI95PjvFtVZO8Urj+GtfIbCh6mVdnrIA5nWNhQAx65Vy7VB1AoGAKDD3
+NUzbrNfo7Y1Qub92fQkprcCLMlLuskD84lAtejhLuodsAMyiHGClXbwTYJCZSdew
+HD2cUEPYiAmxHM7syjudsc2rz3UgV1oa9tbVATvcqOHuh7Exoao8zx9p83uXJ6zO
+m4URI+vhAh9s5cIU22XPvjOqGngBofuEzdpD7A8CgYEAkBURXs1q8PtRXRGZ7xKm
+Nqt07zAy0Io1+60wfUJXW+Npi6Z3OQy0hzTkFkH3trtU3VjhhBWzk6KjhdbGdnTm
+Hgy9S0s+iftPlIMV/H/LQMu0UxnBqObKH/vhgnygbDs+ppI1nVHXi3DK1zSUVnVg
+tARo1+NjxkBAHSGi+Fx6Ot0=
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_pub.pem
new file mode 100644
index 00000000000..85c395be386
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn5_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEzTCCA7WgAwIBAgIJAPjdB2ZZ+e6eMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGIMRIwEAYDVQQDDAlsb2NhbGhvc3Qx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKsVuocDMy6GHOy6sOSWHhola/IbFgKIWru7eb1klOa77ztlSkphRt4CI/r5
+4P1LmRtaV29iWUrUKjTbOKC26CsdGJMWXKKQP5xec65sqfUMsETNpLHIKMnTiZo2
+aR4XP2rpDI8ujuh3W2BfWM6IveovaqhqN1xyyhkA2qb9JRyp+ZK6jHC3YP8pvf7e
+O2+3g9UDkzX20ecl5smt+HfH18DkZcKO6B5afx9B7K0z7K2K0OrCJxKRJKw5IAVD
+IRjCaYyYHsukrWny1efaH7XdFW7A9JdduhO2JQTDvzNMcji40QSjHG/xqMVR4aIX
+5vyE8l/6FN/8gzrDcxy/PQRPN6cCAwEAAaOCATAwggEsMB0GA1UdDgQWBBTjb2Qn
+McDS174FV0n28AWppRPWmjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAWBgNVHREEDzANggts
+b2NhbGhvc3RYWDAhBgNVHRIEGjAYhwR/AAABgRBpc3N1ZXJAemVyb2MuY29tMA0G
+CSqGSIb3DQEBCwUAA4IBAQA0l0h7YkvQkSGzgadyNrNO3PpUQW0hKe297L0eM2fJ
+ES3OkgQLU5C3XeR4Hwm6r+1qwD8CGeAGs2s0RsQXY34RV6OFKPyeM0xAVWLOem82
+AizOKeG/IlP84TTHhOWZfaIqZr1T10BpKrbwaPG1QZiKqxgwssvPHHOtI5TazrIk
+fP3ma9s2okxtNqMn6Vk/QjDGgUSGzZFxx6gcIcBfMFK3Nwp8v+FynjGLb6F0CsnQ
+lOlfZd4Z2qMMG8kIvx6Oxuqhmu+geR7/IWmlCUG6HIeFE5Pu1m7FOUJIVkTOiOYV
+cQIKzCqGt9JHQYjmIGyrIWyRJbg25ZCej+11t5wAIAFd
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn6.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6.p12
new file mode 100644
index 00000000000..ac0395851f1
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_priv.pem
new file mode 100644
index 00000000000..7364e617834
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCgeeumXBRBwb9T
+18AujCHa4mI289BzTap1rY0+m+8bmYsPLIIbkwoaOSj9TBerLKoBFi/5CcC10C0w
+xRROzrvnsoTTqgalyUzRYGewZ/yS3NYuULb3zKpnB3p1Zt1E+YlBDS5w1Pt7/rKM
+VfBlGyw3fiQrObWOXZ76gG7pkCJy2xSgtIOvRknx8wtT3HmimFJm+WSYf0O2cfxq
+gBD/vyhrh7nGsfY7BmvMQaRWLpWcZbvyeHRpuw1jD1JtR7faGfGANJuFbMpj/lw2
+TAOV/IU7V82hHcGgX9NtNQGPBilkxibz85pQWkwsnEHWsgx9TIEDBTlOytgIj0nV
+dQbB2qh/AgMBAAECggEAfw9Jp9SsLUxsYsQm5DQL8jTgssXlPAY4eyhI91ObxGyU
+EBWbhp2rmAu+CqAe9WdNy8J3hWVVch88SKsiYyuI1/Ee/kBXNxjle7orHx+Weenk
+o5NA637fROhE64PgmmZBaII5TRk1bX3CfR7mUgdrwRxdIuR0fh5ea9UY/FElFW5j
+8jbDW7TXKfQAWT6AKp7V2D6xjKgTOQdGpHmcda0YGJs3bvHmx1Z3kPiOkpxHBnPj
+8id7HTqKL8db8FiKn6KpSWWfJ1U+VIZ265UgpCjl9ZeKD5auUgmtUvekZiSdz54n
+DAPanGs7fuG+hc+lhGhtNbnD+fPDSVhhIsW6W2W1AQKBgQDTDcTOMNR7eqqcHaXQ
+K/g9vFunTMBvuvk9q/mr8ztOBtsI67k5V8VK85iXNjZeeKQ7yTKU7kUB+l1i8RuZ
+wmInHbl+PeUygXVU42S74Nr/+5mfbQCr31fHD0SnF5qVbk6IK2QBrUTVOXXP1Vmo
+/NTCLi8Ef0qOpilqPNWEosABPwKBgQDCpsP9gtMUy1CNsdpg6lxPy1Kc59f4RxSJ
+hdFjrk6P+kWeo9kL23aS0rhEusx8jPQd04L2nfAudwYzh453oAtXCfMQqiYMrpnn
+aeS0JlFf/6EiOCzX0zTeE9o8ETZqJ68mCjEi19f2wb/uC7wCbgRGBM4vlRl3VGNv
+E6kfgUBIwQKBgQCbx3ztSEN9xMPrKUL7TYkUYFQyP0eG8LYJHEfT8Ftks1C22+7C
+cZNxSC3n5p7oyhlG+7G3FcufsyF850QdEMoL3zfMA3mJ9t4YwyLWPhjHevkgIH+v
+XNHYXt+oiZaTF3EltwlA55h33cqklfBw9/U+QoJ3ylDIy8Kj5LUhClO4VwKBgHhV
+ZkZb0ShCxKrEL4/Icob12D2d6lrXfm/CJX8tK+5ANzfqbOyyoOwFjtsWbAH3lZa2
+wni5jNj8xf2nKMD1VO1a/kPoHBus+QIh6bwhEB97xd6Ewdwu+rjrpveJYI1huRqY
+JGY4747hmkiMQo9x+fxbTigGUbb+mXX6vov2eIpBAoGBAMXpJEfMu+qKG/Ir3HPA
+3eut8frAd59ZNJrX5QS9/jk8aktDktW4FjHy/qI8E4nVZef0knP8BBE1JoRh8iA/
+OOWkgmgZcK67QtzwMuowVyGAF9bhNCo9i5uuvaJTPQ1jgzaHYc/bXGnVX4lTLU4t
+LgFtdfUEu4DRRbUbSZ09kN6f
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_pub.pem
new file mode 100644
index 00000000000..1d06cdac957
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn6_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEwzCCA6ugAwIBAgIJAP2BPBPs9/CvMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGFMQ8wDQYDVQQDDAZTZXJ2ZXIxDDAK
+BgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0
+ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkB
+Fg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKB566ZcFEHBv1PXwC6MIdriYjbz0HNNqnWtjT6b7xuZiw8sghuTCho5KP1MF6ss
+qgEWL/kJwLXQLTDFFE7Ou+eyhNOqBqXJTNFgZ7Bn/JLc1i5QtvfMqmcHenVm3UT5
+iUENLnDU+3v+soxV8GUbLDd+JCs5tY5dnvqAbumQInLbFKC0g69GSfHzC1PceaKY
+Umb5ZJh/Q7Zx/GqAEP+/KGuHucax9jsGa8xBpFYulZxlu/J4dGm7DWMPUm1Ht9oZ
+8YA0m4VsymP+XDZMA5X8hTtXzaEdwaBf0201AY8GKWTGJvPzmlBaTCycQdayDH1M
+gQMFOU7K2AiPSdV1BsHaqH8CAwEAAaOCASkwggElMB0GA1UdDgQWBBTqbh1yow2p
+Yn5ArkIbcUNQVF9wVjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv6GJi
+GaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQLDANJ
+Y2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAwDgYD
+VQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5mb0B6
+ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAPBgNVHREECDAGhwR/AAAB
+MCEGA1UdEgQaMBiHBH8AAAGBEGlzc3VlckB6ZXJvYy5jb20wDQYJKoZIhvcNAQEL
+BQADggEBAH/UDYumjsPfFxjUee3Q+Jehv4EXgWidOmT4/ORG7cm3DuFJhsiErv4b
+Nyuet+LfAlM7/U2Li0SH/eedjz/C7nLDaGWO88v32lqYzR4L/qYQZNhlNlDdIV9S
+Upa4oXTY3Y1fWt8PSK4lsYVXDpNRyiUqqI5xHYAncEGrAolrG+KG7y5jX8b7pid1
+Xct9dhcRNikoIcm+ePZNpZOJT1jvCO/r28g67Pc9wdTjvJSWzDnaZFFHrICvsW6Z
+g6ZxPq1TMN9yqMZb8o54ab1BHAlkGS33qZ+pcNQ1vkCpuFTzazAGuztVHNkFF88h
+WCmPLrqKZADr+WorGTJYTbTZoUXIkuk=
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn7.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7.p12
new file mode 100644
index 00000000000..0eda88aa84b
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_priv.pem
new file mode 100644
index 00000000000..f50a64f084b
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEXPBEUTs7ejca
+JUphmJEEPX6HmGsoWFyQbITOp1W610+dNZRfWkKHBP6Kxfa+LRx+yzi0czZ1zSXr
+FCnnQK6GbfutOVjmx02hGTTPNE1j7dRjkh4ktOCmY7V/r5i+u9S4BpN8eyIVlABO
+IceNaAUrfHHXf/xZ2ffWWkOZ/uhl1/jn34+95SkvEr2JDPxXpRe0Mv6txNSwUPY3
+kYwfSH1+5ROuQtWoGh0rp94P2pDIi15HbxPAoNjEiVz5bDHkrEVn4B5i8nbC0IqK
+bLqD4bRxDCDd20ng3c603gRtZwdTYUuz32ugx9dWHoSH54PT9B/tkB/92oJKQ6gX
+PddBSKcDAgMBAAECggEAAYyOJKvTYMu9BYrHxG9UrYjip6UvKzlPOaBxh8PQLFIo
+gZ/7lKj8n14NuACJysRGVkW6I8pI4rMEmo8lKXrcJZlWg+5Q4jkuRpgRT5UlCyXE
+KCjt7fIzV3yv4Nr8xHxs2CrNHQ1Hno31Vqhzj40DhW1M5JtQ3VCX4OwDXoKhSLRg
+65kkdnDRxGfFTMGdJzn4sbMBfPmEqzc/1miNEp/Gg1y+qgieMlYD+gqfPWevhggs
+Anso/AiBdBJwL0GwQtSgjn4uyhr+7fAVU6tYkL8kn+sNYc4k6vsLe58xKackWmJ1
+6K8jFtuYRuhBJmXUCRfbUzw72EaF72DDYCs1PevLwQKBgQDjtPlLIbH9NqVorP4z
+qGTQqX4SxWMCvUFTnWvJEHefHVL8UwLsTiJKg5A3xQSGkp+zhK+Ry0vhkJ0lt0xE
+J7XCtfqSfcw/9O+JtoEAyjD1Ma7F5j1geBgLA08z8gaj2hUlNadKG7ROyvh+kLSu
+uugOvMmR+6b49oP9J2SEQdc6YQKBgQDcwvYVR+HcogCKklIry+isN+pOdIKtcGDQ
+0mdhbHolndpfQ9ZT1adzjoriMZ6d6NNiJLTg7yWvHjBr5ZeAi4B4PKv3sr+yoNAJ
+XjvTbZRWvM0dJGqNPzJ4l/hkHiJ9dO7qAuaKf0puDR0U/iRCEqnRRMzzwqNW3otN
+YnAlYPjD4wKBgALnmBaBQ4f7XnjLXCLEjySqRNVwdybdyyuJ4ooaD6yT7y8Q0AS7
+qmxQ6VIMzVX6INdlZefyM/GYqqiEghCMgSEOuTeNK0HVmgijr1mXOrCmBZi4qyfD
+4GqjjCsZd0Q3z/U9jfjACbjHlgvnRKbF85fciKW4FBUw79YW3o1hWaGBAoGAH/ND
+hE7z/Geh5mxI4jfPw+UPzy0DoLBsAq0A81Os1fbjnPgHc/ivFIVjylreFwKUXVbs
+qsVR0edvoJ4I8DzAaiZ1yRKgteyaT1DJHc91MZx/nyEfHrQvzM5Jz8uguEGNNmcX
+EKJdllHljJ0/iCSFWVk4xGq+ExuAU8HUc0R2nHsCgYEArMOVdnMpS1brpaBzBd0B
+i2ejaX0c0thjzL0lGBGH2v/eSaanqGDCtfRnMUcpPbC/B9zKWwj7QRd7T1jgRkWE
+/unoVDHsg1rRnwdxyXOjOCBmHybivXaJ3G2t7YrrTgFJbQrIM0GA5OV1YOYPc14Y
+IbvyHHPx9GquYbxIAlxT9bM=
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_pub.pem
new file mode 100644
index 00000000000..5dea1614fa9
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn7_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEwjCCA6qgAwIBAgIIL9LiO0uZDNgwDQYJKoZIhvcNAQELBQAwgY4xGDAWBgNV
+BAMMD1plcm9DIFRlc3QgQ0EgMTEMMAoGA1UECwwDSWNlMRQwEgYDVQQKDAtaZXJv
+QywgSW5jLjEQMA4GA1UEBwwHSnVwaXRlcjEQMA4GA1UECAwHRmxvcmlkYTELMAkG
+A1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEWDmluZm9AemVyb2MuY29tMB4XDTE3MDIy
+MTIxMDMxOFoXDTIyMDIyMDIxMDMxOFowgYUxDzANBgNVBAMMBlNlcnZlcjEMMAoG
+A1UECwwDSWNlMRQwEgYDVQQKDAtaZXJvQywgSW5jLjEQMA4GA1UEBwwHSnVwaXRl
+cjEQMA4GA1UECAwHRmxvcmlkYTELMAkGA1UEBhMCVVMxHTAbBgkqhkiG9w0BCQEW
+DmluZm9AemVyb2MuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+xFzwRFE7O3o3GiVKYZiRBD1+h5hrKFhckGyEzqdVutdPnTWUX1pChwT+isX2vi0c
+fss4tHM2dc0l6xQp50Cuhm37rTlY5sdNoRk0zzRNY+3UY5IeJLTgpmO1f6+YvrvU
+uAaTfHsiFZQATiHHjWgFK3xx13/8Wdn31lpDmf7oZdf459+PveUpLxK9iQz8V6UX
+tDL+rcTUsFD2N5GMH0h9fuUTrkLVqBodK6feD9qQyIteR28TwKDYxIlc+Wwx5KxF
+Z+AeYvJ2wtCKimy6g+G0cQwg3dtJ4N3OtN4EbWcHU2FLs99roMfXVh6Eh+eD0/Qf
+7ZAf/dqCSkOoFz3XQUinAwIDAQABo4IBKTCCASUwHQYDVR0OBBYEFGSele0L170R
+6PexXhcNTBSZxsl6MIHCBgNVHSMEgbowgbeAFP7XxgZVu03CluMlwNTgoS/oYmIZ
+oYGUpIGRMIGOMRgwFgYDVQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0lj
+ZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNV
+BAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHpl
+cm9jLmNvbYIIae4r8hQdO20wCwYDVR0PBAQDAgXgMA8GA1UdEQQIMAaHBH8AAAIw
+IQYDVR0SBBowGIcEfwAAAYEQaXNzdWVyQHplcm9jLmNvbTANBgkqhkiG9w0BAQsF
+AAOCAQEApBbKAoPRP18nR0p3BKPEFcgH330IwOXdVliooRUjXi0KDKLhBs2RkKud
+D6xEAplksh/k4roqh3imKc6gsFGiz81pS9+GhpcWkBMqPruvypaNzoPnU1XRD0xZ
+HaR8LybWX8OkEmTEFxuJcp2oBD+rSAS0RBGQrC7Psh+dOONONC/eU6NKD9En+hdR
+n3avyHfTQHrJSQTP1GiNjnoDanma0tIlSIzPsaqRJddpK/zGffmQrpQ1WeIKQImM
+Bjk8cNvisE0u6jS4BG8yc7ua4iUpU71JwJw09dLXGtorXjHQw588LiR9IUzoIbOc
+2HLYROu9hIM3Ub2SQHvXOHJv7VAE5A==
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn8.p12 b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8.p12
new file mode 100644
index 00000000000..4c0037359ba
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8.p12
Binary files differ
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_priv.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_priv.pem
new file mode 100644
index 00000000000..0eef4f76ddc
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_priv.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCYzxClKb62/F/I
+/1nVyQvgoJuyI/8OHFW6JWY6C2GPCIWr1vNRxjM3V54K/Glu+CPfP6doftSkUpVD
+FCEYB5o2MjG8DzQhnldDzJhPJDS3NV1MsV9C4ybz3r7jDKU8cPTrFe4IRFKCTdiY
+w+q3dNkKdI4ikgkBH94nv1EfM/F29pXuBbzoDOgFxkIIWvvXdFmYz0azJpCiCpFY
+S085OsPARCeilMn0EK3AyF6RJT1RqA1oUkQRBJeXrc4GBO/pZjusmcNdg9MNED0r
+7LGtMVmHAoKc4dUSgoQjvrF7mmWEaTuczD9bve//MEhKAZESvb+EPo+kQaO8LXuo
+6/0u81S7AgMBAAECggEABAufTjAPu3ps8r5H25AJ/3VhCdNIIlB/uIDa9vhsKcQ4
+/bagFG8h1fo81d+ezvBEytk9jlelO4BwMSlsQt2YqIylomvonmc5ujLFaXr05lDE
+Wo5rjjLDSjuAZDRmf3YiFcMr3Q4p/Qcgj9LH+Plf8ZXqWWHyWRRF5ll7RU8zukl8
+bxFJOAsjx1nFMaLyl6XLfusyMNy9Sg5Cfmsx0NCdL5TcvwiKgakT3COLyJFZSRu5
+AxbBDiHYul+G9vmL4kELQMm4rhAXpmEBRD6QLl/QjYUW/PsxUXX5i0w2hhw/Vs3J
+5tXJ6hf07g8gCu5meBsYt847ih0vYOS30fTRMtskWQKBgQDKMsNFIPBBV3J9OaU9
+vO7nIhAuNgqaV3oofIUWcBIla4UGvR8CNMuZQOtWGE8QFgvcUVVKv65+kU+Qi/lA
+hQjVUHJBarWXCoRBwia3NoNc9E1BNYawX6WauHPktGLNUdUYVXNdP0hsv0hImMX3
+Wv77uw/N190oZKSViVrjdHoVNwKBgQDBeASaG8DA32FpHl3EzZchy8fuuSwrllLy
+kguJMwlWcfRYicnzr/xokj9QKiw4YRYyvZtr+y5tZCwrslWg9ifDovt38mWEF7KL
+iH0sWEjs4iSUwl4ynpr0vYN8UMSWH9InBeFng52kl/xYgmTbAgbxZLVFqEiFqKxa
+cOuscRc+nQKBgD161+LyE/taMoae+35dLyr6MX9LkUfCp3MeAX2EEBBus+ELqh0K
+nol3stbXx1p1yZ9w34U96Tm0x0OFPAGBMeFid4sqfhJx8SrpdMoqeiDOa5sTQmPo
+gTsdMKfurUgOxMOEX/KPZl8ifkEMqsz+Tx+Njk2hgC5jA6QwQoF8jg5bAoGAdxa+
+lnIg61hVaNRlWeBHeGksz5iyRL5KnsAhU7nTtJ9+jgV7B4K7t07WpCzhfW7dsCwg
+gI5kHLf9rIQgy2zaO0WWz1WpAW9o2xUQH/zUHuRxKhSe0T/qGF6TkjFRYSuDO7wV
+7JcKsadQkNbq6BjOV0brgk49HfEe7qj1mPcgHM0CgYB2NOcOcm93soJTyldlGuyH
+yunysmWotJQjEQvzdb60UZvCSElbZC2yHFQLKV6IzNXkQjrMhhOZ1dlCYl3rzT+5
+qhJofhGCI3u30T/1o6dF6RO+r+8GhQ9h2O99YksPNd5WHFt63Emz1+ur4k7dlnJp
+jlKsW6Xbm41luaeJuzY12A==
+-----END PRIVATE KEY-----
diff --git a/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_pub.pem b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_pub.pem
new file mode 100644
index 00000000000..45888275f1c
--- /dev/null
+++ b/cpp/test/IceSSL/certs/s_rsa_ca1_cn8_pub.pem
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEtTCCA52gAwIBAgIJANJXqxY7yVqIMA0GCSqGSIb3DQEBCwUAMIGOMRgwFgYD
+VQQDDA9aZXJvQyBUZXN0IENBIDExDDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVy
+b0MsIEluYy4xEDAOBgNVBAcMB0p1cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJ
+BgNVBAYTAlVTMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHplcm9jLmNvbTAeFw0xNzAy
+MjEyMTAzMThaFw0yMjAyMjAyMTAzMThaMIGIMRIwEAYDVQQDDAkxMjcuMC4wLjEx
+DDAKBgNVBAsMA0ljZTEUMBIGA1UECgwLWmVyb0MsIEluYy4xEDAOBgNVBAcMB0p1
+cGl0ZXIxEDAOBgNVBAgMB0Zsb3JpZGExCzAJBgNVBAYTAlVTMR0wGwYJKoZIhvcN
+AQkBFg5pbmZvQHplcm9jLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAJjPEKUpvrb8X8j/WdXJC+Cgm7Ij/w4cVbolZjoLYY8IhavW81HGMzdXngr8
+aW74I98/p2h+1KRSlUMUIRgHmjYyMbwPNCGeV0PMmE8kNLc1XUyxX0LjJvPevuMM
+pTxw9OsV7ghEUoJN2JjD6rd02Qp0jiKSCQEf3ie/UR8z8Xb2le4FvOgM6AXGQgha
++9d0WZjPRrMmkKIKkVhLTzk6w8BEJ6KUyfQQrcDIXpElPVGoDWhSRBEEl5etzgYE
+7+lmO6yZw12D0w0QPSvssa0xWYcCgpzh1RKChCO+sXuaZYRpO5zMP1u97/8wSEoB
+kRK9v4Q+j6RBo7wte6jr/S7zVLsCAwEAAaOCARgwggEUMB0GA1UdDgQWBBSSAvEG
+QkNtNxBSnx4BehPz/zoLTjCBwgYDVR0jBIG6MIG3gBT+18YGVbtNwpbjJcDU4KEv
+6GJiGaGBlKSBkTCBjjEYMBYGA1UEAwwPWmVyb0MgVGVzdCBDQSAxMQwwCgYDVQQL
+DANJY2UxFDASBgNVBAoMC1plcm9DLCBJbmMuMRAwDgYDVQQHDAdKdXBpdGVyMRAw
+DgYDVQQIDAdGbG9yaWRhMQswCQYDVQQGEwJVUzEdMBsGCSqGSIb3DQEJARYOaW5m
+b0B6ZXJvYy5jb22CCGnuK/IUHTttMAsGA1UdDwQEAwIF4DAhBgNVHRIEGjAYhwR/
+AAABgRBpc3N1ZXJAemVyb2MuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAgUyzmA3jQ
+ftTT39Y+FG3/EJicTJUIyjuj7MBPmXHnj0X3fm5cXvHiOnW3U7z0BiqXjsoGFn0f
+kNcLrDqZ9ahiDdIMtwO4e+l5YWZyXbuFVoo4ANNe6JJjPVaiWhPiItrYUQiyCpO3
+eu3atDvaOWyCYElhdEkh1XMbPjLbxcZzujww5D4dnp6BI7adbAsATp1vmKyBmA9s
+s1DwHC+yLVJ9MJkiZhN04yk5y/+3Uq1ZXlLb81qft3S26pGJNAO4InRfDx1rO5p0
+eYnsfHMKLTEOqDeLYp0kYwCxe8uwOi5GBmrsc3e6AwxflHMSt9mmEE+FPYN6EMaY
+8eXMy+3ByCCG
+-----END CERTIFICATE-----
diff --git a/cpp/test/IceSSL/configuration/AllTests.cpp b/cpp/test/IceSSL/configuration/AllTests.cpp
index e460532d584..95214c79a20 100644
--- a/cpp/test/IceSSL/configuration/AllTests.cpp
+++ b/cpp/test/IceSSL/configuration/AllTests.cpp
@@ -1165,14 +1165,19 @@ allTests(const CommunicatorPtr& communicator, const string& testDir, bool p12)
comm->destroy();
//
- // Test IceSSL.CheckCertName. The test certificates for the server contain "127.0.0.1"
- // as the common name or as a subject alternative name, so we only perform this test when
- // the default host is "127.0.0.1".
+ // Test Hostname verification only when Ice.DefaultHost is 127.0.0.1
+ // as that is the IP address used in the test certificates.
//
if(defaultHost == "127.0.0.1")
{
//
- // Test subject alternative name.
+ // Test using localhost as target host
+ //
+ Ice::PropertiesPtr props = defaultProps->clone();
+ props->setProperty("Ice.Default.Host", "localhost");
+
+ //
+ // Target host matches the certificate DNS altName
//
initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
initData.properties->setProperty("IceSSL.CheckCertName", "1");
@@ -1180,21 +1185,47 @@ allTests(const CommunicatorPtr& communicator, const string& testDir, bool p12)
fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
test(fact);
- d = createServerProps(defaultProps, p12, "s_rsa_ca1", "cacert1");
+ d = createServerProps(props, p12, "s_rsa_ca1_cn1", "cacert1");
server = fact->createServer(d);
try
{
server->ice_ping();
}
- catch(const LocalException&)
+ catch(const Ice::LocalException&)
{
test(false);
}
+
fact->destroyServer(server);
comm->destroy();
+
+ //
+ // Target host does not match the certificate DNS altName
+ //
+ initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
+ initData.properties->setProperty("IceSSL.CheckCertName", "1");
+ comm = initialize(initData);
+
+ fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
+ test(fact);
+ d = createServerProps(props, p12, "s_rsa_ca1_cn2", "cacert1");
+ server = fact->createServer(d);
+ try
+ {
+ server->ice_ping();
+ test(false);
+ }
+ catch(const Ice::SecurityException&)
+ {
+ // Expected
+ }
+ fact->destroyServer(server);
+ comm->destroy();
+
//
- // Test common name.
+ // Target host matches the certificate Common Name and the certificate does not
+ // include a DNS altName
//
initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
initData.properties->setProperty("IceSSL.CheckCertName", "1");
@@ -1202,23 +1233,48 @@ allTests(const CommunicatorPtr& communicator, const string& testDir, bool p12)
fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
test(fact);
- d = createServerProps(defaultProps, p12, "s_rsa_ca1_cn1", "cacert1");
+ d = createServerProps(props, p12, "s_rsa_ca1_cn3", "cacert1");
server = fact->createServer(d);
try
{
server->ice_ping();
}
- catch(const LocalException& ex)
+ catch(const Ice::LocalException&)
{
- cerr << ex << endl;
test(false);
}
+
fact->destroyServer(server);
comm->destroy();
+
+ //
+ // Target host does not match the certificate Common Name and the certificate does not
+ // include a DNS altName
+ //
+ initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
+ initData.properties->setProperty("IceSSL.CheckCertName", "1");
+ comm = initialize(initData);
+
+ fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
+ test(fact);
+ d = createServerProps(props, p12, "s_rsa_ca1_cn4", "cacert1");
+ server = fact->createServer(d);
+ try
+ {
+ server->ice_ping();
+ test(false);
+ }
+ catch(const Ice::SecurityException&)
+ {
+ // Expected
+ }
+ fact->destroyServer(server);
+ comm->destroy();
+
//
- // Test common name again. The certificate used in this test has "127.0.0.11" as its
- // common name, therefore the address "127.0.0.1" must NOT match.
+ // Target host matches the certificate Common Name and the certificate has
+ // a DNS altName that does not matches the target host
//
initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
initData.properties->setProperty("IceSSL.CheckCertName", "1");
@@ -1226,17 +1282,108 @@ allTests(const CommunicatorPtr& communicator, const string& testDir, bool p12)
fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
test(fact);
- d = createServerProps(defaultProps, p12, "s_rsa_ca1_cn2", "cacert1");
+ d = createServerProps(props, p12, "s_rsa_ca1_cn5", "cacert1");
server = fact->createServer(d);
try
{
server->ice_ping();
test(false);
}
- catch(const LocalException&)
+ catch(const Ice::SecurityException&)
+ {
+ // Expected
+ }
+
+ fact->destroyServer(server);
+ comm->destroy();
+
+ //
+ // Test using 127.0.0.1 as target host
+ //
+
+ //
+ // Target host matches the certificate IP altName
+ //
+ initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
+ initData.properties->setProperty("IceSSL.CheckCertName", "1");
+ comm = initialize(initData);
+
+ fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
+ test(fact);
+ d = createServerProps(defaultProps, p12, "s_rsa_ca1_cn6", "cacert1");
+ server = fact->createServer(d);
+ try
+ {
+ server->ice_ping();
+ }
+ catch(const Ice::LocalException&)
+ {
+ test(false);
+ }
+
+ fact->destroyServer(server);
+ comm->destroy();
+
+ //
+ // Target host does not match the certificate IP altName
+ //
+ initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
+ initData.properties->setProperty("IceSSL.CheckCertName", "1");
+ comm = initialize(initData);
+
+ fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
+ test(fact);
+ d = createServerProps(defaultProps, p12, "s_rsa_ca1_cn7", "cacert1");
+ server = fact->createServer(d);
+ try
+ {
+ server->ice_ping();
+ test(false);
+ }
+ catch(const Ice::SecurityException&)
+ {
+ // Expected
+ }
+
+ fact->destroyServer(server);
+ comm->destroy();
+
+ //
+ // Target host is an IP addres that matches the CN and the certificate doesn't
+ // include an IP altName.
+ //
+ // UWP and SecureTransport implementation the target IP will match with the Certificate
+ // CN and the test will pass. With other implementations IP address is only match with
+ // the Certificate IP altName and the test will fail.
+ //
+ initData.properties = createClientProps(defaultProps, p12, "c_rsa_ca1", "cacert1");
+ initData.properties->setProperty("IceSSL.CheckCertName", "1");
+ comm = initialize(initData);
+
+ fact = ICE_CHECKED_CAST(Test::ServerFactoryPrx, comm->stringToProxy(factoryRef));
+ test(fact);
+ d = createServerProps(defaultProps, p12, "s_rsa_ca1_cn8", "cacert1");
+ server = fact->createServer(d);
+#if defined(ICE_OS_UWP) || defined(ICE_USE_SECURE_TRANSPORT)
+ try
{
- // Expected.
+ server->ice_ping();
+ }
+ catch(const Ice::LocalException&)
+ {
+ test(false);
+ }
+#else
+ try
+ {
+ server->ice_ping();
+ test(false);
+ }
+ catch(const Ice::SecurityException&)
+ {
+ // Expected
}
+#endif
fact->destroyServer(server);
comm->destroy();
}