summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-01 05:13:21 +0000
committerrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-01 05:13:21 +0000
commit0da6e22cfb55a859059fa5eb386a6119d0d322a5 (patch)
tree8bbdb01b2ff13bdf8843dea01c020e8dcc0286ab /net
parenta415335c3b2fbeb9580b9d0ea774adc31d883132 (diff)
downloadchromium_src-0da6e22cfb55a859059fa5eb386a6119d0d322a5.zip
chromium_src-0da6e22cfb55a859059fa5eb386a6119d0d322a5.tar.gz
chromium_src-0da6e22cfb55a859059fa5eb386a6119d0d322a5.tar.bz2
Add unittests for the detection of md[2,4,5] when verifying certificates
BUG=101123 TEST=net_unittests:X509CertificateWeakDigestTest.* Review URL: http://codereview.chromium.org/8391036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108074 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/base/x509_certificate_unittest.cc214
-rw-r--r--net/data/ssl/certificates/weak_digest_md2_ee.pem61
-rw-r--r--net/data/ssl/certificates/weak_digest_md2_intermediate.pem57
-rw-r--r--net/data/ssl/certificates/weak_digest_md2_root.pem14
-rw-r--r--net/data/ssl/certificates/weak_digest_md4_ee.pem61
-rw-r--r--net/data/ssl/certificates/weak_digest_md4_intermediate.pem57
-rw-r--r--net/data/ssl/certificates/weak_digest_md4_root.pem14
-rw-r--r--net/data/ssl/certificates/weak_digest_md5_ee.pem61
-rw-r--r--net/data/ssl/certificates/weak_digest_md5_intermediate.pem57
-rw-r--r--net/data/ssl/certificates/weak_digest_md5_root.pem14
-rw-r--r--net/data/ssl/certificates/weak_digest_sha1_ee.pem61
-rw-r--r--net/data/ssl/certificates/weak_digest_sha1_intermediate.pem57
-rw-r--r--net/data/ssl/certificates/weak_digest_sha1_root.pem14
13 files changed, 733 insertions, 9 deletions
diff --git a/net/base/x509_certificate_unittest.cc b/net/base/x509_certificate_unittest.cc
index 33c5edd..52a6980 100644
--- a/net/base/x509_certificate_unittest.cc
+++ b/net/base/x509_certificate_unittest.cc
@@ -1292,15 +1292,10 @@ struct CertificateNameVerifyTestData {
const char* ip_addrs;
};
-// Required by valgrind on mac, otherwise it complains when using its default
-// printer:
-// UninitCondition
-// Conditional jump or move depends on uninitialised value(s)
-// ...
-// snprintf
-// testing::(anonymous namespace)::PrintByteSegmentInObjectTo
-// testing::internal2::TypeWithoutFormatter
-// ...
+// GTest 'magic' pretty-printer, so that if/when a test fails, it knows how
+// to output the parameter that was passed. Without this, it will simply
+// attempt to print out the first twenty bytes of the object, which depending
+// on platform and alignment, may result in an invalid read.
void PrintTo(const CertificateNameVerifyTestData& data, std::ostream* os) {
ASSERT_TRUE(data.hostname && data.common_name);
// Using StringPiece to allow for optional fields being NULL.
@@ -1505,4 +1500,205 @@ TEST_P(X509CertificateNameVerifyTest, VerifyHostname) {
INSTANTIATE_TEST_CASE_P(, X509CertificateNameVerifyTest,
testing::ValuesIn(kNameVerifyTestData));
+// Not implemented on Mac or OpenSSL - http://crbug.com/101123
+#if defined(USE_NSS) || defined(OS_WIN)
+
+struct WeakDigestTestData {
+ const char* root_cert_filename;
+ const char* intermediate_cert_filename;
+ const char* ee_cert_filename;
+ bool expected_has_md5;
+ bool expected_has_md4;
+ bool expected_has_md2;
+ bool expected_has_md5_ca;
+ bool expected_has_md2_ca;
+};
+
+// GTest 'magic' pretty-printer, so that if/when a test fails, it knows how
+// to output the parameter that was passed. Without this, it will simply
+// attempt to print out the first twenty bytes of the object, which depending
+// on platform and alignment, may result in an invalid read.
+void PrintTo(const WeakDigestTestData& data, std::ostream* os) {
+ *os << "root: "
+ << (data.root_cert_filename ? data.root_cert_filename : "none")
+ << "; intermediate: " << data.intermediate_cert_filename
+ << "; end-entity: " << data.ee_cert_filename;
+}
+
+class X509CertificateWeakDigestTest
+ : public testing::TestWithParam<WeakDigestTestData> {
+ public:
+ X509CertificateWeakDigestTest() {}
+
+ virtual void TearDown() {
+ TestRootCerts::GetInstance()->Clear();
+ }
+};
+
+TEST_P(X509CertificateWeakDigestTest, Verify) {
+ WeakDigestTestData data = GetParam();
+ FilePath certs_dir = GetTestCertsDirectory();
+
+ if (data.root_cert_filename) {
+ scoped_refptr<X509Certificate> root_cert =
+ ImportCertFromFile(certs_dir, data.root_cert_filename);
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert);
+ TestRootCerts::GetInstance()->Add(root_cert.get());
+ }
+
+ scoped_refptr<X509Certificate> intermediate_cert =
+ ImportCertFromFile(certs_dir, data.intermediate_cert_filename);
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
+ scoped_refptr<X509Certificate> ee_cert =
+ ImportCertFromFile(certs_dir, data.ee_cert_filename);
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert);
+
+ X509Certificate::OSCertHandles intermediates;
+ intermediates.push_back(intermediate_cert->os_cert_handle());
+
+ scoped_refptr<X509Certificate> ee_chain =
+ X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(),
+ intermediates);
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain);
+
+ int flags = 0;
+ CertVerifyResult verify_result;
+ ee_chain->Verify("127.0.0.1", flags, NULL, &verify_result);
+ EXPECT_EQ(data.expected_has_md5, verify_result.has_md5);
+ EXPECT_EQ(data.expected_has_md4, verify_result.has_md4);
+ EXPECT_EQ(data.expected_has_md2, verify_result.has_md2);
+ EXPECT_EQ(data.expected_has_md5_ca, verify_result.has_md5_ca);
+ EXPECT_EQ(data.expected_has_md2_ca, verify_result.has_md2_ca);
+}
+
+// Unlike TEST/TEST_F, which are macros that expand to further macros,
+// INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that
+// stringizes the arguments. As a result, macros passed as parameters (such as
+// prefix or test_case_name) will not be expanded by the preprocessor. To work
+// around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the
+// pre-processor will expand macros such as MAYBE_test_name before
+// instantiating the test.
+#define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
+ INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator)
+
+// The signature algorithm of the root CA should not matter.
+const WeakDigestTestData kVerifyRootCATestData[] = {
+ { "weak_digest_md5_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_sha1_ee.pem", false, false, false, false, false },
+ { "weak_digest_md4_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_sha1_ee.pem", false, false, false, false, false },
+ { "weak_digest_md2_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_sha1_ee.pem", false, false, false, false, false },
+};
+INSTANTIATE_TEST_CASE_P(VerifyRoot, X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyRootCATestData));
+
+// The signature algorithm of intermediates should be properly detected.
+const WeakDigestTestData kVerifyIntermediateCATestData[] = {
+ { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem",
+ "weak_digest_sha1_ee.pem", true, false, false, true, false },
+// NSS does not support MD4 and does not enable MD2 by policy.
+#if !defined(USE_NSS)
+ { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem",
+ "weak_digest_sha1_ee.pem", false, true, false, false, false },
+ { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem",
+ "weak_digest_sha1_ee.pem", false, false, true, false, true },
+#endif
+};
+INSTANTIATE_TEST_CASE_P(VerifyIntermediate, X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyIntermediateCATestData));
+
+// The signature algorithm of end-entity should be properly detected.
+const WeakDigestTestData kVerifyEndEntityTestData[] = {
+ { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_md5_ee.pem", true, false, false, false, false },
+// NSS does not support MD4 and does not enable MD2 by policy.
+#if !defined(USE_NSS)
+ { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_md4_ee.pem", false, true, false, false, false },
+ { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
+ "weak_digest_md2_ee.pem", false, false, true, false, false },
+#endif
+};
+// Disabled on NSS - NSS caches chains/signatures in such a way that cannot
+// be cleared until NSS is cleanly shutdown, which is not presently supported
+// in Chromium.
+#if defined(USE_NSS)
+#define MAYBE_VerifyEndEntity DISABLED_VerifyEndEntity
+#else
+#define MAYBE_VerifyEndEntity VerifyEndEntity
+#endif
+WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyEndEntity,
+ X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyEndEntityTestData));
+
+// Incomplete chains should still report the status of the intermediate.
+const WeakDigestTestData kVerifyIncompleteIntermediateTestData[] = {
+ { NULL, "weak_digest_md5_intermediate.pem", "weak_digest_sha1_ee.pem",
+ true, false, false, true, false },
+ { NULL, "weak_digest_md4_intermediate.pem", "weak_digest_sha1_ee.pem",
+ false, true, false, false, false },
+ { NULL, "weak_digest_md2_intermediate.pem", "weak_digest_sha1_ee.pem",
+ false, false, true, false, true },
+};
+// Disabled on Windows - http://crbug.com/101123. The Windows implementation
+// does not report the status of the last intermediate for incomplete chains.
+// Disabled on NSS - libpkix does not return constructed chains on error,
+// preventing us from detecting/inspecting the verified chain.
+#if defined(OS_WIN) || defined(USE_NSS)
+#define MAYBE_VerifyIncompleteIntermediate \
+ DISABLED_VerifyIncompleteIntermediate
+#else
+#define MAYBE_VerifyIncompleteIntermediate VerifyIncompleteIntermediate
+#endif
+WRAPPED_INSTANTIATE_TEST_CASE_P(
+ MAYBE_VerifyIncompleteIntermediate,
+ X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyIncompleteIntermediateTestData));
+
+// Incomplete chains should still report the status of the end-entity.
+const WeakDigestTestData kVerifyIncompleteEETestData[] = {
+ { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md5_ee.pem",
+ true, false, false, false, false },
+ { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md4_ee.pem",
+ false, true, false, false, false },
+ { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md2_ee.pem",
+ false, false, true, false, false },
+};
+// Disabled on NSS - libpkix does not return constructed chains on error,
+// preventing us from detecting/inspecting the verified chain.
+#if defined(USE_NSS)
+#define MAYBE_VerifyIncompleteEndEntity DISABLED_VerifyIncompleteEndEntity
+#else
+#define MAYBE_VerifyIncompleteEndEntity VerifyIncompleteEndEntity
+#endif
+WRAPPED_INSTANTIATE_TEST_CASE_P(
+ MAYBE_VerifyIncompleteEndEntity,
+ X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyIncompleteEETestData));
+
+// Differing algorithms between the intermediate and the EE should still be
+// reported.
+const WeakDigestTestData kVerifyMixedTestData[] = {
+ { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem",
+ "weak_digest_md2_ee.pem", true, false, true, true, false },
+ { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem",
+ "weak_digest_md5_ee.pem", true, false, true, false, true },
+ { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem",
+ "weak_digest_md2_ee.pem", false, true, true, false, false },
+};
+// NSS does not support MD4 and does not enable MD2 by policy, making all
+// permutations invalid.
+#if defined(USE_NSS)
+#define MAYBE_VerifyMixed DISABLED_VerifyMixed
+#else
+#define MAYBE_VerifyMixed VerifyMixed
+#endif
+WRAPPED_INSTANTIATE_TEST_CASE_P(
+ MAYBE_VerifyMixed,
+ X509CertificateWeakDigestTest,
+ testing::ValuesIn(kVerifyMixedTestData));
+
+#endif // defined(USE_NSS) || defined(OS_WIN)
+
} // namespace net
diff --git a/net/data/ssl/certificates/weak_digest_md2_ee.pem b/net/data/ssl/certificates/weak_digest_md2_ee.pem
new file mode 100644
index 0000000..6475ccc
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md2_ee.pem
@@ -0,0 +1,61 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4 (0x4)
+ Signature Algorithm: md2WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Intermediate CA
+ Validity
+ Not Before: Oct 26 03:46:49 2011 GMT
+ Not After : Oct 23 03:46:49 2021 GMT
+ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:c7:48:eb:5c:00:17:94:01:09:d3:bd:47:41:38:
+ 74:b8:4f:cb:ea:f1:15:eb:cb:e7:b5:6c:bd:fe:d9:
+ 97:6d:1e:1b:ee:75:9e:c1:6f:4a:5c:8c:d7:19:cf:
+ 51:89:48:e8:7d:79:41:ab:e3:a7:77:d1:de:f2:13:
+ be:36:e7:44:c2:10:dd:56:83:03:f1:cd:e1:13:8d:
+ fe:45:d6:1a:98:d8:8d:08:b9:32:10:36:0d:ec:ee:
+ 2d:66:22:eb:6a:0d:0e:f4:15:91:dd:9d:3e:92:db:
+ 9e:26:c8:af:4b:b7:fb:93:f8:68:07:c3:53:02:57:
+ dc:d0:de:df:29:72:45:6f:e3
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 35:5C:C8:0F:21:D0:A2:F5:69:44:5C:9E:B0:DC:0F:75:74:24:7A:FD
+ X509v3 Authority Key Identifier:
+ keyid:A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Subject Alternative Name:
+ IP Address:127.0.0.1
+ Signature Algorithm: md2WithRSAEncryption
+ 87:d2:29:b3:6b:ba:36:99:ac:56:47:d8:7d:63:9e:74:a2:b5:
+ 42:5e:2b:96:08:f8:ab:e2:ce:ea:99:21:47:25:2c:55:f2:db:
+ 9d:d7:ed:d9:68:ba:09:90:b1:43:64:be:af:ef:9a:b4:10:86:
+ 99:85:7f:68:fe:aa:fd:d4:6a:f1:68:e9:8f:61:d8:46:21:e4:
+ 17:4c:89:db:82:37:36:8d:7f:93:4a:63:b1:da:ba:6b:19:ad:
+ 34:8b:f8:11:c3:25:14:2a:4e:7b:75:6b:03:79:c1:e5:1a:5b:
+ ff:b4:91:47:4f:48:91:68:33:c7:3e:a5:95:45:81:2b:0d:35:
+ 42:c4
+-----BEGIN CERTIFICATE-----
+MIICiDCCAfGgAwIBAgIBBDANBgkqhkiG9w0BAQIFADAxMS8wLQYDVQQDDCZUZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IEludGVybWVkaWF0ZSBDQTAeFw0xMTEwMjYwMzQ2
+NDlaFw0yMTEwMjMwMzQ2NDlaMGAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdUZXN0IENB
+MRIwEAYDVQQDDAkxMjcuMC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AMdI61wAF5QBCdO9R0E4dLhPy+rxFevL57Vsvf7Zl20eG+51nsFvSlyM1xnPUYlI
+6H15Qavjp3fR3vITvjbnRMIQ3VaDA/HN4RON/kXWGpjYjQi5MhA2DezuLWYi62oN
+DvQVkd2dPpLbnibIr0u3+5P4aAfDUwJX3NDe3ylyRW/jAgMBAAGjgYAwfjAMBgNV
+HRMBAf8EAjAAMB0GA1UdDgQWBBQ1XMgPIdCi9WlEXJ6w3A91dCR6/TAfBgNVHSME
+GDAWgBSoHQaNrT8lUQDwO+k1xmV0ElEgGTAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQIFAAOBgQCH0imz
+a7o2maxWR9h9Y550orVCXiuWCPir4s7qmSFHJSxV8tud1+3ZaLoJkLFDZL6v75q0
+EIaZhX9o/qr91GrxaOmPYdhGIeQXTInbgjc2jX+TSmOx2rprGa00i/gRwyUUKk57
+dWsDecHlGlv/tJFHT0iRaDPHPqWVRYErDTVCxA==
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md2_intermediate.pem b/net/data/ssl/certificates/weak_digest_md2_intermediate.pem
new file mode 100644
index 0000000..2f2765d
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md2_intermediate.pem
@@ -0,0 +1,57 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4 (0x4)
+ Signature Algorithm: md2WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Root CA
+ Validity
+ Not Before: Oct 26 03:46:49 2011 GMT
+ Not After : Oct 23 03:46:49 2021 GMT
+ Subject: CN=Test Deprecated Digest Intermediate CA
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:ac:9b:c0:4b:fc:59:45:7a:d6:3f:a3:89:23:30:
+ 5b:70:ad:ab:78:62:4b:53:85:9f:f9:7d:7f:c1:26:
+ 08:23:80:61:0c:ba:6d:36:06:14:df:29:d4:9c:63:
+ 94:04:ee:14:b6:b9:81:06:2f:33:d8:35:9a:1a:89:
+ 17:ad:21:61:fa:24:75:b9:0c:ef:c1:15:6a:02:bd:
+ b2:a5:29:df:d8:5f:80:7c:4e:c9:c1:b4:bb:fd:78:
+ 44:63:34:b5:a5:51:aa:e9:23:77:44:53:f9:fa:58:
+ f6:46:6e:9d:d2:cd:00:a3:28:fe:51:e4:30:7e:49:
+ 62:d4:53:b0:d8:9c:34:47:07
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+ X509v3 Authority Key Identifier:
+ keyid:79:82:C5:B4:EB:60:12:4B:B5:87:79:1B:E2:3A:9C:17:76:81:CB:43
+
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ Signature Algorithm: md2WithRSAEncryption
+ 95:17:b3:5f:81:5b:9e:d6:e9:de:67:0e:a7:01:2f:b7:f8:db:
+ 13:25:6b:a3:15:2d:53:08:c6:20:65:9d:8f:e9:9e:e4:bc:87:
+ 78:59:f6:1f:f4:0e:85:c7:a8:c6:c8:6d:65:7e:b9:f4:73:9b:
+ 9f:70:2b:b2:0d:03:06:c5:52:5f:59:87:b5:2b:d0:5c:0d:ee:
+ 8f:40:cd:eb:95:f2:0e:f4:51:a8:e8:76:17:82:71:1a:d1:ea:
+ 99:54:e4:b7:75:27:54:76:36:6f:c0:4d:5d:fa:bb:98:08:1e:
+ d4:95:d1:9a:c7:35:83:d5:a1:79:2a:1f:78:b4:2b:de:17:93:
+ 0c:1b
+-----BEGIN CERTIFICATE-----
+MIICMzCCAZygAwIBAgIBBDANBgkqhkiG9w0BAQIFADApMScwJQYDVQQDDB5UZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IFJvb3QgQ0EwHhcNMTExMDI2MDM0NjQ5WhcNMjEx
+MDIzMDM0NjQ5WjAxMS8wLQYDVQQDDCZUZXN0IERlcHJlY2F0ZWQgRGlnZXN0IElu
+dGVybWVkaWF0ZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJvAS/xZ
+RXrWP6OJIzBbcK2reGJLU4Wf+X1/wSYII4BhDLptNgYU3ynUnGOUBO4UtrmBBi8z
+2DWaGokXrSFh+iR1uQzvwRVqAr2ypSnf2F+AfE7JwbS7/XhEYzS1pVGq6SN3RFP5
++lj2Rm6d0s0Aoyj+UeQwfkli1FOw2Jw0RwcCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUqB0Gja0/JVEA8DvpNcZldBJRIBkwHwYDVR0jBBgwFoAU
+eYLFtOtgEku1h3kb4jqcF3aBy0MwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+AgUAA4GBAJUXs1+BW57W6d5nDqcBL7f42xMla6MVLVMIxiBlnY/pnuS8h3hZ9h/0
+DoXHqMbIbWV+ufRzm59wK7INAwbFUl9Zh7Ur0FwN7o9AzeuV8g70UajodheCcRrR
+6plU5Ld1J1R2Nm/ATV36u5gIHtSV0ZrHNYPVoXkqH3i0K94Xkwwb
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md2_root.pem b/net/data/ssl/certificates/weak_digest_md2_root.pem
new file mode 100644
index 0000000..140174d
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md2_root.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICEjCCAXugAwIBAgIJAMq0TW/f2gFbMA0GCSqGSIb3DQEBAgUAMCkxJzAlBgNV
+BAMMHlRlc3QgRGVwcmVjYXRlZCBEaWdlc3QgUm9vdCBDQTAeFw0xMTEwMjYwMzQ2
+NDlaFw0yMTEwMjMwMzQ2NDlaMCkxJzAlBgNVBAMMHlRlc3QgRGVwcmVjYXRlZCBE
+aWdlc3QgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwFtzW+hj
+BwMylx+rrgeKjltrzYabuJDdTDTYr1lViwO39m6CtHYdcFvZ1nU9oDjW4Lb1NQYv
+HoR8+SD0X1R2Y0yF6AyS9NX5E9TQ8TJUSQEehfznbBovMkRaQQMRD6ksRIQr+s00
+P6n0lAYJyN32lmTCbJ+k1aGHPFtKhTNQF/cCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHmCxbTrYBJLtYd5G+I6nBd2
+gctDMA0GCSqGSIb3DQEBAgUAA4GBABnPJVnXJXtImcjcBj31JelbPkLgt8HHjxa+
+LOMNZKIc9d6KWdjMoTNz7Y9dAKiLAJmPp9QAKU4cu0voWRK27O8CjR9Ng7SpfuZ7
+bQ4P22TlcVViAq56+bz/DFRabwBAZtndoawyn04r4Lo/3n/nEONeVTIqsixjN5Au
+0snKiMJj
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md4_ee.pem b/net/data/ssl/certificates/weak_digest_md4_ee.pem
new file mode 100644
index 0000000..6ea4b25
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md4_ee.pem
@@ -0,0 +1,61 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 3 (0x3)
+ Signature Algorithm: md4WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Intermediate CA
+ Validity
+ Not Before: Oct 26 03:46:49 2011 GMT
+ Not After : Oct 23 03:46:49 2021 GMT
+ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:c7:48:eb:5c:00:17:94:01:09:d3:bd:47:41:38:
+ 74:b8:4f:cb:ea:f1:15:eb:cb:e7:b5:6c:bd:fe:d9:
+ 97:6d:1e:1b:ee:75:9e:c1:6f:4a:5c:8c:d7:19:cf:
+ 51:89:48:e8:7d:79:41:ab:e3:a7:77:d1:de:f2:13:
+ be:36:e7:44:c2:10:dd:56:83:03:f1:cd:e1:13:8d:
+ fe:45:d6:1a:98:d8:8d:08:b9:32:10:36:0d:ec:ee:
+ 2d:66:22:eb:6a:0d:0e:f4:15:91:dd:9d:3e:92:db:
+ 9e:26:c8:af:4b:b7:fb:93:f8:68:07:c3:53:02:57:
+ dc:d0:de:df:29:72:45:6f:e3
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 35:5C:C8:0F:21:D0:A2:F5:69:44:5C:9E:B0:DC:0F:75:74:24:7A:FD
+ X509v3 Authority Key Identifier:
+ keyid:A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Subject Alternative Name:
+ IP Address:127.0.0.1
+ Signature Algorithm: md4WithRSAEncryption
+ a5:f6:ae:83:a1:44:5a:dd:c4:91:a2:d6:88:d8:c6:d1:e5:6d:
+ c8:71:7a:43:3e:e2:ce:42:a4:7d:94:16:5d:0a:df:33:e3:ea:
+ c9:22:e3:52:9d:f7:72:3e:24:d5:78:38:67:9f:2d:46:cb:73:
+ c5:1f:eb:4b:02:5c:25:41:e0:c5:07:03:4c:4c:55:87:db:32:
+ d0:2e:3e:aa:d4:a6:69:75:12:75:2e:b6:98:24:0e:18:c4:1c:
+ 60:aa:c5:19:c1:1c:ad:ba:f4:c8:c0:55:2b:61:7d:a4:f4:c6:
+ 73:0d:61:7e:04:42:e2:69:8d:9c:9d:83:22:e4:cc:cc:3f:b5:
+ 2a:6d
+-----BEGIN CERTIFICATE-----
+MIICiDCCAfGgAwIBAgIBAzANBgkqhkiG9w0BAQMFADAxMS8wLQYDVQQDDCZUZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IEludGVybWVkaWF0ZSBDQTAeFw0xMTEwMjYwMzQ2
+NDlaFw0yMTEwMjMwMzQ2NDlaMGAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdUZXN0IENB
+MRIwEAYDVQQDDAkxMjcuMC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AMdI61wAF5QBCdO9R0E4dLhPy+rxFevL57Vsvf7Zl20eG+51nsFvSlyM1xnPUYlI
+6H15Qavjp3fR3vITvjbnRMIQ3VaDA/HN4RON/kXWGpjYjQi5MhA2DezuLWYi62oN
+DvQVkd2dPpLbnibIr0u3+5P4aAfDUwJX3NDe3ylyRW/jAgMBAAGjgYAwfjAMBgNV
+HRMBAf8EAjAAMB0GA1UdDgQWBBQ1XMgPIdCi9WlEXJ6w3A91dCR6/TAfBgNVHSME
+GDAWgBSoHQaNrT8lUQDwO+k1xmV0ElEgGTAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQMFAAOBgQCl9q6D
+oURa3cSRotaI2MbR5W3IcXpDPuLOQqR9lBZdCt8z4+rJIuNSnfdyPiTVeDhnny1G
+y3PFH+tLAlwlQeDFBwNMTFWH2zLQLj6q1KZpdRJ1LraYJA4YxBxgqsUZwRytuvTI
+wFUrYX2k9MZzDWF+BELiaY2cnYMi5MzMP7UqbQ==
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md4_intermediate.pem b/net/data/ssl/certificates/weak_digest_md4_intermediate.pem
new file mode 100644
index 0000000..2ba01dd
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md4_intermediate.pem
@@ -0,0 +1,57 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 3 (0x3)
+ Signature Algorithm: md4WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Root CA
+ Validity
+ Not Before: Oct 26 03:46:49 2011 GMT
+ Not After : Oct 23 03:46:49 2021 GMT
+ Subject: CN=Test Deprecated Digest Intermediate CA
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:ac:9b:c0:4b:fc:59:45:7a:d6:3f:a3:89:23:30:
+ 5b:70:ad:ab:78:62:4b:53:85:9f:f9:7d:7f:c1:26:
+ 08:23:80:61:0c:ba:6d:36:06:14:df:29:d4:9c:63:
+ 94:04:ee:14:b6:b9:81:06:2f:33:d8:35:9a:1a:89:
+ 17:ad:21:61:fa:24:75:b9:0c:ef:c1:15:6a:02:bd:
+ b2:a5:29:df:d8:5f:80:7c:4e:c9:c1:b4:bb:fd:78:
+ 44:63:34:b5:a5:51:aa:e9:23:77:44:53:f9:fa:58:
+ f6:46:6e:9d:d2:cd:00:a3:28:fe:51:e4:30:7e:49:
+ 62:d4:53:b0:d8:9c:34:47:07
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+ X509v3 Authority Key Identifier:
+ keyid:79:82:C5:B4:EB:60:12:4B:B5:87:79:1B:E2:3A:9C:17:76:81:CB:43
+
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ Signature Algorithm: md4WithRSAEncryption
+ 7e:ca:14:3d:14:04:f4:a4:1a:cf:b5:c6:c7:c2:d3:e7:68:08:
+ 55:1f:fa:93:28:fa:34:aa:97:29:f7:31:6f:30:a4:25:bd:c5:
+ fe:28:3d:a9:92:b0:4f:ca:24:3f:7b:1a:16:2e:0d:08:73:8e:
+ ca:9f:50:da:e9:64:4f:bd:31:c4:72:89:98:8d:55:55:57:96:
+ 6a:e0:5e:00:12:07:8b:3a:30:06:9a:47:a5:94:39:74:a0:f7:
+ e1:00:48:2a:90:08:84:80:e3:6b:83:91:c6:74:d8:d9:c2:72:
+ c7:b9:6e:33:7f:38:46:c1:26:14:5c:1b:85:a3:aa:bb:72:a0:
+ 84:b2
+-----BEGIN CERTIFICATE-----
+MIICMzCCAZygAwIBAgIBAzANBgkqhkiG9w0BAQMFADApMScwJQYDVQQDDB5UZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IFJvb3QgQ0EwHhcNMTExMDI2MDM0NjQ5WhcNMjEx
+MDIzMDM0NjQ5WjAxMS8wLQYDVQQDDCZUZXN0IERlcHJlY2F0ZWQgRGlnZXN0IElu
+dGVybWVkaWF0ZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJvAS/xZ
+RXrWP6OJIzBbcK2reGJLU4Wf+X1/wSYII4BhDLptNgYU3ynUnGOUBO4UtrmBBi8z
+2DWaGokXrSFh+iR1uQzvwRVqAr2ypSnf2F+AfE7JwbS7/XhEYzS1pVGq6SN3RFP5
++lj2Rm6d0s0Aoyj+UeQwfkli1FOw2Jw0RwcCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUqB0Gja0/JVEA8DvpNcZldBJRIBkwHwYDVR0jBBgwFoAU
+eYLFtOtgEku1h3kb4jqcF3aBy0MwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+AwUAA4GBAH7KFD0UBPSkGs+1xsfC0+doCFUf+pMo+jSqlyn3MW8wpCW9xf4oPamS
+sE/KJD97GhYuDQhzjsqfUNrpZE+9McRyiZiNVVVXlmrgXgASB4s6MAaaR6WUOXSg
+9+EASCqQCISA42uDkcZ02NnCcse5bjN/OEbBJhRcG4WjqrtyoISy
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md4_root.pem b/net/data/ssl/certificates/weak_digest_md4_root.pem
new file mode 100644
index 0000000..4d5fc29
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md4_root.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICEjCCAXugAwIBAgIJAPqB3U0Vl/N1MA0GCSqGSIb3DQEBAwUAMCkxJzAlBgNV
+BAMMHlRlc3QgRGVwcmVjYXRlZCBEaWdlc3QgUm9vdCBDQTAeFw0xMTEwMjYwMzQ2
+NDlaFw0yMTEwMjMwMzQ2NDlaMCkxJzAlBgNVBAMMHlRlc3QgRGVwcmVjYXRlZCBE
+aWdlc3QgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwFtzW+hj
+BwMylx+rrgeKjltrzYabuJDdTDTYr1lViwO39m6CtHYdcFvZ1nU9oDjW4Lb1NQYv
+HoR8+SD0X1R2Y0yF6AyS9NX5E9TQ8TJUSQEehfznbBovMkRaQQMRD6ksRIQr+s00
+P6n0lAYJyN32lmTCbJ+k1aGHPFtKhTNQF/cCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHmCxbTrYBJLtYd5G+I6nBd2
+gctDMA0GCSqGSIb3DQEBAwUAA4GBAEvEn5YHixuMeYW3TpCVpyvNocToAlHiy5xt
+iXVN9V31w8X7I7vcUAgqWQYtB0qngQ28akmiY+yyfYkWB3H8B0DCr0STFCbMq0c6
+Ydt5pV3lBQpHUKZFvv5moVVWPXr0f0smZI26KGalHgxdrFJnnP4bp6VhYt8G3KFA
+h+nxg1RW
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md5_ee.pem b/net/data/ssl/certificates/weak_digest_md5_ee.pem
new file mode 100644
index 0000000..c5a1eb4
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md5_ee.pem
@@ -0,0 +1,61 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 2 (0x2)
+ Signature Algorithm: md5WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Intermediate CA
+ Validity
+ Not Before: Oct 26 03:46:48 2011 GMT
+ Not After : Oct 23 03:46:48 2021 GMT
+ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:c7:48:eb:5c:00:17:94:01:09:d3:bd:47:41:38:
+ 74:b8:4f:cb:ea:f1:15:eb:cb:e7:b5:6c:bd:fe:d9:
+ 97:6d:1e:1b:ee:75:9e:c1:6f:4a:5c:8c:d7:19:cf:
+ 51:89:48:e8:7d:79:41:ab:e3:a7:77:d1:de:f2:13:
+ be:36:e7:44:c2:10:dd:56:83:03:f1:cd:e1:13:8d:
+ fe:45:d6:1a:98:d8:8d:08:b9:32:10:36:0d:ec:ee:
+ 2d:66:22:eb:6a:0d:0e:f4:15:91:dd:9d:3e:92:db:
+ 9e:26:c8:af:4b:b7:fb:93:f8:68:07:c3:53:02:57:
+ dc:d0:de:df:29:72:45:6f:e3
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 35:5C:C8:0F:21:D0:A2:F5:69:44:5C:9E:B0:DC:0F:75:74:24:7A:FD
+ X509v3 Authority Key Identifier:
+ keyid:A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Subject Alternative Name:
+ IP Address:127.0.0.1
+ Signature Algorithm: md5WithRSAEncryption
+ 5c:36:ba:dd:8c:ae:4c:2d:00:32:d9:ed:4d:1d:4b:07:52:28:
+ 9c:16:18:3f:38:02:9d:d7:8e:16:e6:4b:2d:8c:84:cc:b1:90:
+ 6c:b4:42:55:56:7c:e6:ec:15:2b:90:0b:7e:89:08:15:5a:11:
+ 0e:5d:1b:a3:cc:81:79:1e:ea:96:82:75:d8:14:96:0f:17:a5:
+ cd:50:fd:50:f0:5b:7f:03:54:b3:e3:b5:66:03:c8:00:1d:61:
+ 36:f3:78:2d:07:82:61:0a:fd:d9:7c:8a:fe:cb:e1:09:df:fb:
+ b6:2f:09:7b:0b:62:d8:27:18:4e:6e:fe:92:1b:1a:2b:7d:56:
+ e0:87
+-----BEGIN CERTIFICATE-----
+MIICiDCCAfGgAwIBAgIBAjANBgkqhkiG9w0BAQQFADAxMS8wLQYDVQQDDCZUZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IEludGVybWVkaWF0ZSBDQTAeFw0xMTEwMjYwMzQ2
+NDhaFw0yMTEwMjMwMzQ2NDhaMGAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdUZXN0IENB
+MRIwEAYDVQQDDAkxMjcuMC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AMdI61wAF5QBCdO9R0E4dLhPy+rxFevL57Vsvf7Zl20eG+51nsFvSlyM1xnPUYlI
+6H15Qavjp3fR3vITvjbnRMIQ3VaDA/HN4RON/kXWGpjYjQi5MhA2DezuLWYi62oN
+DvQVkd2dPpLbnibIr0u3+5P4aAfDUwJX3NDe3ylyRW/jAgMBAAGjgYAwfjAMBgNV
+HRMBAf8EAjAAMB0GA1UdDgQWBBQ1XMgPIdCi9WlEXJ6w3A91dCR6/TAfBgNVHSME
+GDAWgBSoHQaNrT8lUQDwO+k1xmV0ElEgGTAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQQFAAOBgQBcNrrd
+jK5MLQAy2e1NHUsHUiicFhg/OAKd144W5kstjITMsZBstEJVVnzm7BUrkAt+iQgV
+WhEOXRujzIF5HuqWgnXYFJYPF6XNUP1Q8Ft/A1Sz47VmA8gAHWE283gtB4JhCv3Z
+fIr+y+EJ3/u2Lwl7C2LYJxhObv6SGxorfVbghw==
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md5_intermediate.pem b/net/data/ssl/certificates/weak_digest_md5_intermediate.pem
new file mode 100644
index 0000000..6192ffe
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md5_intermediate.pem
@@ -0,0 +1,57 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 2 (0x2)
+ Signature Algorithm: md5WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Root CA
+ Validity
+ Not Before: Oct 26 03:46:48 2011 GMT
+ Not After : Oct 23 03:46:48 2021 GMT
+ Subject: CN=Test Deprecated Digest Intermediate CA
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:ac:9b:c0:4b:fc:59:45:7a:d6:3f:a3:89:23:30:
+ 5b:70:ad:ab:78:62:4b:53:85:9f:f9:7d:7f:c1:26:
+ 08:23:80:61:0c:ba:6d:36:06:14:df:29:d4:9c:63:
+ 94:04:ee:14:b6:b9:81:06:2f:33:d8:35:9a:1a:89:
+ 17:ad:21:61:fa:24:75:b9:0c:ef:c1:15:6a:02:bd:
+ b2:a5:29:df:d8:5f:80:7c:4e:c9:c1:b4:bb:fd:78:
+ 44:63:34:b5:a5:51:aa:e9:23:77:44:53:f9:fa:58:
+ f6:46:6e:9d:d2:cd:00:a3:28:fe:51:e4:30:7e:49:
+ 62:d4:53:b0:d8:9c:34:47:07
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+ X509v3 Authority Key Identifier:
+ keyid:79:82:C5:B4:EB:60:12:4B:B5:87:79:1B:E2:3A:9C:17:76:81:CB:43
+
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ Signature Algorithm: md5WithRSAEncryption
+ a3:9d:4e:8b:42:7b:c2:3a:71:5c:7a:a9:ec:9b:da:04:a4:7d:
+ f2:53:ba:b5:97:97:21:ae:94:03:23:7e:75:0e:c7:cc:1f:57:
+ f2:76:ec:aa:bf:4f:2f:d1:2d:d2:3d:10:55:ce:a0:1c:93:b6:
+ 8a:b6:65:9b:67:7a:a6:2f:04:62:e9:31:69:f4:26:08:a3:41:
+ d0:11:3a:21:31:b6:32:5e:a0:4c:32:2d:ca:f8:a0:76:be:f2:
+ a1:bf:15:98:73:26:41:2d:d5:8e:63:e7:5e:ef:61:08:f0:9d:
+ fb:af:55:1e:37:9c:2a:13:f7:7e:ab:5c:f4:d5:f8:7c:a7:fb:
+ c0:42
+-----BEGIN CERTIFICATE-----
+MIICMzCCAZygAwIBAgIBAjANBgkqhkiG9w0BAQQFADApMScwJQYDVQQDDB5UZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IFJvb3QgQ0EwHhcNMTExMDI2MDM0NjQ4WhcNMjEx
+MDIzMDM0NjQ4WjAxMS8wLQYDVQQDDCZUZXN0IERlcHJlY2F0ZWQgRGlnZXN0IElu
+dGVybWVkaWF0ZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJvAS/xZ
+RXrWP6OJIzBbcK2reGJLU4Wf+X1/wSYII4BhDLptNgYU3ynUnGOUBO4UtrmBBi8z
+2DWaGokXrSFh+iR1uQzvwRVqAr2ypSnf2F+AfE7JwbS7/XhEYzS1pVGq6SN3RFP5
++lj2Rm6d0s0Aoyj+UeQwfkli1FOw2Jw0RwcCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUqB0Gja0/JVEA8DvpNcZldBJRIBkwHwYDVR0jBBgwFoAU
+eYLFtOtgEku1h3kb4jqcF3aBy0MwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BAUAA4GBAKOdTotCe8I6cVx6qeyb2gSkffJTurWXlyGulAMjfnUOx8wfV/J27Kq/
+Ty/RLdI9EFXOoByTtoq2ZZtneqYvBGLpMWn0JgijQdAROiExtjJeoEwyLcr4oHa+
+8qG/FZhzJkEt1Y5j517vYQjwnfuvVR43nCoT936rXPTV+Hyn+8BC
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_md5_root.pem b/net/data/ssl/certificates/weak_digest_md5_root.pem
new file mode 100644
index 0000000..cea1d70
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_md5_root.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICEjCCAXugAwIBAgIJANhsW8HvYIVtMA0GCSqGSIb3DQEBBAUAMCkxJzAlBgNV
+BAMMHlRlc3QgRGVwcmVjYXRlZCBEaWdlc3QgUm9vdCBDQTAeFw0xMTEwMjYwMzQ2
+NDhaFw0yMTEwMjMwMzQ2NDhaMCkxJzAlBgNVBAMMHlRlc3QgRGVwcmVjYXRlZCBE
+aWdlc3QgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwFtzW+hj
+BwMylx+rrgeKjltrzYabuJDdTDTYr1lViwO39m6CtHYdcFvZ1nU9oDjW4Lb1NQYv
+HoR8+SD0X1R2Y0yF6AyS9NX5E9TQ8TJUSQEehfznbBovMkRaQQMRD6ksRIQr+s00
+P6n0lAYJyN32lmTCbJ+k1aGHPFtKhTNQF/cCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHmCxbTrYBJLtYd5G+I6nBd2
+gctDMA0GCSqGSIb3DQEBBAUAA4GBAC1qyqlaaPzmY78GXsw1MY2VbSNmGyRxWw3W
+dJVSkdKv8jeeZnVT6JaiHzmM0zQ9E8x0szILJlJ3r9CNKiuXgpCvbaWqiWwytFny
+8Mea/xS8FwIfPoxiOt/MdjvnfUWi1ukZaOy88rg5V7/mVdObTzu4VouD4qxhpdTa
+QRn7eFqR
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_sha1_ee.pem b/net/data/ssl/certificates/weak_digest_sha1_ee.pem
new file mode 100644
index 0000000..5368e62
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_sha1_ee.pem
@@ -0,0 +1,61 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Intermediate CA
+ Validity
+ Not Before: Oct 26 03:46:48 2011 GMT
+ Not After : Oct 23 03:46:48 2021 GMT
+ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:c7:48:eb:5c:00:17:94:01:09:d3:bd:47:41:38:
+ 74:b8:4f:cb:ea:f1:15:eb:cb:e7:b5:6c:bd:fe:d9:
+ 97:6d:1e:1b:ee:75:9e:c1:6f:4a:5c:8c:d7:19:cf:
+ 51:89:48:e8:7d:79:41:ab:e3:a7:77:d1:de:f2:13:
+ be:36:e7:44:c2:10:dd:56:83:03:f1:cd:e1:13:8d:
+ fe:45:d6:1a:98:d8:8d:08:b9:32:10:36:0d:ec:ee:
+ 2d:66:22:eb:6a:0d:0e:f4:15:91:dd:9d:3e:92:db:
+ 9e:26:c8:af:4b:b7:fb:93:f8:68:07:c3:53:02:57:
+ dc:d0:de:df:29:72:45:6f:e3
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:FALSE
+ X509v3 Subject Key Identifier:
+ 35:5C:C8:0F:21:D0:A2:F5:69:44:5C:9E:B0:DC:0F:75:74:24:7A:FD
+ X509v3 Authority Key Identifier:
+ keyid:A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication, TLS Web Client Authentication
+ X509v3 Subject Alternative Name:
+ IP Address:127.0.0.1
+ Signature Algorithm: sha1WithRSAEncryption
+ ab:a4:58:6a:d8:f4:87:00:11:45:23:ea:75:a9:0d:cd:87:73:
+ 0e:73:f2:97:d3:74:b0:cd:90:c9:45:83:03:c3:82:ee:2f:79:
+ 51:31:12:1c:39:a0:e2:45:f2:c2:4e:70:8c:e4:f3:af:15:4c:
+ be:5d:e7:c3:96:79:c8:a4:98:6d:37:8d:3f:9f:9e:89:32:ca:
+ a6:a7:e2:c8:f3:84:64:08:34:57:bd:10:22:96:78:39:b4:33:
+ dc:f2:db:83:ec:0c:20:58:ce:ba:98:44:dc:ca:a2:10:6c:5a:
+ d5:57:85:b9:3c:f0:48:99:98:e1:80:88:08:4c:cc:83:0d:40:
+ ff:8d
+-----BEGIN CERTIFICATE-----
+MIICiDCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQUFADAxMS8wLQYDVQQDDCZUZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IEludGVybWVkaWF0ZSBDQTAeFw0xMTEwMjYwMzQ2
+NDhaFw0yMTEwMjMwMzQ2NDhaMGAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdUZXN0IENB
+MRIwEAYDVQQDDAkxMjcuMC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AMdI61wAF5QBCdO9R0E4dLhPy+rxFevL57Vsvf7Zl20eG+51nsFvSlyM1xnPUYlI
+6H15Qavjp3fR3vITvjbnRMIQ3VaDA/HN4RON/kXWGpjYjQi5MhA2DezuLWYi62oN
+DvQVkd2dPpLbnibIr0u3+5P4aAfDUwJX3NDe3ylyRW/jAgMBAAGjgYAwfjAMBgNV
+HRMBAf8EAjAAMB0GA1UdDgQWBBQ1XMgPIdCi9WlEXJ6w3A91dCR6/TAfBgNVHSME
+GDAWgBSoHQaNrT8lUQDwO+k1xmV0ElEgGTAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
+KwYBBQUHAwIwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQUFAAOBgQCrpFhq
+2PSHABFFI+p1qQ3Nh3MOc/KX03SwzZDJRYMDw4LuL3lRMRIcOaDiRfLCTnCM5POv
+FUy+XefDlnnIpJhtN40/n56JMsqmp+LI84RkCDRXvRAilng5tDPc8tuD7AwgWM66
+mETcyqIQbFrVV4W5PPBImZjhgIgITMyDDUD/jQ==
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_sha1_intermediate.pem b/net/data/ssl/certificates/weak_digest_sha1_intermediate.pem
new file mode 100644
index 0000000..478d116
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_sha1_intermediate.pem
@@ -0,0 +1,57 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: CN=Test Deprecated Digest Root CA
+ Validity
+ Not Before: Oct 26 03:46:48 2011 GMT
+ Not After : Oct 23 03:46:48 2021 GMT
+ Subject: CN=Test Deprecated Digest Intermediate CA
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public Key: (1024 bit)
+ Modulus (1024 bit):
+ 00:ac:9b:c0:4b:fc:59:45:7a:d6:3f:a3:89:23:30:
+ 5b:70:ad:ab:78:62:4b:53:85:9f:f9:7d:7f:c1:26:
+ 08:23:80:61:0c:ba:6d:36:06:14:df:29:d4:9c:63:
+ 94:04:ee:14:b6:b9:81:06:2f:33:d8:35:9a:1a:89:
+ 17:ad:21:61:fa:24:75:b9:0c:ef:c1:15:6a:02:bd:
+ b2:a5:29:df:d8:5f:80:7c:4e:c9:c1:b4:bb:fd:78:
+ 44:63:34:b5:a5:51:aa:e9:23:77:44:53:f9:fa:58:
+ f6:46:6e:9d:d2:cd:00:a3:28:fe:51:e4:30:7e:49:
+ 62:d4:53:b0:d8:9c:34:47:07
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ A8:1D:06:8D:AD:3F:25:51:00:F0:3B:E9:35:C6:65:74:12:51:20:19
+ X509v3 Authority Key Identifier:
+ keyid:79:82:C5:B4:EB:60:12:4B:B5:87:79:1B:E2:3A:9C:17:76:81:CB:43
+
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+ Signature Algorithm: sha1WithRSAEncryption
+ 4e:30:a8:25:da:ac:90:a9:5e:6c:23:7f:76:1e:2d:64:79:78:
+ 61:84:dc:06:12:43:72:a6:18:f1:f2:23:fa:e9:1f:de:3a:52:
+ 1c:ce:cd:f7:7e:3c:92:ce:7f:f3:1f:f5:bc:18:17:95:cb:57:
+ 34:f1:88:b1:c8:1f:51:e1:d3:3d:dd:17:c6:d4:af:f1:42:ec:
+ 85:d7:bf:16:22:e0:88:82:92:cc:94:89:e5:eb:9d:cc:fe:31:
+ 50:6f:ea:d8:70:f9:ef:6b:ca:3e:af:bd:61:42:33:ce:23:bf:
+ 50:5f:55:14:64:2b:f7:fd:a6:29:41:a8:65:c3:fa:c4:f0:c7:
+ 71:a5
+-----BEGIN CERTIFICATE-----
+MIICMzCCAZygAwIBAgIBATANBgkqhkiG9w0BAQUFADApMScwJQYDVQQDDB5UZXN0
+IERlcHJlY2F0ZWQgRGlnZXN0IFJvb3QgQ0EwHhcNMTExMDI2MDM0NjQ4WhcNMjEx
+MDIzMDM0NjQ4WjAxMS8wLQYDVQQDDCZUZXN0IERlcHJlY2F0ZWQgRGlnZXN0IElu
+dGVybWVkaWF0ZSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJvAS/xZ
+RXrWP6OJIzBbcK2reGJLU4Wf+X1/wSYII4BhDLptNgYU3ynUnGOUBO4UtrmBBi8z
+2DWaGokXrSFh+iR1uQzvwRVqAr2ypSnf2F+AfE7JwbS7/XhEYzS1pVGq6SN3RFP5
++lj2Rm6d0s0Aoyj+UeQwfkli1FOw2Jw0RwcCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUqB0Gja0/JVEA8DvpNcZldBJRIBkwHwYDVR0jBBgwFoAU
+eYLFtOtgEku1h3kb4jqcF3aBy0MwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BQUAA4GBAE4wqCXarJCpXmwjf3YeLWR5eGGE3AYSQ3KmGPHyI/rpH946UhzOzfd+
+PJLOf/Mf9bwYF5XLVzTxiLHIH1Hh0z3dF8bUr/FC7IXXvxYi4IiCksyUieXrncz+
+MVBv6thw+e9ryj6vvWFCM84jv1BfVRRkK/f9pilBqGXD+sTwx3Gl
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/weak_digest_sha1_root.pem b/net/data/ssl/certificates/weak_digest_sha1_root.pem
new file mode 100644
index 0000000..a10f009
--- /dev/null
+++ b/net/data/ssl/certificates/weak_digest_sha1_root.pem
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICEjCCAXugAwIBAgIJAOojr7l1i8pcMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV
+BAMMHlRlc3QgRGVwcmVjYXRlZCBEaWdlc3QgUm9vdCBDQTAeFw0xMTEwMjYwMzQ2
+NDhaFw0yMTEwMjMwMzQ2NDhaMCkxJzAlBgNVBAMMHlRlc3QgRGVwcmVjYXRlZCBE
+aWdlc3QgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwFtzW+hj
+BwMylx+rrgeKjltrzYabuJDdTDTYr1lViwO39m6CtHYdcFvZ1nU9oDjW4Lb1NQYv
+HoR8+SD0X1R2Y0yF6AyS9NX5E9TQ8TJUSQEehfznbBovMkRaQQMRD6ksRIQr+s00
+P6n0lAYJyN32lmTCbJ+k1aGHPFtKhTNQF/cCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHmCxbTrYBJLtYd5G+I6nBd2
+gctDMA0GCSqGSIb3DQEBBQUAA4GBAFfvM72mFeBd4HfP/U0HTmeQsPTorL01BRGe
+kIbHSBfliYF5fTXbHHjXqvnmNvCwfjO1+HyCxg3opwmDS5DiwkT2XtqYeF80h8/X
+J+hsdo+wJJiD0G8V3wOkBjlS5N3WaH3vhPikLkvmr2UzeeO3ORaaDUlRpzzOS2Pn
+28TAE0Wq
+-----END CERTIFICATE-----