Bug 772365, Part 3: Add B2G-specific customizations to NSS certificate trust database with tests, r=rrelyea r=honzab
authorBrian Smith <bsmith@mozilla.com>
Mon, 10 Dec 2012 07:17:29 -0800
changeset 125012 6a0ed6484811bc7233c39eec1687bb8ce09cb98e
parent 125011 8a72b2a224504d24223bd2d7d6730f1df271c95f
child 125013 b11065872128ed68e5023b1861004d4af6324166
push id2151
push userlsblakk@mozilla.com
push dateTue, 19 Feb 2013 18:06:57 +0000
treeherdermozilla-beta@4952e88741ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersrrelyea, honzab
bugs772365
milestone20.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 772365, Part 3: Add B2G-specific customizations to NSS certificate trust database with tests, r=rrelyea r=honzab
b2g/confvars.sh
configure.in
dom/tests/browser/browser_ConsoleStoragePBTest.js
dom/tests/mochitest/localstorage/test_localStorageBasePrivateBrowsing.html
security/build/Makefile.in
security/build/b2g-app-root-cert.der
security/build/b2g-certdata.mk
security/build/b2g-certdata.txt
security/manager/ssl/tests/unit/test_bug627234.js
security/manager/ssl/tests/unit/test_signed_apps-marketplace.js
security/manager/ssl/tests/unit/test_signed_apps/privileged-app-test-1.0.zip
security/manager/ssl/tests/unit/xpcshell.ini
--- a/b2g/confvars.sh
+++ b/b2g/confvars.sh
@@ -42,12 +42,13 @@ MOZ_XULRUNNER=
 fi
 
 MOZ_APP_ID={3c2e2abc-06d4-11e1-ac3b-374f68613e61}
 MOZ_EXTENSION_MANAGER=1
 
 MOZ_SYS_MSG=1
 MOZ_TIME_MANAGER=1
 
+MOZ_B2G_CERTDATA=1
 MOZ_PAY=1
 MOZ_TOOLKIT_SEARCH=
 MOZ_PLACES=
 MOZ_B2G=1
--- a/configure.in
+++ b/configure.in
@@ -7597,16 +7597,25 @@ MOZ_ARG_ENABLE_BOOL(b2g-camera,
     MOZ_B2G_CAMERA=1,
     MOZ_B2G_CAMERA= )
 if test -n "$MOZ_B2G_CAMERA"; then
    AC_DEFINE(MOZ_B2G_CAMERA)
 fi
 AC_SUBST(MOZ_B2G_CAMERA)
 
 dnl ========================================================
+dnl = Enable Support B2G-specific changes to the NSS
+dnl = certificate trust database.
+dnl ========================================================
+if test -n "$MOZ_B2G_CERTDATA"; then
+    AC_DEFINE(MOZ_B2G_CERTDATA)
+fi
+AC_SUBST(MOZ_B2G_CERTDATA)
+
+dnl ========================================================
 dnl = Enable Support for Payment API
 dnl ========================================================
 if test -n "$MOZ_PAY"; then
     AC_DEFINE(MOZ_PAY)
 fi
 AC_SUBST(MOZ_PAY)
 
 dnl ========================================================
--- a/security/build/Makefile.in
+++ b/security/build/Makefile.in
@@ -246,16 +246,20 @@ endif
 ifdef MOZ_NO_WLZDEFS
 DEFAULT_GMAKE_FLAGS += ZDEFS_FLAG=
 endif
 ifdef MOZ_CFLAGS_NSS
 DEFAULT_GMAKE_FLAGS += XCFLAGS="$(CFLAGS)"
 DEFAULT_GMAKE_FLAGS += DARWIN_DYLIB_VERSIONS="-compatibility_version 1 -current_version 1 $(LDFLAGS)"
 endif
 
+ifdef MOZ_B2G_CERTDATA
+include $(srcdir)/b2g-certdata.mk
+endif
+
 ifdef MOZ_NSS_PATCH
 # If we're applying a patch, we'll copy the NSS source to the objdir
 # and build it from there.
 NSS_SRCDIR = $(CURDIR)/nss
 
 # This will copy and patch the NSS source for every build.
 # Since we "cp -p", it won't force rebuilds for most files, just
 # for patched files, but that's easier than trying to track
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..490b8682b75cb9b6cee68708dd25a331a055d16d
GIT binary patch
literal 964
zc$_n6Vm@Hd#I#}oGZP~d6C<MmFB_*;n@8JsUPeY%RtAH{7DH(RNjBzC7G_}~*NVj4
zf}EU0g`oWW5(Q^R1w%s-10j$kw=g$c(%I2a)<7C0$|Wp<5X~<t$S+DP$;{6)6f+P3
zNwW*{`sSDBl_X~7DTHOFmK$;#aDv1+gqeV5Ksju}OrgOBa^k#(MutFSWNctyU>qgR
zYXsyPT0*&l#hFcvO2`4o$jZRn#K_M86z5`UVq|2vwYFjB>-~>=1;jUMzc;k~Tk>;?
z+;slczh@h^yX~%$|2KWEN8n-8oCkO1|8iVhXT81d?xoKwHSN#FCSSa}ZAHMPL)Sk_
zuRF3m?COoB+d~D;d|UG2rc})$SKA5o(dTcy-n0Hv@WUWU(?zuwO2O8xFZFL6tzogg
zk{v9#)|1QU#Gm(n8QEq2%=Pptl)F56%BFh{=F56E9S>Toz1~#*$6Oxk_VXV9TD|Vx
z4|_a^d8+g~tDhTdA7^h`FFC_+XF%g_(Lb)w!mpjVbJy*jPmb9Kt5Zvv=l?&Hz4Lzg
zetqZEtF3eY@CEFzl>Gh4nX%S4k^e-{<M7B?OYHSFzf{?6>oRT1@{8NfGchwVFfO(>
zur%NY2AZreBjbM-Rs&`rWxxj#;0Fn?Ff%c+7>I%Rsvtg(0T&yGHXATGvNJQIrB7y1
zs7?>?KJkZ%skq#xXtqdx??y)3#!@|R=j)S_>{2HwPB#;-y_~}LYk%=4r@D2_?zT79
z9y>C5+s?GC1pYET89}XR4uAj1o|vyvxp!>><d{AR%>CA!y6N@y{l@=0-hQmIpRkJg
zZ`B6Zljnu+&(yx&rDeVFXR6OytwWL-j3pbYL)zxNovJq_ufdEV`Ksr`{Msu=!z{J0
z7XQ+}+n%6!Oya}r&fhmzeK0?^NBw=txh45Q%O$QIcqJ*nvF`SxdlTDvdXo68j{Z<f
zh_;FE2naja^y2pON2{;i*jHd<wr!)Jo=Mh^SJO^9{5w2#ciQp2W+ytQJxL2woG;(a
Pc-6~WXN8B7zU%}5z$aza
new file mode 100644
--- /dev/null
+++ b/security/build/b2g-certdata.mk
@@ -0,0 +1,35 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# 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/.
+
+# On B2G, we need to remove the trust bits for code signing from all the
+# built-in CAs, because we are redefining the code signing bit to mean
+# "is trusted to issue certs that are trusted for signing apps," which none
+# of the normal built-in CAs are. This is a temporary hack until we can use
+# libpkix to verify the certificates. (libpkix gives the flexibility we need
+# to verify certificates using different sets of trust anchors per validation.)
+#
+# Whenever we change the B2G app signing trust anchor, we need to manually
+# update certdata-b2g.txt. To do so:
+#
+# 1. replace ./b2g-app-root-cert.der with the new DER-encoded root cert
+#
+# 2. In this directory run:
+#
+#     PATH=$NSS/bin:$NSS/lib addbuiltin -n "b2g-app-root-cert" -t ",,Cu" \
+#       < b2g-app-root-cert.der > b2g-certdata.txt
+#
+# Then, commit the changes. We don't do this step as part of the build because
+# we do not build addbuiltin as part of a Gecko build.
+
+# Distrust all existing builtin CAs for code-signing
+hacked-certdata.txt : $(srcdir)/../nss/lib/ckfw/builtins/certdata.txt
+	sed -e "s/^CKA_TRUST_CODE_SIGNING.*CKT_NSS_TRUSTED_DELEGATOR.*/CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST/" \
+			$< > $@
+
+combined-certdata.txt : hacked-certdata.txt $(srcdir)/b2g-certdata.txt
+	cat $^ > $@
+
+libs:: combined-certdata.txt
+
+DEFAULT_GMAKE_FLAGS += NSS_CERTDATA_TXT='$(CURDIR)/combined-certdata.txt'
new file mode 100644
--- /dev/null
+++ b/security/build/b2g-certdata.txt
@@ -0,0 +1,145 @@
+
+#
+# Certificate "b2g-app-root-cert"
+#
+# Issuer: C=US,ST=CA,L=Mountain View,O=Examplla Corporation,OU=Examplla CA,CN=Examplla Root CA 1
+# Serial Number: 1 (0x1)
+# Subject: C=US,ST=CA,L=Mountain View,O=Examplla Corporation,OU=Examplla CA,CN=Examplla Root CA 1
+# Not Valid Before: Wed Nov 21 23:00:03 2012
+# Not Valid After : Sat Nov 19 23:00:03 2022
+# Fingerprint (MD5): 05:14:37:02:CC:6B:3B:0F:EB:40:2D:FA:C7:CF:D3:B6
+# Fingerprint (SHA1): 33:F8:4F:CB:0C:1F:CE:35:32:6A:8C:A1:C3:CB:C9:BE:1F:B8:ED:9E
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
+CKA_TOKEN CK_BBOOL CK_TRUE
+CKA_PRIVATE CK_BBOOL CK_FALSE
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
+CKA_LABEL UTF8 "b2g-app-root-cert"
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
+CKA_SUBJECT MULTILINE_OCTAL
+\060\201\204\061\033\060\031\006\003\125\004\003\023\022\105\170
+\141\155\160\154\154\141\040\122\157\157\164\040\103\101\040\061
+\061\024\060\022\006\003\125\004\013\023\013\105\170\141\155\160
+\154\154\141\040\103\101\061\035\060\033\006\003\125\004\012\023
+\024\105\170\141\155\160\154\154\141\040\103\157\162\160\157\162
+\141\164\151\157\156\061\026\060\024\006\003\125\004\007\023\015
+\115\157\165\156\164\141\151\156\040\126\151\145\167\061\013\060
+\011\006\003\125\004\010\023\002\103\101\061\013\060\011\006\003
+\125\004\006\023\002\125\123
+END
+CKA_ID UTF8 "0"
+CKA_ISSUER MULTILINE_OCTAL
+\060\201\204\061\033\060\031\006\003\125\004\003\023\022\105\170
+\141\155\160\154\154\141\040\122\157\157\164\040\103\101\040\061
+\061\024\060\022\006\003\125\004\013\023\013\105\170\141\155\160
+\154\154\141\040\103\101\061\035\060\033\006\003\125\004\012\023
+\024\105\170\141\155\160\154\154\141\040\103\157\162\160\157\162
+\141\164\151\157\156\061\026\060\024\006\003\125\004\007\023\015
+\115\157\165\156\164\141\151\156\040\126\151\145\167\061\013\060
+\011\006\003\125\004\010\023\002\103\101\061\013\060\011\006\003
+\125\004\006\023\002\125\123
+END
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
+\002\001\001
+END
+CKA_VALUE MULTILINE_OCTAL
+\060\202\003\300\060\202\002\250\240\003\002\001\002\002\001\001
+\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060
+\201\204\061\033\060\031\006\003\125\004\003\023\022\105\170\141
+\155\160\154\154\141\040\122\157\157\164\040\103\101\040\061\061
+\024\060\022\006\003\125\004\013\023\013\105\170\141\155\160\154
+\154\141\040\103\101\061\035\060\033\006\003\125\004\012\023\024
+\105\170\141\155\160\154\154\141\040\103\157\162\160\157\162\141
+\164\151\157\156\061\026\060\024\006\003\125\004\007\023\015\115
+\157\165\156\164\141\151\156\040\126\151\145\167\061\013\060\011
+\006\003\125\004\010\023\002\103\101\061\013\060\011\006\003\125
+\004\006\023\002\125\123\060\036\027\015\061\062\061\061\062\061
+\062\063\060\060\060\063\132\027\015\062\062\061\061\061\071\062
+\063\060\060\060\063\132\060\201\204\061\033\060\031\006\003\125
+\004\003\023\022\105\170\141\155\160\154\154\141\040\122\157\157
+\164\040\103\101\040\061\061\024\060\022\006\003\125\004\013\023
+\013\105\170\141\155\160\154\154\141\040\103\101\061\035\060\033
+\006\003\125\004\012\023\024\105\170\141\155\160\154\154\141\040
+\103\157\162\160\157\162\141\164\151\157\156\061\026\060\024\006
+\003\125\004\007\023\015\115\157\165\156\164\141\151\156\040\126
+\151\145\167\061\013\060\011\006\003\125\004\010\023\002\103\101
+\061\013\060\011\006\003\125\004\006\023\002\125\123\060\202\001
+\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000
+\003\202\001\017\000\060\202\001\012\002\202\001\001\000\332\255
+\200\271\353\277\343\215\020\027\261\053\357\061\075\375\164\371
+\224\036\227\017\253\373\233\061\207\106\273\172\037\376\227\235
+\110\121\303\065\154\340\335\037\375\010\321\256\073\267\176\335
+\322\363\251\051\077\315\135\143\321\335\266\250\120\322\302\327
+\361\033\256\304\267\126\325\330\245\267\125\020\314\366\244\360
+\331\032\174\242\105\075\220\177\133\317\332\353\274\257\322\123
+\341\122\031\065\242\175\070\042\123\073\205\351\057\330\305\174
+\004\073\324\153\123\021\255\111\012\114\310\374\357\375\001\007
+\034\374\235\111\112\161\036\323\223\224\262\336\340\237\035\111
+\202\307\122\255\053\257\065\037\370\235\014\073\207\317\110\376
+\205\112\335\337\126\343\234\003\225\033\356\072\371\261\175\343
+\153\262\257\031\230\116\271\120\201\273\025\374\105\346\127\326
+\314\334\335\106\336\114\154\066\360\072\312\245\003\237\377\302
+\153\271\337\167\277\057\103\145\325\205\235\374\016\120\277\171
+\031\373\362\103\001\175\115\141\017\310\122\343\127\131\232\244
+\077\056\263\351\044\273\075\104\226\224\247\321\266\317\002\003
+\001\000\001\243\073\060\071\060\017\006\003\125\035\023\001\001
+\377\004\005\060\003\001\001\377\060\016\006\003\125\035\017\001
+\001\377\004\004\003\002\002\004\060\026\006\003\125\035\045\001
+\001\377\004\014\060\012\006\010\053\006\001\005\005\007\003\003
+\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003
+\202\001\001\000\227\120\113\310\374\002\002\163\167\074\162\233
+\024\157\215\261\001\075\201\165\056\113\103\327\222\142\076\145
+\222\041\227\066\023\175\323\144\016\372\277\163\362\102\176\256
+\003\107\075\330\255\306\304\223\266\271\146\152\140\017\166\056
+\034\021\052\133\010\117\117\131\214\134\365\032\155\335\074\120
+\036\002\361\020\235\366\203\145\262\353\267\277\063\377\210\355
+\361\172\077\220\252\003\375\172\260\105\311\317\023\337\231\053
+\327\212\052\073\241\371\145\114\255\052\302\031\150\001\164\260
+\173\124\206\234\355\225\056\224\156\200\066\000\143\325\111\341
+\157\175\324\305\126\071\053\325\163\372\057\335\207\140\041\306
+\030\360\233\211\373\331\252\360\067\306\274\047\357\164\316\244
+\157\122\247\030\326\300\352\031\037\261\176\333\342\336\221\207
+\014\214\142\016\072\305\370\046\140\133\074\137\210\120\126\301
+\202\350\333\347\342\253\325\330\276\160\074\066\266\261\021\056
+\064\152\370\352\226\311\100\376\303\225\273\146\307\275\066\310
+\211\226\344\146\126\041\237\037\213\001\325\112\113\054\250\110
+\042\057\035\220
+END
+
+# Trust for "b2g-app-root-cert"
+# Issuer: C=US,ST=CA,L=Mountain View,O=Examplla Corporation,OU=Examplla CA,CN=Examplla Root CA 1
+# Serial Number: 1 (0x1)
+# Subject: C=US,ST=CA,L=Mountain View,O=Examplla Corporation,OU=Examplla CA,CN=Examplla Root CA 1
+# Not Valid Before: Wed Nov 21 23:00:03 2012
+# Not Valid After : Sat Nov 19 23:00:03 2022
+# Fingerprint (MD5): 05:14:37:02:CC:6B:3B:0F:EB:40:2D:FA:C7:CF:D3:B6
+# Fingerprint (SHA1): 33:F8:4F:CB:0C:1F:CE:35:32:6A:8C:A1:C3:CB:C9:BE:1F:B8:ED:9E
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
+CKA_TOKEN CK_BBOOL CK_TRUE
+CKA_PRIVATE CK_BBOOL CK_FALSE
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
+CKA_LABEL UTF8 "b2g-app-root-cert"
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
+\063\370\117\313\014\037\316\065\062\152\214\241\303\313\311\276
+\037\270\355\236
+END
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
+\005\024\067\002\314\153\073\017\353\100\055\372\307\317\323\266
+END
+CKA_ISSUER MULTILINE_OCTAL
+\060\201\204\061\033\060\031\006\003\125\004\003\023\022\105\170
+\141\155\160\154\154\141\040\122\157\157\164\040\103\101\040\061
+\061\024\060\022\006\003\125\004\013\023\013\105\170\141\155\160
+\154\154\141\040\103\101\061\035\060\033\006\003\125\004\012\023
+\024\105\170\141\155\160\154\154\141\040\103\157\162\160\157\162
+\141\164\151\157\156\061\026\060\024\006\003\125\004\007\023\015
+\115\157\165\156\164\141\151\156\040\126\151\145\167\061\013\060
+\011\006\003\125\004\010\023\002\103\101\061\013\060\011\006\003
+\125\004\006\023\002\125\123
+END
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
+\002\001\001
+END
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
new file mode 100644
--- /dev/null
+++ b/security/manager/ssl/tests/unit/test_signed_apps-marketplace.js
@@ -0,0 +1,56 @@
+"use strict";
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+const Cr = Components.results;
+
+const isB2G = ("@mozilla.org/b2g-keyboard;1" in Components.classes);
+
+Cu.import("resource://gre/modules/FileUtils.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+
+do_get_profile(); // must be called before getting nsIX509CertDB
+const certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
+
+function run_test() {
+  run_next_test();
+}
+
+function check_open_result(name, expectedRv) {
+  if (expectedRv == Cr.NS_OK && !isB2G) {
+    // We do not trust the marketplace trust anchor on non-B2G builds
+
+    // XXX: NSS has many possible error codes for this, e.g.
+    // SEC_ERROR_UNTRUSTED_ISSUER and others are also reasonable. Future
+    // versions of NSS may return one of these alternate errors; in that case
+    // we need to update this test.
+    //
+    // XXX (bug 812089): Cr.NS_ERROR_SEC_ERROR_UNKNOWN_ISSUER is undefined.
+    //
+    // XXX: Cannot use operator| instead of operator+ to combine bits because
+    // bit 31 trigger's JavaScript's crazy interpretation of the numbers as
+    // two's complement negative integers.
+    const NS_ERROR_SEC_ERROR_UNKNOWN_ISSUER = 0x80000000 /*unsigned (1 << 31)*/
+                                            + (    (0x45 + 21) << 16)
+                                            + (-(-0x2000 + 13)      );
+    expectedRv = NS_ERROR_SEC_ERROR_UNKNOWN_ISSUER;
+  }
+
+  return function openSignedJARFileCallback(rv, aZipReader, aSignerCert) {
+    do_print("openSignedJARFileCallback called for " + name);
+    do_check_eq(rv, expectedRv);
+    do_check_eq(aZipReader != null,  Components.isSuccessCode(expectedRv));
+    do_check_eq(aSignerCert != null, Components.isSuccessCode(expectedRv));
+    run_next_test();
+  };
+}
+
+function original_app_path(test_name) {
+  return do_get_file("test_signed_apps/" + test_name + ".zip", false);
+}
+
+add_test(function () {
+  certdb.openSignedJARFileAsync(
+    original_app_path("privileged-app-test-1.0"),
+    check_open_result("privileged-app-test-1.0", Cr.NS_OK));
+});
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0f828fb858b316204aa2111c7c3f7c0f4e6158e8
GIT binary patch
literal 18161
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
--- a/security/manager/ssl/tests/unit/xpcshell.ini
+++ b/security/manager/ssl/tests/unit/xpcshell.ini
@@ -1,13 +1,14 @@
 [DEFAULT]
 head = 
 tail = 
 
 [test_signed_apps.js]
+[test_signed_apps-marketplace.js]
 [test_datasignatureverifier.js]
 # Bug 676972: test hangs consistently on Android
 skip-if = os == "android"
 [test_hash_algorithms.js]
 # Bug 676972: test hangs consistently on Android
 skip-if = os == "android"
 [test_hmac.js]
 # Bug 676972: test hangs consistently on Android