Bug 998057: Add test pinset to the pin generator (r=cviecco)
authorMonica Chew <mmc@mozilla.com>
Wed, 30 Apr 2014 15:30:44 -0700
changeset 181521 762f8c20a1090be038f41396d0ce276e22d062fe
parent 181520 4c4d621eeadad8f90b19448118f18651d49afb81
child 181522 5625f2879911c22b4a29b1a93daac8774ba84b01
push id272
push userpvanderbeken@mozilla.com
push dateMon, 05 May 2014 16:31:18 +0000
reviewerscviecco
bugs998057
milestone32.0a1
Bug 998057: Add test pinset to the pin generator (r=cviecco)
security/manager/boot/src/PreloadedHPKPins.json
security/manager/boot/src/StaticHPKPins.h
security/manager/boot/src/default-ee.der
security/manager/boot/src/genHPKPStaticPins.js
security/manager/ssl/tests/unit/tlsserver/cert8.db
security/manager/ssl/tests/unit/tlsserver/default-ee.der
security/manager/ssl/tests/unit/tlsserver/generate_certs.sh
security/manager/ssl/tests/unit/tlsserver/key3.db
security/manager/ssl/tests/unit/tlsserver/other-test-ca.der
security/manager/ssl/tests/unit/tlsserver/test-ca.der
--- a/security/manager/boot/src/PreloadedHPKPins.json
+++ b/security/manager/boot/src/PreloadedHPKPins.json
@@ -6,17 +6,17 @@
 // The top-level element is a dictionary with two keys: "pinsets" maps details
 // of certificate pinning to a name and "entries" contains the HPKP details for
 // each host.
 //
 // "pinsets" is a list of objects. Each object has the following members:
 //   name: (string) the name of the pinset
 //   static_spki_hashes: (list of strings) the set of allowed SPKIs hashes
 //
-// For a given pinset, a certifiacte is accepted if at least one of the
+// For a given pinset, a certificate is accepted if at least one of the
 // "static_spki_hashes" SPKIs is found in the chain.
 // SPKIs are specified as names, which must match up with the name given
 // in the Mozilla root store.
 //
 // "entries" is a list of objects. Each object has the following members:
 //   name: (string) the DNS name of the host in question
 //   include_subdomains: (optional bool) whether subdomains of |name| are also covered
 //   pins: (string) the |name| member of an object in |pinsets|
@@ -76,20 +76,27 @@
         "DigiCert High Assurance EV Root CA",
         "DigiCert Assured ID Root CA",
         "DigiCert Global Root CA",
         "thawte Primary Root CA",
         "thawte Primary Root CA - G2",
         "thawte Primary Root CA - G3",
         "Baltimore CyberTrust Root"
       ]
-    }
-  ],
+    },
+    // For pinning tests on pinning.example.com, the issuer must be testCA.
+    {
+      "name": "mozilla_test",
+      "static_spki_hashes": [
+        "End Entity Test Cert"
+      ]
+    }  ],
 
   "entries": [
     { "name": "addons.mozilla.org", "include_subdomains": true, "pins": "mozilla" },
     { "name": "addons.mozilla.net", "include_subdomains": true, "pins": "mozilla" },
     { "name": "cdn.mozilla.net", "include_subdomains": true, "pins": "mozilla_cdn" },
     { "name": "cdn.mozilla.org", "include_subdomains": true, "pins": "mozilla_cdn" },
     { "name": "media.mozilla.com", "include_subdomains": true, "pins": "mozilla_cdn" },
-    { "name": "getpersonas.org", "include_subdomains": true, "pins": "mozilla_cdn" }
+    { "name": "include-subdomain.pinning.example.com", "include_subdomains": true, "pins": "mozilla_test" },
+    { "name": "exclude-subdomains.pinning.example.com", "include_subdomains": false, "pins": "mozilla_test" }
   ]
 }
--- a/security/manager/boot/src/StaticHPKPins.h
+++ b/security/manager/boot/src/StaticHPKPins.h
@@ -18,16 +18,20 @@ static const char kDigiCert_Assured_ID_R
 /* DigiCert Global Root CA */
 static const char kDigiCert_Global_Root_CAFingerprint[]=
   "r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
 
 /* DigiCert High Assurance EV Root CA */
 static const char kDigiCert_High_Assurance_EV_Root_CAFingerprint[]=
   "WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=";
 
+/* End Entity Test Cert */
+static const char kEnd_Entity_Test_CertFingerprint[]=
+  "97H5CNFJ2u3u1NvH3ru67t5OiCO8KydOyNh9GCEyAeM=";
+
 /* Equifax Secure CA */
 static const char kEquifax_Secure_CAFingerprint[]=
   "/1aAzXOlcD2gSBegdf1GJQanNQbEuBoVg+9UlHjSZHY=";
 
 /* GTE CyberTrust Global Root */
 static const char kGTE_CyberTrust_Global_RootFingerprint[]=
   "EGn6R6CqT4z3ERscrqNl7q7RC//zJmDe9uBhS/rnCHU=";
 
@@ -169,27 +173,33 @@ static const char* const kPinSet_mozilla
     kGeoTrust_Universal_CAFingerprint,
     kGeoTrust_Primary_Certification_Authority___G3Fingerprint,
     kDigiCert_Global_Root_CAFingerprint,
     kVerisign_Class_3_Public_Primary_Certification_AuthorityFingerprint,
     kGeoTrust_Primary_Certification_Authority___G2Fingerprint,
 };
 const StaticPinset kPinSet_mozilla_cdn = { 28, kPinSet_mozilla_cdn_Data};
 
+static const char* const kPinSet_mozilla_test_Data[] = {
+    kEnd_Entity_Test_CertFingerprint,
+};
+const StaticPinset kPinSet_mozilla_test = { 1, kPinSet_mozilla_test_Data};
+
 /*Domainlist*/
 typedef struct {
   const char *mHost;
   const bool mIncludeSubdomains;
   const StaticPinset *pinset;
 } TransportSecurityPreload;
 
 static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
   { "addons.mozilla.net",	true,	&kPinSet_mozilla },
   { "addons.mozilla.org",	true,	&kPinSet_mozilla },
   { "cdn.mozilla.net",	true,	&kPinSet_mozilla_cdn },
   { "cdn.mozilla.org",	true,	&kPinSet_mozilla_cdn },
-  { "getpersonas.org",	true,	&kPinSet_mozilla_cdn },
+  { "exclude-subdomains.pinning.example.com",	false,	&kPinSet_mozilla_test },
+  { "include-subdomain.pinning.example.com",	true,	&kPinSet_mozilla_test },
   { "media.mozilla.com",	true,	&kPinSet_mozilla_cdn },
 };
 
-static const int kPublicKeyPinningPreloadListLength = 6;
+static const int kPublicKeyPinningPreloadListLength = 7;
 
-const PRTime kPreloadPKPinsExpirationTime = INT64_C(1409688371834000);
+const PRTime kPreloadPKPinsExpirationTime = INT64_C(1409763023059000);
copy from security/manager/ssl/tests/unit/tlsserver/default-ee.der
copy to security/manager/boot/src/default-ee.der
index ac98037be14fb900633475e38ad684a18ab943bf..0f52bac754ea5cfb641f41f4a0748dcde8ebeea4
GIT binary patch
literal 551
zc$_n6Vp29}V(eMK%*4pV#K>sC%f_kI=F#?@mywZ`mBB#BP{4qXjX9KsS(rT}wYWsV
z+0j5woY&CAz}VQp(9GD(*dj`t*94hsAY~|FAO_LH57y(Fm!g}RSCUy$Y0x+y*#<^d
z2Ij_I27|^<rp88w4Q6w<nlARK`u@9N?Luzv@7#6@E6lf@Tz&lFor>AUOKjdA6PNt@
z!%B^J!Y$T*`=Fe8Pp@3R@$SV<=9np;{*{?{MK89K^RC}_taqMRB2VvJhO<YcG?zX<
z*=<(s?7jA7f7bP1(M{Pp$6KD=mbCJ+YrQ=G)mgqDh3}8dtCCaGQ_;_6VrFDuT-?}T
zP-kETbiS-03(!wZoH_Z)i8&eh#U)L=T6(D!iMa(isd~xzxlN*4dIgzzd6{|X$ifCj
zY#iEbz`$c?WMok@P%%(~@eLT;#4<`s3as??;bvM{7+4tS8}NYa6J})m&%$KDfEEYL
zz@V|1cK_V=pp7$~Sa+W|_25CB&i9_lJpHdUCCpqt7$4D|v25{N?W^AeA`O=s`n_0i
z;nQmC+p$L+boO*=ZtE;Myvs`5@PCwOVL%!4ZhnCaFBbVEdl-uAH}}YVFcZnY-#c@$
ms_cvE-4_=;bA3=Q6#nhJ&c{;k3EDSK+CFhvAaHfbbS?mPdc{2e
--- a/security/manager/boot/src/genHPKPStaticPins.js
+++ b/security/manager/boot/src/genHPKPStaticPins.js
@@ -2,23 +2,24 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // How to run this file:
 // 1. [obtain firefox source code]
 // 2. [build/obtain firefox binaries]
 // 3. run `[path to]/run-mozilla.sh [path to]/xpcshell \
 //                                  [path to]/genHPKPStaticpins.js
+// Files PreloadedHPKPins.json and default-ee.der must be in the current
+// working directory.
 
 const { 'classes': Cc, 'interfaces': Ci, 'utils': Cu, 'results': Cr } = Components;
 
 let { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 let { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm", {});
 let { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
-let { XPCOMUtils } = Cu.import("resource:///modules/XPCOMUtils.jsm", {});
 
 const certdb2 = Cc["@mozilla.org/security/x509certdb;1"]
                    .getService(Ci.nsIX509CertDB2);
 
 const OUTPUT = "StaticHPKPins.h";
 const MOZINPUT = "PreloadedHPKPins.json";
 const PINNING_MINIMUM_REQUIRED_MAX_AGE = 60 * 60 * 24 * 7 * 18;
 const FILE_HEADER = "/* This Source Code Form is subject to the terms of the Mozilla Public\n" +
@@ -43,18 +44,17 @@ const PINSETDEF ="/*Now the pinsets, eac
 "  const size_t size;\n"+
 "  const char* const* data;\n"+
 "} StaticPinset;\n";
 
 function writeTo(string, fos) {
   fos.write(string, string.length);
 }
 
-function readFile(filename) {
-  print("filename =" + filename)
+function readFileToString(filename) {
   let path = filename;
 
   let lf = Components.classes["@mozilla.org/file/directory_service;1"]
              .getService(Components.interfaces.nsIProperties)
              .get("CurWorkD", Components.interfaces.nsILocalFile);
 
   let bits = path.split("/");
   for (let i = 0; i < bits.length; i++) {
@@ -62,36 +62,33 @@ function readFile(filename) {
       if (bits[i] == "..") {
         lf = lf.parent;
       }
       else {
         lf.append(bits[i]);
       }
     }
   }
-  let file = lf;
-  let fstream = Cc["@mozilla.org/network/file-input-stream;1"]
-                  .createInstance(Ci.nsIFileInputStream);
-  fstream.init(file, -1, 0, 0);
-  var line = {};
+  let stream = Cc["@mozilla.org/network/file-input-stream;1"]
+                 .createInstance(Ci.nsIFileInputStream);
+  stream.init(lf, -1, 0, 0);
+  let buf = NetUtil.readInputStreamToString(stream, stream.available());
+  return buf;
+}
+
+function stripComments(buf) {
+  var lines = buf.split("\n");
   let entryRegex = /^\s*\/\//;
   let data = "";
-  while(fstream.readLine(line)) {
-    let match = entryRegex.exec(line.value);
+  for (let i = 0; i < lines.length; ++i) {
+    let match = entryRegex.exec(lines[i]);
     if (!match) {
-      data = data + line.value;
+      data = data + lines[i];
     }
   }
-  // The last line of the read is a false, but content can be there
-  // so: repeat the logic
-  let match = entryRegex.exec(line.value);
-  if (!match) {
-    data = data + line.value;
-  }
-  fstream.close();
   return data;
 }
 
 function isBuiltinToken(tokenName) {
   return tokenName == "Builtin Object Token";
 }
 
 function isCertBuiltIn(cert) {
@@ -119,21 +116,35 @@ function loadNSSCertinfo() {
     if (!isCertBuiltIn(cert)) {
       continue;
     }
     let name = cert.nickname.substr(BUILT_IN_NICK_PREFIX.length);
     let SDK  = cert.sha256SubjectPublicKeyInfoDigest;
     certNameToSKD[name] = SDK;
     certSDKToName[SDK] = name;
   }
+  {
+    // A certificate for *.example.com.
+    let der = readFileToString("default-ee.der");
+    // XPCOM is too dumb to automatically query the parent interface of
+    // nsIX509CertDB2 without a hint.
+    let certdb = certdb2.QueryInterface(Ci.nsIX509CertDB);
+    let testCert = certdb.constructX509(der, der.length);
+    // We can't include this cert in the previous loop, because it skips
+    // non-builtin certs and the nickname is not built-in to the cert.
+    let name = "End Entity Test Cert";
+    let SDK  = testCert.sha256SubjectPublicKeyInfoDigest;
+    certNameToSKD[name] = SDK;
+    certSDKToName[SDK] = name;
+  }
   return [certNameToSKD, certSDKToName];
 }
 
 function parseMozFile() {
-  mozFile = readFile(MOZINPUT);
+  mozFile = stripComments(readFileToString(MOZINPUT));
   mozJSON = JSON.parse(mozFile);
   return mozJSON;
 }
 
 function nameToAlias(certName) {
   // change the name to a string valid as a c identifier
   // remove  non-ascii characters
   certName = certName.replace( /[^[:ascii:]]/g, "_");
@@ -216,18 +227,17 @@ function writeFile(certNameToSDK, certSD
                        "kPublicKeyPinningPreloadListLength = " +
                        jsonPins["entries"].length + ";\n";
     writeTo(domainFooter, fos);
     writeTo("\n", fos);
     writeTo(genExpirationTime(), fos);
 
     FileUtils.closeSafeFileOutputStream(fos);
 
-  }
-  catch (e) {
+  } catch (e) {
     dump("ERROR: problem writing output to '" + OUTPUT + "': " + e + "\n");
   }
 }
 
 // ****************************************************************************
 // This is where the action happens:
 
 let [certNameToSKD, certSDKToName] = loadNSSCertinfo();
index 13c101f2a27d1221b4e748c4c7db2194df5c5a57..ce9c312fb8b58059e7dcad9a15ce0b15f6f03a21
GIT binary patch
literal 65536
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
YKtMo1KtMo1KtMo1KtMo1KtLA$AGqncP5=M^
index ac98037be14fb900633475e38ad684a18ab943bf..0f52bac754ea5cfb641f41f4a0748dcde8ebeea4
GIT binary patch
literal 551
zc$_n6Vp29}V(eMK%*4pV#K>sC%f_kI=F#?@mywZ`mBB#BP{4qXjX9KsS(rT}wYWsV
z+0j5woY&CAz}VQp(9GD(*dj`t*94hsAY~|FAO_LH57y(Fm!g}RSCUy$Y0x+y*#<^d
z2Ij_I27|^<rp88w4Q6w<nlARK`u@9N?Luzv@7#6@E6lf@Tz&lFor>AUOKjdA6PNt@
z!%B^J!Y$T*`=Fe8Pp@3R@$SV<=9np;{*{?{MK89K^RC}_taqMRB2VvJhO<YcG?zX<
z*=<(s?7jA7f7bP1(M{Pp$6KD=mbCJ+YrQ=G)mgqDh3}8dtCCaGQ_;_6VrFDuT-?}T
zP-kETbiS-03(!wZoH_Z)i8&eh#U)L=T6(D!iMa(isd~xzxlN*4dIgzzd6{|X$ifCj
zY#iEbz`$c?WMok@P%%(~@eLT;#4<`s3as??;bvM{7+4tS8}NYa6J})m&%$KDfEEYL
zz@V|1cK_V=pp7$~Sa+W|_25CB&i9_lJpHdUCCpqt7$4D|v25{N?W^AeA`O=s`n_0i
z;nQmC+p$L+boO*=ZtE;Myvs`5@PCwOVL%!4ZhnCaFBbVEdl-uAH}}YVFcZnY-#c@$
ms_cvE-4_=;bA3=Q6#nhJ&c{;k3EDSK+CFhvAaHfbbS?mPdc{2e
--- a/security/manager/ssl/tests/unit/tlsserver/generate_certs.sh
+++ b/security/manager/ssl/tests/unit/tlsserver/generate_certs.sh
@@ -7,34 +7,39 @@
 # Usage: ./generate_certs.sh <path to objdir> <output directory>
 # e.g. (from the root of mozilla-central)
 # `./security/manager/ssl/tests/unit/tlsserver/generate_certs.sh \
 #  obj-x86_64-unknown-linux-gnu/ \
 #  security/manager/ssl/tests/unit/tlsserver/`
 #
 # NB: This will cause the following files to be overwritten if they are in
 # the output directory:
-#  cert8.db, key3.db, secmod.db, ocsp-ca.der, ocsp-other-ca.der
+#  cert8.db, key3.db, secmod.db, ocsp-ca.der, ocsp-other-ca.der, default-ee.der
+# NB: You must run genHPKPStaticPins.js after running this file, since its
+# output (StaticHPKPins.h) depends on default-ee.der
+
 set -x
 set -e
 
 if [ $# -ne 2 ]; then
   echo "Usage: `basename ${0}` <path to objdir> <output directory>"
   exit $E_BADARGS
 fi
 
 OBJDIR=${1}
 OUTPUT_DIR=${2}
 RUN_MOZILLA="$OBJDIR/dist/bin/run-mozilla.sh"
 CERTUTIL="$OBJDIR/dist/bin/certutil"
+# On BSD, mktemp requires either a template or a prefix.
+MKTEMP="mktemp temp.XXXX"
 
-NOISE_FILE=`mktemp`
+NOISE_FILE=`$MKTEMP`
 # Make a good effort at putting something unique in the noise file.
 date +%s%N  > "$NOISE_FILE"
-PASSWORD_FILE=`mktemp`
+PASSWORD_FILE=`$MKTEMP`
 
 function cleanup {
   rm -f "$NOISE_FILE" "$PASSWORD_FILE"
 }
 
 if [ ! -f "$RUN_MOZILLA" ]; then
   echo "Could not find run-mozilla.sh at \'$RUN_MOZILLA\' - I'll try without it"
   RUN_MOZILLA=""
@@ -129,17 +134,18 @@ function make_delegated {
                                                      -m $SERIALNO \
                                                      $COMMON_ARGS \
                                                      $EXTRA_ARGS
   SERIALNO=$(($SERIALNO + 1))
 }
 
 make_CA testCA 'CN=Test CA' test-ca.der
 make_CA otherCA 'CN=Other test CA' other-test-ca.der
-make_EE localhostAndExampleCom 'CN=Test End-entity' testCA "localhost,*.example.com"
+make_EE localhostAndExampleCom 'CN=Test End-entity' testCA "localhost,*.example.com,*.pinning.example.com"
+
 $RUN_MOZILLA $CERTUTIL -d $OUTPUT_DIR -L -n localhostAndExampleCom -r > $OUTPUT_DIR/default-ee.der
 # A cert that is like localhostAndExampleCom, but with a different serial number for
 # testing the "OCSP response is from the right issuer, but it is for the wrong cert"
 # case.
 make_EE ocspOtherEndEntity 'CN=Other Cert' testCA "localhost,*.example.com"
 
 make_INT testINT 'CN=Test Intermediate' testCA
 make_EE ocspEEWithIntermediate 'CN=Test End-entity with Intermediate' testINT "localhost,*.example.com"
index 283e8fbf695d92175f5fbf07e07e409583ab716a..4236e1041cfddf8aa2a8a47d980fdc6f8a880fcc
GIT binary patch
literal 49152
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
N7wfDdpU?}3{1*YPDDVIP
index 794fb9cec9b19319dd1bb2d5c66c335ed9e2cb31..fcc0c530a541980512b8c059b3a6bee3ffe1a413
GIT binary patch
literal 452
zc$_n6Vmx5b#HhJ|nTe5!iIrhK$CCR7ylk9WZ60mkc^Mg5Ss4r@48;sY*qB3En1y-$
zOEOZ66iQNyOB9?P4dldm4NVM;jSURVjLnSAqr`blkhyqtHqJ-3g^`tkxv`hQps|yw
zv5{d{8`H5V{A=cCg~a!yKh=!3@pn~w!<V^zM!_%Xn}xO^zuz36dhv_#e15n3NuTy+
zB<wCunc<jQkdZPy^uSrZ8Phv?FaCR&e9CHV!7;9X_CMSj-M;Q=t}=?Yy0BvYA?7?I
z4T+MBoG+)p@vFy5Jrp`A@iSaDjdgO{onQQ#Ur#h1-^s+x$iTQ5=yC%gpxb4I85#ex
za2T)wDJDinw7_8oy4OkL$=fpmiMfa8y<K_aZsGY;8yOGjM*WiTEuVeVe?|Is#?rqv
z$6pJ2uKZ{lF4DesN?*09z^)2Kp2OmP8yP2kC_kiSQR(1*DEi?kp`e$~8f6#FoWE_}
xjeHTS54L)`Glcboo44FA@pgGIVa9YR#$G;?tg?&^ZGPPbD;8Qaa^1*S3;-a5re^>E
index f4c4863a5bbaf2d78166add109fddaf57d25e2e2..2695862cd92889a82c22964284a0df55b039c4b1
GIT binary patch
literal 440
zc$_n6V%%cT#3;LfnTe5!iIrhK$C7&nylk9WZ60mkc^Mg5Ss4t33<V7M*qB3En1$Ix
zQj1FzoE;71#CZ)(42+Ep49$$qjLoCOc}<YHSoJi{M>d&}m4Ugjm%*U1lc}+hVL#{b
zV-MBU8b2PoR+0TiZ27gL)~tD153=rxXY024fBpKh^i?*q$-0++>%KNEE1AM)9)7;w
z)~O;y^7PII{`DSZd#u)dUr;QVnRce#tgqRB|IYKu*1L8e3SQ<M<ma&I|6&vV@0w=q
zyK0?+x@X*6_`%L(&cbKzwT`;7EW6syR#X}?F*7nSE*3KoF%SZ}T2`2m@jnZP0UMBF
zVq`=M5N4ozdn&je22M87v$(n8=DM^vxrKH&WehBC8J}yqb~ZtG&qulAQf^X-stMmW
zZ_<eNxgs^gKCnFb$pY30zm0)Sk+&o7GdCUB-^%W%e1+30qWj*j@WkUOo2QE1{JE^}
qjCHN0g(b()&rhnmlTAHT62G@9Wp_Q8&^s?Ut@CkDS8__k8w~(rZ=z!W