CKM: Replace expired certificates with new ones
[platform/core/test/security-tests.git] / src / ckm / test-certs.cpp
index aabe363..d852db5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *  Copyright (c) 2015 - 2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  */
 
 #include <map>
+#include <memory>
+#include <openssl/pem.h>
+#include <openssl/bio.h>
+#include <openssl/x509.h>
 #include <test-certs.h>
 #include <dpl/test/test_runner.h>
 #include <dpl/test/test_runner_child.h>
@@ -36,21 +40,37 @@ enum RawCertificateID {
     TEST_LEAF,           // TEST_LEAF, signed by TEST_IM_CA, expires 2035
 
     // third party
-    DIGICERT_ROOT_CA,    // DIGICERT_ROOT_CA, (root CA), expires 10 Nov 2031
-    DIGICERT_IM_CA,      // DIGICERT_IM_CA, signed by DIGICERT_ROOT_CA,
-                         //   expires 22 Oct 2028
-    FACEBOOK_COM,        // FACEBOOK_COM, *.facebook.com - signed by DIGICERT_IM_CA,
-                         //   expires 25 Jan 2018
+    BALTIMORE_CYBER_TRUST_ROOT,    // Baltimore CyberTrust Root, (root CA), expires May 13, 2025
+    MS_IT_TLS_CA_5,      // Microsoft IT TLS CA 5, signed by Baltimore CyberTrust Root,
+                         // expires May 20, 2024
+    MICROSOFT_COM,       // www.microsoft.com - signed by Microsoft IT TLS CA 5,
+                         // expires October 22, 2021
 
     // ocsp available chain on third party
-    SYMANTEC,         // SYMANTEC, signed by VERISIGN, expires 30 Oct 2023
-    YAHOO_COM,        // YAHOO, signed by SYMANTEC, expires 30 Oct 2017
+    MS_RSA_TLS_CA_1,     // Microsoft RSA TLS CA 01, signed by Baltimore CyberTrust Root, expires 08 Oct 2024
+    BING_COM,            // BING, signed by Microsoft RSA TLS CA 1, expires 12 Oct 2021
 
     // footer - last element in the set
     NO_CERT
 };
 
-typedef map<RawCertificateID, pair<string, CKM::CertificateShPtr>> CertMap;
+
+struct TestCert {
+    enum Validity {
+        UNKNOWN,
+        VALID,
+        NOT_YET_VALID,
+        EXPIRED
+    };
+
+    TestCert() : valid(UNKNOWN) {}
+
+    string raw_base64;
+    CKM::CertificateShPtr certPtr;
+    Validity valid;
+};
+
+typedef map<RawCertificateID, TestCert> CertMap;
 
 CKM::CertificateShPtr createCert(const string& cert) {
     CKM::RawBuffer buffer_cert(cert.begin(), cert.end());
@@ -65,12 +85,12 @@ RawCertificateID toRawCertificateID(certificateID id)
     case certificateID::TEST_IM_CA:          return RawCertificateID::TEST_IM_CA;
     case certificateID::TEST_LEAF:           return RawCertificateID::TEST_LEAF;
 
-    case certificateID::THIRD_PARTY_ROOT_CA: return RawCertificateID::DIGICERT_ROOT_CA;
-    case certificateID::THIRD_PARTY_IM_CA:   return RawCertificateID::DIGICERT_IM_CA;
-    case certificateID::THIRD_PARTY_LEAF:    return RawCertificateID::FACEBOOK_COM;
+    case certificateID::THIRD_PARTY_ROOT_CA: return RawCertificateID::BALTIMORE_CYBER_TRUST_ROOT;
+    case certificateID::THIRD_PARTY_IM_CA:   return RawCertificateID::MS_IT_TLS_CA_5;
+    case certificateID::THIRD_PARTY_LEAF:    return RawCertificateID::MICROSOFT_COM;
 
-    case certificateID::OCSP_AVAILABLE_IM:   return RawCertificateID::SYMANTEC;
-    case certificateID::OCSP_AVAILABLE_LEAF: return RawCertificateID::YAHOO_COM;
+    case certificateID::OCSP_AVAILABLE_IM:   return RawCertificateID::MS_RSA_TLS_CA_1;
+    case certificateID::OCSP_AVAILABLE_LEAF: return RawCertificateID::BING_COM;
 
     case certificateID::NO_CERT:             return RawCertificateID::NO_CERT;
     default: throw std::invalid_argument("Invalid raw certificat ID!");
@@ -106,8 +126,8 @@ CertMap initializeTestCerts()
             "qMn7nf7taidDKLO2T4bhujztnTYOhhaXKgPy7AtZ28N2wvX96VyAPB/vrchGmyBK\n"
             "kOg11TpPdNDkhb1J4ZCh2gupDg==\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::TEST_ROOT_CA] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::TEST_ROOT_CA].raw_base64 = raw_base64;
+        cm[RawCertificateID::TEST_ROOT_CA].certPtr = createCert(raw_base64);
     }
 
     // TEST_IM_CA, signed by TEST_ROOT_CA, expires 2035
@@ -135,8 +155,8 @@ CertMap initializeTestCerts()
             "SLoHQ9s1i7Zyb7HU6UAaqMOz15LBkyAqtNyJcO2p7Q/p5YK0xfD4xisI5qXucqVm\n"
             "F2obL5qJSTN/RQ==\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::TEST_IM_CA] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::TEST_IM_CA].raw_base64 = raw_base64;
+        cm[RawCertificateID::TEST_IM_CA].certPtr = createCert(raw_base64);
     }
 
     // TEST_LEAF, signed by TEST_IM_CA, expires 2035
@@ -162,220 +182,252 @@ CertMap initializeTestCerts()
             "Zj/T1JkYXKkEwZU6nAR2jdZp3EP9xj3o15V/tyFcXHx6l8NTxn4cJb+Xe4VquQJz\n"
             "6ON7PVe0ABN/AlwVQiFE\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::TEST_LEAF] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::TEST_LEAF].raw_base64 = raw_base64;
+        cm[RawCertificateID::TEST_LEAF].certPtr = createCert(raw_base64);
     }
 
-    // YAHOO_COM, signed by SYMANTEC, expires 30 Oct 2017
+    // BING, signed by Microsoft RSA TLS CA 1, expires 12 Oct 2021
     {
-        std::string raw_base64 = std::string(
+        std::string raw_base64(
             "-----BEGIN CERTIFICATE-----\n"
-            "MIIJKzCCCBOgAwIBAgIQHCVDDtCmAujMOpd7BTnM5TANBgkqhkiG9w0BAQsFADB+\n"
-            "MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd\n"
-            "BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj\n"
-            "IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE1MTAzMTAwMDAwMFoX\n"
-            "DTE3MTAzMDIzNTk1OVowgYQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y\n"
-            "bmlhMRIwEAYDVQQHDAlTdW5ueXZhbGUxEzARBgNVBAoMCllhaG9vIEluYy4xHzAd\n"
-            "BgNVBAsMFkluZm9ybWF0aW9uIFRlY2hub2xvZ3kxFjAUBgNVBAMMDXd3dy55YWhv\n"
-            "by5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQCDGY8Tsqwwg+\n"
-            "YqP8ZcLSbr8uIvYolaOi1p4pJbhE3sPgmb8wS5n9ZL+P/BF6s4BNVlA6W+ps9s3W\n"
-            "aGp9DzoxQgrH354e0JXxOJidogRGq2xDcyRf8klriX8clOWEVPd63omqwLSInx95\n"
-            "7povTsBYadcnC1uJO+cHu1QjENdxoF3VD/zccH13jKqDXMZwB/UyqhEpbQwxbuPR\n"
-            "p1BpQUQN0KhKH/JG9YqXeySc8CUGO9AZPtb6AWXcd+VA0xnnD6YKfPWBLYbBWDHA\n"
-            "lv/zJd3wDCNVS5F8zUlG3RM/TAwa3uR3S3v9swCcTkb6AVDgJknD9yDaPowEoyur\n"
-            "G7ZFKfFzAgMBAAGjggWcMIIFmDCCBFAGA1UdEQSCBEcwggRDgg13d3cueWFob28u\n"
-            "Y29tggl5YWhvby5jb22CDmhzcmQueWFob28uY29tggx1cy55YWhvby5jb22CDGZy\n"
-            "LnlhaG9vLmNvbYIMdWsueWFob28uY29tggx6YS55YWhvby5jb22CDGllLnlhaG9v\n"
-            "LmNvbYIMaXQueWFob28uY29tggxlcy55YWhvby5jb22CDGRlLnlhaG9vLmNvbYIM\n"
-            "Y2EueWFob28uY29tggxxYy55YWhvby5jb22CDGJyLnlhaG9vLmNvbYIMcm8ueWFo\n"
-            "b28uY29tggxzZS55YWhvby5jb22CDGJlLnlhaG9vLmNvbYIPZnItYmUueWFob28u\n"
-            "Y29tggxhci55YWhvby5jb22CDG14LnlhaG9vLmNvbYIMY2wueWFob28uY29tggxj\n"
-            "by55YWhvby5jb22CDHZlLnlhaG9vLmNvbYIRZXNwYW5vbC55YWhvby5jb22CDHBl\n"
-            "LnlhaG9vLmNvbYIMaW4ueWFob28uY29tggxzZy55YWhvby5jb22CDGlkLnlhaG9v\n"
-            "LmNvbYISbWFsYXlzaWEueWFob28uY29tggxwaC55YWhvby5jb22CDHZuLnlhaG9v\n"
-            "LmNvbYIRbWFrdG9vYi55YWhvby5jb22CFGVuLW1ha3Rvb2IueWFob28uY29tgg9j\n"
-            "YS5teS55YWhvby5jb22CDGdyLnlhaG9vLmNvbYINYXR0LnlhaG9vLmNvbYIMYXUu\n"
-            "eWFob28uY29tggxuei55YWhvby5jb22CDHR3LnlhaG9vLmNvbYIMaGsueWFob28u\n"
-            "Y29tgg1icmIueWFob28uY29tggxteS55YWhvby5jb22CEGFkZC5teS55YWhvby5j\n"
-            "b22CEmZyb250aWVyLnlhaG9vLmNvbYIRdmVyaXpvbi55YWhvby5jb22CE2NhLnJv\n"
-            "Z2Vycy55YWhvby5jb22CFmZyLWNhLnJvZ2Vycy55YWhvby5jb22CFHRhdGFkb2Nv\n"
-            "bW8ueWFob28uY29tghB0aWtvbmEueWFob28uY29tghdpZGVhbmV0c2V0dGVyLnlh\n"
-            "aG9vLmNvbYISbXRzaW5kaWEueWFob28uY29tghNzbWFydGZyZW4ueWFob28uY29t\n"
-            "gg8qLmF0dC55YWhvby5jb22CEioucGVvcGxlLnlhaG9vLmNvbYIVKi5jZWxlYnJp\n"
-            "dHkueWFob28uY29tghcqLnZpZGEtZXN0aWxvLnlhaG9vLmNvbYIRKi5zdHlsZS55\n"
-            "YWhvby5jb22CEioubW92aWVzLnlhaG9vLmNvbYIRKi5zdGFycy55YWhvby5jb22C\n"
-            "ECoua2luby55YWhvby5jb22CECouY2luZS55YWhvby5jb22CEiouY2luZW1hLnlh\n"
-            "aG9vLmNvbYIYKi5jZWxlYnJpZGFkZXMueWFob28uY29tghAqLmxpdmUueWFob28u\n"
-            "Y29tghIqLmJlYXV0eS55YWhvby5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC\n"
-            "BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGEGA1UdIARaMFgwVgYG\n"
-            "Z4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUG\n"
-            "CCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMB8GA1UdIwQYMBaA\n"
-            "FF9gz2GQVd+EQxSKYCqy9Xr0QxjvMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9z\n"
-            "cy5zeW1jYi5jb20vc3MuY3JsMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYT\n"
-            "aHR0cDovL3NzLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3NzLnN5bWNi\n"
-            "LmNvbS9zcy5jcnQwDQYJKoZIhvcNAQELBQADggEBAG/q7lSPjely/GpDlCnizkFc\n"
-            "SZsk+xAAS4zn22JNVGSHR1r+mdgFFw0mzr8+sc8UpiMFMQ4jtEHtffbsw6U9YWju\n"
-            "COJKZ6MQbS9qjr+60Bat2tYO8XK7gviQ9wgOQHn/L8ky5t3GAmgyVTAglJIIAUpK\n"
-            "ehHrC4n3ot/oudUftaPgoA+34qGz8bq1GH+0+DbMblnf6EDBsz4MoDUJvkyGtlib\n"
-            "f3FmfykPDCm0uaN2X/zRXjW48++feCuJeqCgCZl/0U2cmabKGDxLaiDf/xgnfQnC\n"
-            "qn+Ka2PctGhsT4xKzLNH9d/66UeBUttqbonXPO34ac70PJGT7dm+xgGCqSdoxXM=\n"
-            "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::YAHOO_COM] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+            "MIIM3zCCCsegAwIBAgITawAMbdcfI5Nyb1TMVAAAAAxt1zANBgkqhkiG9w0BAQsF\n"
+            "ADBPMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u\n"
+            "MSAwHgYDVQQDExdNaWNyb3NvZnQgUlNBIFRMUyBDQSAwMTAeFw0yMTA0MTIwMjAx\n"
+            "MTBaFw0yMTEwMTIwMjAxMTBaMBcxFTATBgNVBAMTDHd3dy5iaW5nLmNvbTCCASIw\n"
+            "DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANwoLj/ulH8Rr+6rPbHda6eRo/eC\n"
+            "/SW1TI3s1NkTHcIF4XXgyNGMVbtH5StbSfXfGzpWToppgTpeox6R3PnfQ9YwwEMJ\n"
+            "zbzFsvvIUKxCrOzmmSEB9aML8l+Oxn9Z87iyBtjVYXaKlgmoQQDb8bYWbJ7NHWSv\n"
+            "6mDj9G/t97hYnZVMfqJsWUBFSrAu5WlBop/+1aQ++2KK2PNdqAdt4qpY8LbTTNUU\n"
+            "KIcIZW5hkan4/TSMqaU/og2THagc0J8Jo7w77knZ8A24OJxBSBQPIO1Ok5SpxucW\n"
+            "FWDR257gmwC8igbRB9db85sMHrIvpywzC2p1kPOfec+xFFDxvfOTlMGWSMUCAwEA\n"
+            "AaOCCOowggjmMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAfT7y+I//iFVoJMLA\n"
+            "yp5SiXkrxQ54CX8uapdomX4i8NcAAAF4w9joHgAABAMARjBEAiAQjusD9By8AkZJ\n"
+            "1QD5gXjRbEXe4gfrJHAQsJlbsH5lXQIgEfa2jm93Xt9gIjNAVYqrpXg1j9ucIUGs\n"
+            "sw6Vr5D8ex0AdgBElGUusO7Or8RAB9io/ijA2uaCvtjLMbU/0zOWtbaBqAAAAXjD\n"
+            "2OhtAAAEAwBHMEUCIQCWxZHw8JGJDzNPDB+45SFRZdN6m75jEeDihLiOaGRXygIg\n"
+            "VYw695kMy78/1176ru5/LPPzOT9CsrRpzpF+JGHiuT4wJwYJKwYBBAGCNxUKBBow\n"
+            "GDAKBggrBgEFBQcDATAKBggrBgEFBQcDAjA+BgkrBgEEAYI3FQcEMTAvBicrBgEE\n"
+            "AYI3FQiH2oZ1g+7ZAYLJhRuBtZ5hhfTrYIFdhYaOQYfCmFACAWQCAScwgYcGCCsG\n"
+            "AQUFBwEBBHsweTBTBggrBgEFBQcwAoZHaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\n"
+            "L3BraS9tc2NvcnAvTWljcm9zb2Z0JTIwUlNBJTIwVExTJTIwQ0ElMjAwMS5jcnQw\n"
+            "IgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLm1zb2NzcC5jb20wHQYDVR0OBBYEFGwz\n"
+            "qsSUKx0F8IpiLsTyNf02XrqTMA4GA1UdDwEB/wQEAwIEsDCCBW0GA1UdEQSCBWQw\n"
+            "ggVgggx3d3cuYmluZy5jb22CEGRpY3QuYmluZy5jb20uY26CEyoucGxhdGZvcm0u\n"
+            "YmluZy5jb22CCiouYmluZy5jb22CCGJpbmcuY29tghZpZW9ubGluZS5taWNyb3Nv\n"
+            "ZnQuY29tghMqLndpbmRvd3NzZWFyY2guY29tghljbi5pZW9ubGluZS5taWNyb3Nv\n"
+            "ZnQuY29tghEqLm9yaWdpbi5iaW5nLmNvbYINKi5tbS5iaW5nLm5ldIIOKi5hcGku\n"
+            "YmluZy5jb22CGGVjbi5kZXYudmlydHVhbGVhcnRoLm5ldIINKi5jbi5iaW5nLm5l\n"
+            "dIINKi5jbi5iaW5nLmNvbYIQc3NsLWFwaS5iaW5nLmNvbYIQc3NsLWFwaS5iaW5n\n"
+            "Lm5ldIIOKi5hcGkuYmluZy5uZXSCDiouYmluZ2FwaXMuY29tgg9iaW5nc2FuZGJv\n"
+            "eC5jb22CFmZlZWRiYWNrLm1pY3Jvc29mdC5jb22CG2luc2VydG1lZGlhLmJpbmcu\n"
+            "b2ZmaWNlLm5ldIIOci5iYXQuYmluZy5jb22CECouci5iYXQuYmluZy5jb22CEiou\n"
+            "ZGljdC5iaW5nLmNvbS5jboIPKi5kaWN0LmJpbmcuY29tgg4qLnNzbC5iaW5nLmNv\n"
+            "bYIQKi5hcHBleC5iaW5nLmNvbYIWKi5wbGF0Zm9ybS5jbi5iaW5nLmNvbYINd3Au\n"
+            "bS5iaW5nLmNvbYIMKi5tLmJpbmcuY29tgg9nbG9iYWwuYmluZy5jb22CEXdpbmRv\n"
+            "d3NzZWFyY2guY29tgg5zZWFyY2gubXNuLmNvbYIRKi5iaW5nc2FuZGJveC5jb22C\n"
+            "GSouYXBpLnRpbGVzLmRpdHUubGl2ZS5jb22CDyouZGl0dS5saXZlLmNvbYIYKi50\n"
+            "MC50aWxlcy5kaXR1LmxpdmUuY29tghgqLnQxLnRpbGVzLmRpdHUubGl2ZS5jb22C\n"
+            "GCoudDIudGlsZXMuZGl0dS5saXZlLmNvbYIYKi50My50aWxlcy5kaXR1LmxpdmUu\n"
+            "Y29tghUqLnRpbGVzLmRpdHUubGl2ZS5jb22CCzNkLmxpdmUuY29tghNhcGkuc2Vh\n"
+            "cmNoLmxpdmUuY29tghRiZXRhLnNlYXJjaC5saXZlLmNvbYIVY253ZWIuc2VhcmNo\n"
+            "LmxpdmUuY29tggxkZXYubGl2ZS5jb22CDWRpdHUubGl2ZS5jb22CEWZhcmVjYXN0\n"
+            "LmxpdmUuY29tgg5pbWFnZS5saXZlLmNvbYIPaW1hZ2VzLmxpdmUuY29tghFsb2Nh\n"
+            "bC5saXZlLmNvbS5hdYIUbG9jYWxzZWFyY2gubGl2ZS5jb22CFGxzNGQuc2VhcmNo\n"
+            "LmxpdmUuY29tgg1tYWlsLmxpdmUuY29tghFtYXBpbmRpYS5saXZlLmNvbYIObG9j\n"
+            "YWwubGl2ZS5jb22CDW1hcHMubGl2ZS5jb22CEG1hcHMubGl2ZS5jb20uYXWCD21p\n"
+            "bmRpYS5saXZlLmNvbYINbmV3cy5saXZlLmNvbYIcb3JpZ2luLmNud2ViLnNlYXJj\n"
+            "aC5saXZlLmNvbYIWcHJldmlldy5sb2NhbC5saXZlLmNvbYIPc2VhcmNoLmxpdmUu\n"
+            "Y29tghJ0ZXN0Lm1hcHMubGl2ZS5jb22CDnZpZGVvLmxpdmUuY29tgg92aWRlb3Mu\n"
+            "bGl2ZS5jb22CFXZpcnR1YWxlYXJ0aC5saXZlLmNvbYIMd2FwLmxpdmUuY29tghJ3\n"
+            "ZWJtYXN0ZXIubGl2ZS5jb22CE3dlYm1hc3RlcnMubGl2ZS5jb22CFXd3dy5sb2Nh\n"
+            "bC5saXZlLmNvbS5hdYIUd3d3Lm1hcHMubGl2ZS5jb20uYXUwgbAGA1UdHwSBqDCB\n"
+            "pTCBoqCBn6CBnIZNaHR0cDovL21zY3JsLm1pY3Jvc29mdC5jb20vcGtpL21zY29y\n"
+            "cC9jcmwvTWljcm9zb2Z0JTIwUlNBJTIwVExTJTIwQ0ElMjAwMS5jcmyGS2h0dHA6\n"
+            "Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9NaWNyb3NvZnQlMjBS\n"
+            "U0ElMjBUTFMlMjBDQSUyMDAxLmNybDBXBgNVHSAEUDBOMEIGCSsGAQQBgjcqATA1\n"
+            "MDMGCCsGAQUFBwIBFidodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL21zY29y\n"
+            "cC9jcHMwCAYGZ4EMAQIBMB8GA1UdIwQYMBaAFLV2DDARzseSQk1Mx1wsyKkM6Atk\n"
+            "MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOC\n"
+            "AgEAco89TAB1sCvQLroHS/xq5X+7QOIEa3+BQDho6pdRfQ4W1sgBJPJE9oe84V3i\n"
+            "bTME8bAGsURyu1SSFZ++JPFkcdggIR155kU8dZEjRDPAlwcEYX8AkZJnCE1HW8x1\n"
+            "asVMF978B9cyq35tgS9UPQu9j0bR1cbLZC8CzmnMVgUYjex/tZqcv0d1M+c2pIMT\n"
+            "Tl3SJQ8h6gE2YyWhQRdj3WxqyJKxVQOeGLN4g0GKm2iTfaXPAN3A7L0Okgl4JCI/\n"
+            "VQTz/tTaG/f9mM3+vgtY9QIQKC0Swx5abPTMJW6YJiK8QoiM98L+e+xvuVHmcG2D\n"
+            "Wjeph1515z/kb+zXrHjUGsr3rwuEXSWGFFmzwzYdSZLSGwAucUskg8dKkU9OpAPm\n"
+            "GA0dXfLbL9imaw/50PhLDo6XrEBjQUihArxDRRGEd7YGBU0W08povMRIE6tbxQZJ\n"
+            "sXREWlACD/SBlSx5pAmE7feAS7T82HrH4jm08/07zAnyh9WNqQH5flBjvHHHN9oC\n"
+            "fP6/q9LcSqSx2KLskGfpaCq7RQpaYKhj9wVdHWnfAUcMTiiQgTl2heWLtfEbIUDf\n"
+            "IGSg9oSdjpP8bxRgTcISZEcGeJLfJWqMJclDiseusW9mAqs0NY0/VvXmyjnL2eZ2\n"
+            "ZKVj0GlyGE1bYkFlXlJ1DbRLrg7xJ+kl9iT/nv84uN+lfgg=\n"
+            "-----END CERTIFICATE-----");
+        cm[RawCertificateID::BING_COM].raw_base64 = raw_base64;
+        cm[RawCertificateID::BING_COM].certPtr = createCert(raw_base64);
+
     }
 
-    // SYMANTEC, signed by VERISIGN, expires 30 Oct 2023
+    // Microsoft RSA TLS CA 01, signed by Baltimore CyberTrust Root, expires 08 Oct 2024
     {
-        std::string raw_base64 = std::string(
+        std::string raw_base64(
             "-----BEGIN CERTIFICATE-----\n"
-            "MIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB\n"
-            "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
-            "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
-            "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
-            "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
-            "aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw\n"
-            "CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV\n"
-            "BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs\n"
-            "YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
-            "AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb\n"
-            "A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW\n"
-            "9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu\n"
-            "s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T\n"
-            "L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK\n"
-            "Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T\n"
-            "AQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu\n"
-            "Y29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw\n"
-            "HwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg\n"
-            "hkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v\n"
-            "Y3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG\n"
-            "A1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E\n"
-            "FgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz\n"
-            "Qzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny\n"
-            "H1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W\n"
-            "Ko8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG\n"
-            "QGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t\n"
-            "TRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY\n"
-            "Kvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc=\n"
+            "MIIFWjCCBEKgAwIBAgIQDxSWXyAgaZlP1ceseIlB4jANBgkqhkiG9w0BAQsFADBa\n"
+            "MQswCQYDVQQGEwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJl\n"
+            "clRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTIw\n"
+            "MDcyMTIzMDAwMFoXDTI0MTAwODA3MDAwMFowTzELMAkGA1UEBhMCVVMxHjAcBgNV\n"
+            "BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEgMB4GA1UEAxMXTWljcm9zb2Z0IFJT\n"
+            "QSBUTFMgQ0EgMDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqYnfP\n"
+            "mmOyBoTzkDb0mfMUUavqlQo7Rgb9EUEf/lsGWMk4bgj8T0RIzTqk970eouKVuL5R\n"
+            "IMW/snBjXXgMQ8ApzWRJCZbar879BV8rKpHoAW4uGJssnNABf2n17j9TiFy6BWy+\n"
+            "IhVnFILyLNK+W2M3zK9gheiWa2uACKhuvgCca5Vw/OQYErEdG7LBEzFnMzTmJcli\n"
+            "W1iCdXby/vI/OxbfqkKD4zJtm45DJvC9Dh+hpzqvLMiK5uo/+aXSJY+SqhoIEpz+\n"
+            "rErHw+uAlKuHFtEjSeeku8eR3+Z5ND9BSqc6JtLqb0bjOHPm5dSRrgt4nnil75bj\n"
+            "c9j3lWXpBb9PXP9Sp/nPCK+nTQmZwHGjUnqlO9ebAVQD47ZisFonnDAmjrZNVqEX\n"
+            "F3p7laEHrFMxttYuD81BdOzxAbL9Rb/8MeFGQjE2Qx65qgVfhH+RsYuuD9dUw/3w\n"
+            "ZAhq05yO6nk07AM9c+AbNtRoEcdZcLCHfMDcbkXKNs5DJncCqXAN6LhXVERCw/us\n"
+            "G2MmCMLSIx9/kwt8bwhUmitOXc6fpT7SmFvRAtvxg84wUkg4Y/Gx++0j0z6StSeN\n"
+            "0EJz150jaHG6WV4HUqaWTb98Tm90IgXAU4AW2GBOlzFPiU5IY9jt+eXC2Q6yC/Zp\n"
+            "TL1LAcnL3Qa/OgLrHN0wiw1KFGD51WRPQ0Sh7QIDAQABo4IBJTCCASEwHQYDVR0O\n"
+            "BBYEFLV2DDARzseSQk1Mx1wsyKkM6AtkMB8GA1UdIwQYMBaAFOWdWTCCR1jMrPoI\n"
+            "VDaGezq1BE3wMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYI\n"
+            "KwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQoMCYwJAYI\n"
+            "KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTA6BgNVHR8EMzAxMC+g\n"
+            "LaArhilodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vT21uaXJvb3QyMDI1LmNybDAq\n"
+            "BgNVHSAEIzAhMAgGBmeBDAECATAIBgZngQwBAgIwCwYJKwYBBAGCNyoBMA0GCSqG\n"
+            "SIb3DQEBCwUAA4IBAQCfK76SZ1vae4qt6P+dTQUO7bYNFUHR5hXcA2D59CJWnEj5\n"
+            "na7aKzyowKvQupW4yMH9fGNxtsh6iJswRqOOfZYC4/giBO/gNsBvwr8uDW7t1nYo\n"
+            "DYGHPpvnpxCM2mYfQFHq576/TmeYu1RZY29C4w8xYBlkAA8mDJfRhMCmehk7cN5F\n"
+            "JtyWRj2cZj/hOoI45TYDBChXpOlLZKIYiG1giY16vhCRi6zmPzEwv+tk156N6cGS\n"
+            "Vm44jTQ/rs1sa0JSYjzUaYngoFdZC4OfxnIkQvUIA4TOFmPzNPEFdjcZsgbeEz4T\n"
+            "cGHTBPK4R28F44qIMCtHRV55VMX53ev6P3hRddJb\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::SYMANTEC] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::MS_RSA_TLS_CA_1].raw_base64 = raw_base64;
+        cm[RawCertificateID::MS_RSA_TLS_CA_1].certPtr = createCert(raw_base64);
+
     }
 
-    // DIGICERT_ROOT_CA, (root CA), expires 10 Nov 2031
+    // Baltimore CyberTrust Root, (root CA), expires May 13, 2025
     {
         std::string raw_base64 = std::string(
             "-----BEGIN CERTIFICATE-----\n"
-            "MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\n"
-            "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
-            "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"
-            "ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\n"
-            "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"
-            "LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\n"
-            "RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n"
-            "+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\n"
-            "PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\n"
-            "xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\n"
-            "Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\n"
-            "hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\n"
-            "EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\n"
-            "MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\n"
-            "FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\n"
-            "nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\n"
-            "eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\n"
-            "hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\n"
-            "Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n"
-            "vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n"
-            "+OkuE6N36B9K\n"
+            "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n"
+            "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n"
+            "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n"
+            "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n"
+            "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n"
+            "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n"
+            "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n"
+            "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n"
+            "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n"
+            "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n"
+            "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n"
+            "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n"
+            "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n"
+            "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n"
+            "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n"
+            "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n"
+            "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n"
+            "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n"
+            "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::DIGICERT_ROOT_CA] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::BALTIMORE_CYBER_TRUST_ROOT].raw_base64 = raw_base64;
+        cm[RawCertificateID::BALTIMORE_CYBER_TRUST_ROOT].certPtr = createCert(raw_base64);
     }
 
-    // DIGICERT_IM_CA, signed by DIGICERT_ROOT_CA, expires 22 Oct 2028
+    // Microsoft IT TLS CA 5, signed by Baltimore CyberTrust Root, expires May 20, 2024
     {
         std::string raw_base64 = std::string(
             "-----BEGIN CERTIFICATE-----\n"
-            "MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs\n"
-            "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
-            "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"
-            "ZSBFViBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAyMjEyMDAwMFowcDEL\n"
-            "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"
-            "LmRpZ2ljZXJ0LmNvbTEvMC0GA1UEAxMmRGlnaUNlcnQgU0hBMiBIaWdoIEFzc3Vy\n"
-            "YW5jZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2\n"
-            "4C/CJAbIbQRf1+8KZAayfSImZRauQkCbztyfn3YHPsMwVYcZuU+UDlqUH1VWtMIC\n"
-            "Kq/QmO4LQNfE0DtyyBSe75CxEamu0si4QzrZCwvV1ZX1QK/IHe1NnF9Xt4ZQaJn1\n"
-            "itrSxwUfqJfJ3KSxgoQtxq2lnMcZgqaFD15EWCo3j/018QsIJzJa9buLnqS9UdAn\n"
-            "4t07QjOjBSjEuyjMmqwrIw14xnvmXnG3Sj4I+4G3FhahnSMSTeXXkgisdaScus0X\n"
-            "sh5ENWV/UyU50RwKmmMbGZJ0aAo3wsJSSMs5WqK24V3B3aAguCGikyZvFEohQcft\n"
-            "bZvySC/zA/WiaJJTL17jAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA\n"
-            "MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n"
-            "NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy\n"
-            "dC5jb20wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29t\n"
-            "L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDA9BgNVHSAENjA0MDIG\n"
-            "BFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ\n"
-            "UzAdBgNVHQ4EFgQUUWj/kK8CB3U8zNllZGKiErhZcjswHwYDVR0jBBgwFoAUsT7D\n"
-            "aQP4v0cB1JgmGggC72NkK8MwDQYJKoZIhvcNAQELBQADggEBABiKlYkD5m3fXPwd\n"
-            "aOpKj4PWUS+Na0QWnqxj9dJubISZi6qBcYRb7TROsLd5kinMLYBq8I4g4Xmk/gNH\n"
-            "E+r1hspZcX30BJZr01lYPf7TMSVcGDiEo+afgv2MW5gxTs14nhr9hctJqvIni5ly\n"
-            "/D6q1UEL2tU2ob8cbkdJf17ZSHwD2f2LSaCYJkJA69aSEaRkCldUxPUd1gJea6zu\n"
-            "xICaEnL6VpPX/78whQYwvwt/Tv9XBZ0k7YXDK/umdaisLRbvfXknsuvCnQsH6qqF\n"
-            "0wGjIChBWUMo0oHjqvbsezt3tkBigAVBRQHvFwY+3sAzm2fTYS5yh+Rp/BIAV0Ae\n"
-            "cPUeybQ=\n"
+            "MIIFtDCCBJygAwIBAgIQCIjNUl8ZJERNFKWCkd65UjANBgkqhkiG9w0BAQsFADBa\n"
+            "MQswCQYDVQQGEwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJl\n"
+            "clRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTE2\n"
+            "MDUyMDEyNTMwM1oXDTI0MDUyMDEyNTMwM1owgYsxCzAJBgNVBAYTAlVTMRMwEQYD\n"
+            "VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy\n"
+            "b3NvZnQgQ29ycG9yYXRpb24xFTATBgNVBAsTDE1pY3Jvc29mdCBJVDEeMBwGA1UE\n"
+            "AxMVTWljcm9zb2Z0IElUIFRMUyBDQSA1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A\n"
+            "MIICCgKCAgEAmt+BXDuPrul5lrmaeaeB8jnaVShGIwLFgmYHthXe/Zw6GpuRCdJm\n"
+            "jwuJF/hxhyF/ONM/miUAtzXQq/gIejbzUFvfKykn3qTdJJL69MZwjTYqmvCA3jX6\n"
+            "HkKdCYGq1QcKFqXFWkJtQr4eQoK0VzCZW0Ur1I/TCgbGc5Ok4YPvxb8FJ6d4zbML\n"
+            "4J4iFvOY3KYU6MyU1yP50FCZu7ULEJXx3wLpj46dVpk82I/TWPtckn49e/hQSVr3\n"
+            "EHt3+OZKkEpVUt6UrXQJoGRXLM0HkJ8WrZXD0Qa68e9sBbUErKncGzGbDi0ZlQRP\n"
+            "3mbLrTVyrxmCCLIUOhZfsDyb240MsALWJh/oFXHE7/ljOUOM6cKSLqHCoDAlDpYn\n"
+            "X56jK4LWEL08GR6mh/5VITpcQfwBmMwvkv9mOLS4ZpwPEmhLSqyGu16Y/56mnFNs\n"
+            "MxGk0K5SR9eLj/GWrLkpmo8s8a1kGMMmuwBk3lBwwLvsxmuu06DvwPFcDfLMelna\n"
+            "GDMvWRCtZxQsXyJDSkTh6N3g51UWTgnvA0wMSFBa8APfju9jyltnh0NALAa2Hw8+\n"
+            "U8BmP9cUFeYIYphIfoPlp7VdUS1ULWH9NF3Ut4DN0n3OsSQ785dsbBPeihfJivVI\n"
+            "lUL3EpDjEBf2oQDFNiplkZ4F7EIuWriZG//UTrX6ZlXZg46/CCmN+gsCAwEAAaOC\n"
+            "AUIwggE+MB0GA1UdDgQWBBQI/iWfdOqHBMK8u46oOF8zxtFsZTAfBgNVHSMEGDAW\n"
+            "gBTlnVkwgkdYzKz6CFQ2hns6tQRN8DASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud\n"
+            "DwEB/wQEAwIBhjAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUF\n"
+            "BwMJMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln\n"
+            "aWNlcnQuY29tMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0\n"
+            "LmNvbS9PbW5pcm9vdDIwMjUuY3JsMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsG\n"
+            "AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA0GCSqGSIb3DQEB\n"
+            "CwUAA4IBAQA+8s8wpXq/HmrfOVgYKDzDne7ngcVL/Gf2vx9ON9re8K/uivkDe2Bn\n"
+            "dMc72v8rSuv9VHUTi+XCgRK6UhIguimKOs1DJMzVFwX+nBY/c+BtQcB2PfKrSMVZ\n"
+            "YmS6RE8KGII/Qeo/GDpY56AwV3X10WoxFLaUmWXatugB3uSr+7Xz5RkKGF+kAlfe\n"
+            "tlwmb3P+Lgn1CEPED8ckf50oZ2Wh3FvwOv34cIXnpU8k3kI/HUQ7XYUGhR0eHNTZ\n"
+            "TlHk/R4RFsyeANmXGpfjZceGNRtTdr4y0SxBSUujPpMMW3dXBzA8NYuM0WmiJ/pV\n"
+            "6KudEB7RF9+6bInTyVvXC5SIqdi0ldeO\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::DIGICERT_IM_CA] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::MS_IT_TLS_CA_5].raw_base64 = raw_base64;
+        cm[RawCertificateID::MS_IT_TLS_CA_5].certPtr = createCert(raw_base64);
     }
 
-    // FACEBOOK_COM, *.facebook.com - signed by DIGICERT_IM_CA, expires 25 Jan 2018
+    // www.microsoft.com - signed by Microsoft IT TLS CA 5, expires October 22, 2021
     {
         std::string raw_base64 = std::string(
             "-----BEGIN CERTIFICATE-----\n"
-            "MIIH5DCCBsygAwIBAgIQDACZt9eJyfZmJjF+vOp8HDANBgkqhkiG9w0BAQsFADBw\n"
-            "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
-            "d3cuZGlnaWNlcnQuY29tMS8wLQYDVQQDEyZEaWdpQ2VydCBTSEEyIEhpZ2ggQXNz\n"
-            "dXJhbmNlIFNlcnZlciBDQTAeFw0xNjEyMDkwMDAwMDBaFw0xODAxMjUxMjAwMDBa\n"
-            "MGkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHEwpN\n"
-            "ZW5sbyBQYXJrMRcwFQYDVQQKEw5GYWNlYm9vaywgSW5jLjEXMBUGA1UEAwwOKi5m\n"
-            "YWNlYm9vay5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASg8YyvpzmIaFsT\n"
-            "Vg4VFbSnRe8bx+WFPCsE1GWKMTEi6qOS7WSdumWB47YSdtizC0Xx/wooFJxP3HOp\n"
-            "s0ktoHbTo4IFSjCCBUYwHwYDVR0jBBgwFoAUUWj/kK8CB3U8zNllZGKiErhZcjsw\n"
-            "HQYDVR0OBBYEFMuYKIyhcufiMqmaPfINoYFWoRqLMIHHBgNVHREEgb8wgbyCDiou\n"
-            "ZmFjZWJvb2suY29tgg4qLmZhY2Vib29rLm5ldIIIKi5mYi5jb22CCyouZmJjZG4u\n"
-            "bmV0ggsqLmZic2J4LmNvbYIQKi5tLmZhY2Vib29rLmNvbYIPKi5tZXNzZW5nZXIu\n"
-            "Y29tgg4qLnh4LmZiY2RuLm5ldIIOKi54eS5mYmNkbi5uZXSCDioueHouZmJjZG4u\n"
-            "bmV0ggxmYWNlYm9vay5jb22CBmZiLmNvbYINbWVzc2VuZ2VyLmNvbTAOBgNVHQ8B\n"
-            "Af8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMHUGA1UdHwRu\n"
-            "MGwwNKAyoDCGLmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWhhLXNlcnZl\n"
-            "ci1nNS5jcmwwNKAyoDCGLmh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWhh\n"
-            "LXNlcnZlci1nNS5jcmwwTAYDVR0gBEUwQzA3BglghkgBhv1sAQEwKjAoBggrBgEF\n"
-            "BQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZngQwBAgIwgYMG\n"
-            "CCsGAQUFBwEBBHcwdTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu\n"
-            "Y29tME0GCCsGAQUFBzAChkFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln\n"
-            "aUNlcnRTSEEySGlnaEFzc3VyYW5jZVNlcnZlckNBLmNydDAMBgNVHRMBAf8EAjAA\n"
-            "MIICsAYKKwYBBAHWeQIEAgSCAqAEggKcApoAdgCkuQmQtBhYFIe7E6LMZ3AKPDWY\n"
-            "BPkb37jjd80OyA3cEAAAAVjl02IEAAAEAwBHMEUCIQDvWFsUeqWE/xwIYcXPvbb5\n"
-            "ExzfHBZTNwfnUf4RPO/lBgIgdOGmr0j7+u8/S+7tfFw71ZEjqpwJELl/sEFuQdPn\n"
-            "pwQBLwCsO5rtf6lnR1cVnm19V1Zy+dmBAJQem97/7KExO3V4LQAAAVjl02IoAAAE\n"
-            "AQEAYvnMV+BfP3Wrk4yFQE/Zx5WsjSabYOpLj1Tj5xFaoVoHdGqLCf/Hi+Vv0IRy\n"
-            "ePKFBCSW0+3eA589+WnCDMwcJlBYeZV8MlvHFZg3a66Uhx/OAvoetb0mCtUpnmIE\n"
-            "UwLX/eMNEvjg2qTH3/33ysCo2l25+/EcR8upF+2KIcmnk5WwaJzfq7cFPQc4Cvcz\n"
-            "mTHasJi/jmVaIaJ9HC50g3dx584TQX26lDLddF/Li4uEbJ7TSopnTzjQdWBtWbMF\n"
-            "h3bcfhFCKaqK2kIJV3bgup5HibEnZ2LPm6lekY072ZFCGM4QYc4ukqzou2JWCRmG\n"
-            "o0dMHJhnvQXpnIQGwATqCD4Q1AB2AFYUBpov18Ls0/XhvUSyPsdGdrm8mRFcwO+U\n"
-            "mFXWidDdAAABWOXTYrkAAAQDAEcwRQIgGhXXbwUO5bD4Ts/Q0gqZwUS2vl/A4Hem\n"
-            "k7ovxl82v9oCIQCbtkflDXbcunY4MAQCbKlnesPGc/nftA84xDhJpxFHWQB3AO5L\n"
-            "vbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWOXTZBEAAAQDAEgwRgIh\n"
-            "AKubngQoa5Iak8eCOrffH7Xx3AP1NMb5pFw35nt2VSeRAiEA47Kq1UQcDXIEsV+W\n"
-            "nuPd9LM5kpdeu0+TiHKtTLRQr0swDQYJKoZIhvcNAQELBQADggEBADrNSsoonbj1\n"
-            "YGjwy9t9wP9+kZBwrNMO2n5N5fQNhGawkEAX+lXlzgm3TqYlTNi6sCFbPBAErim3\n"
-            "aMVlWuOlctgnjtAdmdWZ4qEONrBLHPGgukDJ3Uen/EC/gwK6KdBCb4Ttp6MMPY1c\n"
-            "hb/ciTLi3QUUU4h4OJWqUjvccBCDs/LydNjKWZZTxLJmxRSmfpyCU3uU2XHHMNlo\n"
-            "8UTIlqZsOtdqhg7/Q/cvMDHDkcI/tqelmg0MD2H9KpcmAvVkwgjn+BVpv5HELl+0\n"
-            "EP0UhYknI1B6LBecJuj7jI26eXZdX35CYkpI/SZA9KK+OYKHh6vCxKqnRZ9ZQUOj\n"
-            "XnIWKQeV5Hg=\n"
+            "MIIJHzCCBwegAwIBAgITLQAMNxVixB2TlAh/aAAAAAw3FTANBgkqhkiG9w0BAQsF\n"
+            "ADCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\n"
+            "B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEVMBMGA1UE\n"
+            "CxMMTWljcm9zb2Z0IElUMR4wHAYDVQQDExVNaWNyb3NvZnQgSVQgVExTIENBIDUw\n"
+            "HhcNMTkxMDIxMjIwNDA0WhcNMjExMDIxMjIwNDA0WjCBiDELMAkGA1UEBhMCVVMx\n"
+            "CzAJBgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv\n"
+            "ZnQgQ29ycG9yYXRpb24xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEa\n"
+            "MBgGA1UEAxMRd3d3Lm1pY3Jvc29mdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\n"
+            "DwAwggEKAoIBAQDTEK1CzUwdArEOb/vDOqds7/vQ1yGQtAYaZYNBch27Kw3/XKnf\n"
+            "td3NVj7tYe7MhI1U+bknxhSx7m4ti7Pzt6mxQiTZ/KegYhxosd3sOEikXgJVzECv\n"
+            "h0Mvd6adrvi00cUeQz0dlkUkuxMAjiFs+FX7Ogf4xt8ub4hKZPGB85vDnQQ0OHVh\n"
+            "L9IuUbYHhmh8EoDEdR+og+lj7u5OKt3YEWntgbnfV1d66U59kfp5Dg4T/zFjqz/l\n"
+            "U3KGBWgj0YoxH8KGfuq2YfFQsm7Q4MDJnR2PNUbwwrK5JldcRn27o5SVZxaB55bs\n"
+            "dyHWL0GbG5JoIIWg8pGJXKYGfARDEVjWijBPAgMBAAGjggR7MIIEdzCCAXwGCisG\n"
+            "AQQB1nkCBAIEggFsBIIBaAFmAHYA9lyUL9F3MCIUVBgIMJRWjuNNExkzv98MLyAL\n"
+            "zE7xZOMAAAFt8GJxcQAABAMARzBFAiEAldKDzhaLTJ1PpTpE7TmrRp+nDwoEZbW5\n"
+            "JOfrPKoR6PsCIBOqc6bzu7MnferBbxkUKwS67LpFTJgxYk6RV98m5fK2AHUAVYHU\n"
+            "whaQNgFK6gubVzxT8MDkOHhwJQgXL6OqHQcT0wwAAAFt8GJyzQAABAMARjBEAiBa\n"
+            "JqHGYrk+yh3ccuelsJxqLbhE3DJuSBZxe+xEpiabhQIgRdcckht/x8uG6tSrRKg5\n"
+            "0GdwnWlFKMBDT50rQjIPflMAdQB9PvL4j/+IVWgkwsDKnlKJeSvFDngJfy5ql2iZ\n"
+            "fiLw1wAAAW3wYnG7AAAEAwBGMEQCIGToqXolvHTes1f0QwV9RSvEE5HVwX6jn70+\n"
+            "KaExl0+BAiBosObeHSU867FO1Aw5dw+R01ZZ1fudHxDwuXgLvqFmQzAnBgkrBgEE\n"
+            "AYI3FQoEGjAYMAoGCCsGAQUFBwMCMAoGCCsGAQUFBwMBMD4GCSsGAQQBgjcVBwQx\n"
+            "MC8GJysGAQQBgjcVCIfahnWD7tkBgsmFG4G1nmGF9OtggV2E0t9CgueTegIBZAIB\n"
+            "HTCBhQYIKwYBBQUHAQEEeTB3MFEGCCsGAQUFBzAChkVodHRwOi8vd3d3Lm1pY3Jv\n"
+            "c29mdC5jb20vcGtpL21zY29ycC9NaWNyb3NvZnQlMjBJVCUyMFRMUyUyMENBJTIw\n"
+            "NS5jcnQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLm1zb2NzcC5jb20wHQYDVR0O\n"
+            "BBYEFParvwUeQbdw6ZH4GpVu9gwrCfuVMAsGA1UdDwQEAwIEsDCBmQYDVR0RBIGR\n"
+            "MIGOghN3d3dxYS5taWNyb3NvZnQuY29tghF3d3cubWljcm9zb2Z0LmNvbYIYc3Rh\n"
+            "dGljdmlldy5taWNyb3NvZnQuY29tghFpLnMtbWljcm9zb2Z0LmNvbYINbWljcm9z\n"
+            "b2Z0LmNvbYIRYy5zLW1pY3Jvc29mdC5jb22CFXByaXZhY3kubWljcm9zb2Z0LmNv\n"
+            "bTCBrAYDVR0fBIGkMIGhMIGeoIGboIGYhktodHRwOi8vbXNjcmwubWljcm9zb2Z0\n"
+            "LmNvbS9wa2kvbXNjb3JwL2NybC9NaWNyb3NvZnQlMjBJVCUyMFRMUyUyMENBJTIw\n"
+            "NS5jcmyGSWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9N\n"
+            "aWNyb3NvZnQlMjBJVCUyMFRMUyUyMENBJTIwNS5jcmwwTQYDVR0gBEYwRDBCBgkr\n"
+            "BgEEAYI3KgEwNTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\n"
+            "L3BraS9tc2NvcnAvY3BzMB8GA1UdIwQYMBaAFAj+JZ906ocEwry7jqg4XzPG0Wxl\n"
+            "MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOC\n"
+            "AgEAdWMaW3NOP5Yr47Sow1UZNLMmDlxNjz+8DcHiflQfKsImOvs/UflUrMGXG7rH\n"
+            "57NbJZ9nYpSTHWxSJfKsGPc3pgc5R1sxZxDb6lBuXEN9NvhJMmPwBkyKJAAnjYN6\n"
+            "yCNZP4X6dBOONW8uopknF+CRHDZdSiMaFiE4fVCe0LrO90b4ROPsRV8zHn57i1B1\n"
+            "69n1cqsLXrMHvK0Xnu7rwrvvd5BbOaqm7DrgwJYUk0UciNEfcyN2dNRcCxofWQdV\n"
+            "GQqvagqtjyDCm/EJ6DJ2kWllGHjauc8IkMaUeCedTYphChEckXoRBZikZtyL0oZj\n"
+            "67iKht6mm4fST+x0Zuu5wdzUoCTQsNTHV0GSbcVIRcgmaNiwP+0+lrRocUrj2h/7\n"
+            "2IQN8Pe/+CrDeVJNlKA9gWNl+t1F/r3CKWnkENyNUCTggiCSojdY9Rkj1rTieP6M\n"
+            "SBUZBWf3MB5XIuaLOTO0/whM831krxNG/k0mdCpDtdKvCKIcARrkKM9A3TxtVpOd\n"
+            "8f9kifcGaPqTQYr8fxhrNB864qsCG17o8ZckBKW8FY5H/jSQAZb1qbwsTbBMXJIr\n"
+            "0lAPwH7LIAHJJyslG0X3Mp0ARumGWqVwiHOCaLXO1iSQX0wW4yo+lGxWONvOIoad\n"
+            "2Ned/fxM675fEVC+r+DI6BKbt9ChfIXiXeULqOZC3yp2Fo8=\n"
             "-----END CERTIFICATE-----\n");
-        cm[RawCertificateID::FACEBOOK_COM] =
-            std::make_pair(raw_base64, createCert(raw_base64));
+        cm[RawCertificateID::MICROSOFT_COM].raw_base64 = raw_base64;
+        cm[RawCertificateID::MICROSOFT_COM].certPtr = createCert(raw_base64);
     }
 
     return cm;
@@ -385,6 +437,44 @@ CertMap TEST_CERTS = initializeTestCerts();
 
 } // namespace TestData::anonymous
 
+void checkCertificateValidity(std::map<RawCertificateID, TestCert>::iterator& it)
+{
+    if (it->second.valid == TestCert::UNKNOWN)
+    {
+        auto buff = BIO_new(BIO_s_mem());
+        BIO_write(buff, it->second.raw_base64.c_str(), it->second.raw_base64.size());
+
+        X509* x509 = PEM_read_bio_X509(buff, nullptr, nullptr, nullptr);
+        BIO_free_all(buff);
+
+        RUNNER_ASSERT_MSG(x509 != NULL, "Test certificate " << it->first << " can't be parsed");
+
+        if (X509_cmp_current_time(X509_get_notBefore(x509)) > 0)
+            it->second.valid = TestCert::NOT_YET_VALID;
+        else if (X509_cmp_current_time(X509_get_notAfter(x509)) < 0)
+            it->second.valid = TestCert::EXPIRED;
+        else
+            it->second.valid = TestCert::VALID;
+
+        X509_free(x509);
+    }
+
+    switch (it->second.valid)
+    {
+    case TestCert::NOT_YET_VALID:
+        RUNNER_FAIL_MSG(
+                "Test certificate " << it->first <<
+                " is not yet valid. Check the certificate and the system date.");
+        break;
+    case TestCert::EXPIRED:
+        RUNNER_FAIL_MSG(
+                "Test certificate " << it->first <<
+                " has expired. Check the certificate and the system date.");
+        break;
+    default:
+        break;
+    }
+}
 
 std::string getTestCertificateBase64(certificateID id)
 {
@@ -392,10 +482,12 @@ std::string getTestCertificateBase64(certificateID id)
 
     RUNNER_ASSERT_MSG(cert != TEST_CERTS.end(), "Unknown certificate index!");
 
-    auto &certPair = cert->second;
-    RUNNER_ASSERT_MSG(certPair.first.size() > 0, "Certificate is empty!");
+    auto &certStruct = cert->second;
+    RUNNER_ASSERT_MSG(certStruct.raw_base64.size() > 0, "Certificate is empty!");
 
-    return certPair.first;
+    checkCertificateValidity(cert);
+
+    return certStruct.raw_base64;
 }
 
 CKM::CertificateShPtr getTestCertificate(certificateID id)
@@ -404,10 +496,12 @@ CKM::CertificateShPtr getTestCertificate(certificateID id)
 
     RUNNER_ASSERT_MSG(cert != TEST_CERTS.end(), "Unknown certificate index!");
 
-    auto &certPair = cert->second;
-    RUNNER_ASSERT_MSG(certPair.second != nullptr, "Certificate is empty!");
+    auto &certStruct = cert->second;
+    RUNNER_ASSERT_MSG(certStruct.certPtr != nullptr, "Certificate is empty!");
+
+    checkCertificateValidity(cert);
 
-    return certPair.second;
+    return certStruct.certPtr;
 }
 
 } // namespace TestData