// -*- indent-tabs-mode: nil; js-indent-level: 2 -*- // Any copyright is dedicated to the Public Domain. // http://creativecommons.org/publicdomain/zero/1.0/ "use strict"; // Tests handling of certificates issued by StartCom and WoSign. If such // certificates have a notBefore before 21 October 2016, they are handled // normally. Otherwise, they are treated as revoked. do_get_profile(); // must be called before getting nsIX509CertDB const certdb = Cc["@mozilla.org/security/x509certdb;1"] .getService(Ci.nsIX509CertDB); function loadCertWithTrust(certName, trustString) { addCertFromFile(certdb, "test_startcom_wosign/" + certName + ".pem", trustString); } function certFromFile(certName) { return constructCertFromFile("test_startcom_wosign/" + certName + ".pem"); } function checkEndEntity(cert, expectedResult) { // (new Date("2016-11-01")).getTime() / 1000 const VALIDATION_TIME = 1477958400; checkCertErrorGenericAtTime(certdb, cert, expectedResult, certificateUsageSSLServer, VALIDATION_TIME); } loadCertWithTrust("ca", "CTu,,"); // This is not a real StartCom CA - it merely has the same distinguished name as // one (namely "/C=IL/O=StartCom Ltd./CN=StartCom Certification Authority G2", // encoded with PrintableStrings). By checking for specific DNs, we can enforce // the date-based policy in a way that is testable. loadCertWithTrust("StartComCA", ",,"); checkEndEntity(certFromFile("StartCom-before-cutoff"), PRErrorCodeSuccess); checkEndEntity(certFromFile("StartCom-after-cutoff"), SEC_ERROR_REVOKED_CERTIFICATE); // Similarly, this is not a real WoSign CA. It has the same distinguished name // as "/C=CN/O=WoSign CA Limited/CN=Certification Authority of WoSign", encoded // with PrintableStrings). loadCertWithTrust("WoSignCA", ",,"); checkEndEntity(certFromFile("WoSign-before-cutoff"), PRErrorCodeSuccess); checkEndEntity(certFromFile("WoSign-after-cutoff"), SEC_ERROR_REVOKED_CERTIFICATE);