SecurityEngineering/mozpkix-testing
mozilla::pkix
Network Security Services (NSS) is a set of libraries designed to support cross-platform development of security-enabled client and server applications. Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, OCSP, PKIX, and other security standards.
NSS currently has two code paths for doing certificate verification. "Classic" verification has been used for verification of non-EV certificates, and libPKIX has been used for verification of EV certificates.
As many of you are aware, the NSS team has wanted to replace the "classic" verification with libPKIX for a long time. However, the current libPKIX code was auto-translated from Java to C, and has proven to be very difficult to work with. Therefore, Mozilla has created a new certificate verification library called mozilla::pkix.
Request for Testing
Replacing the certificate verification library can only be done after gaining sufficient confidence in the new code by having as many people test it as possible. So we ask that all of you help us test this new library as follows.
- Download Firefox 31 or later
- Browse to ftp://ftp.mozilla.org/pub/firefox/tinderbox-builds/
- Scroll down to mozilla-central-<platform>-debug and select the folder that matches the platform you are working on.
- Select the most recent build in the list.
- Download by selecting the .tar.bz2 (Linux), .dmg (Mac), or .exe (Windows) file.
- After downloading, extract and run this debug browser, which will be called FirefoxNightlyDebug.
- Flip switch to enable mozilla::pkix verification
- Open about:config in Firefox
- Add a new Boolean Preference "security.use_mozillapkix_verification", setting it to true
- Clear your browser history if you are going to browse to a site you visited with mozilla::pkix off
- Browse to various websites with known valid and expired/revoked/etc SSL certificates.
- If you don't get the expected result, then try again without using mozilla::pkix to see if the unexpected result is actually due to mozilla::pkix.
- In about:config toggle "security.use_mozillapkix_verification" to false
- Clear your browser history if you are going to browse to a site you visited with mozilla::pkix on
- If you find an issue, please file a Bugzilla bug (https://bugzilla.mozilla.org/enter_bug.cgi) with Product=Core, Component=Security:PSM, and put "(mozilla::pkix)" at the beginning of the Summary.
- When you are done testing, reset (remove) the preference that you added in about:config and restart your Firefox browser.
Check if mozilla::pkix is being used
- With your browser correctly set to use mozilla::pkix, browsing to this example URL will result in....
- When your browser is not set to use mozilla::pkix, browsing to this example URL will result in...
:keeler is trying to get a testing server set up where we can install arbitrary certificates that will indicate to testers whether they're using mozilla::pkix or not - see bug 986712
Request for Code Review
We will greatly appreciate your help in reviewing the new code, which may be found here:
- mozilla::pkix: https://mxr.mozilla.org/mozilla-central/source/security/pkix/
- trust domain: https://mxr.mozilla.org/mozilla-central/source/security/certverifier/
Need: High level description of the folders/files/classes
If you find an issue, please file a Bugzilla bug (https://bugzilla.mozilla.org/enter_bug.cgi) with Product=Core, Component=Security:PSM, and put "(mozilla::pkix)" at the beginning of the Summary.
For reference, the NSS certificate verification code is here:
- NSS Classic Verification: https://mxr.mozilla.org/mozilla-central/source/security/nss/lib/certhigh/
- NSS LibPKIX Verification: https://mxr.mozilla.org/mozilla-central/source/security/nss/lib/libpkix/
Mozilla::pkix Bug list
Things for CAs to Fix
Workarounds were implemented to allow mozilla::pkix to handle the following situations. However, we will be asking CAs to immediately stop issuing new certificates with these issues, and we will identify dates for removing these workarounds.
- Stop using the "Netscape Server Gated Crypto (2.16.840.1.113730.4.1)" (SGC) EKU. For all new certificate issuance, use the "TLS Web Server Authentication (1.3.6.1.5.5.7.3.1)" EKU instead of the SGC EKU.
- Related Bugs: bug 982292, bug 982932, bug 982936
- Default values in a SEQUENCE must not be explicitly encoded. We found end-entity certificates that have the value cA:false explicitly encoded.
- 11.5 of X.690 - "The encoding of a set value or sequence value shall not include an encoding for any component value which is equal to its default value."
- Related Bugs: bug 988633, bug 989516, bug 989518
Future Considerations
While testing mozilla::pkix, we noticed the following things that we would like to consider changing.
- Consider only giving EV treatment when the intermediate and end-entity certs in the chain have the specific EV policy OID that we are expecting; in other words, don’t give EV treatment when the intermediate certificate has the anyPolicy OID. To make this change, would need to change the CAB Forum’s EV Guidelines to also require the EV policy OID in intermediate certs (section 9.3.4 says the subordinate CA certificate may contain anyPolicy OID 2.5.29.32.0).
- Related Bugs: bug 986156