This directory contains various certificates for use with SSL-related
unit tests.

===== Real-world certificates that need manual updating
- google.binary.p7b
- google.chain.pem
- google.pem_cert.p7b
- google.pem_pkcs7.p7b
- google.pkcs7.p7b
- google.single.der
- google.single.pem
- thawte.single.pem : Certificates for testing parsing of different formats.

- googlenew.chain.pem : The refreshed Google certificate
     (valid until Sept 30 2013).

- mit.davidben.der : An expired MIT client certificate.

- foaf.me.chromium-test-cert.der : A client certificate for a FOAF.ME identity
     created for testing.

- www_us_army_mil_cert.der
- dod_ca_17_cert.der
- dod_root_ca_2_cert.der : 
     A certificate chain used for testing certificate imports

- unosoft_hu_cert : Certificate used by X509CertificateTest.UnoSoftCertParsing.

- google_diginotar.pem
- diginotar_public_ca_2025.pem : A certificate chain for the regression test
      of http://crbug.com/94673

- salesforce_com_test.pem
- verisign_intermediate_ca_2011.pem
- verisign_intermediate_ca_2016.pem : Certificates for testing two
     X509Certificate objects that contain the same server certificate but
     different intermediate CA certificates.  The two intermediate CA
     certificates actually represent the same intermediate CA but have
     different validity periods.

- cybertrust_gte_root.pem
- cybertrust_baltimore_root.pem
- cybertrust_omniroot_chain.pem
- cybertrust_baltimore_cross_certified_1.pem
- cybertrust_baltimore_cross_certified_2.pem
     These certificates are reflect a portion of the CyberTrust (Verizon
     Business) CA hierarchy. _gte_root.pem is a legacy 1024-bit root that is
     still widely supported, while _baltimore_root.pem reflects the newer
     2048-bit root. For clients that only support the GTE root, two versions
     of the Baltimore root were cross-signed by GTE, namely
     _cross_certified_[1,2].pem. _omniroot_chain.pem contains a certificate
     chain that was issued under the Baltimore root. Combined, these
     certificates can be used to test real-world cross-signing; in practice,
     they are used to test certain workarounds for OS X's chain building code.

- ndn.ca.crt: "New Dream Network Certificate Authority" root certificate.
     This is an X.509 v1 certificate that omits the version field. Used to
     test that the certificate version gets the default value v1.

- ct-test-embedded-cert.pem
- ct-test-embedded-with-intermediate-chain.pem
- ct-test-embedded-with-intermediate-preca-chain.pem
- ct-test-embedded-with-preca-chain.pem
     Test certificate chains for Certificate Transparency: Each of these
     files contains a leaf certificate as the first certificate, which has
     embedded SCTs, followed by the issuer certificates chain.
     All files are from the src/test/testdada directory in
     https://code.google.com/p/certificate-transparency/

- comodo.chain.pem : A certificate chain for www.comodo.com which should be
     recognised as EV. Expires Jun 20 2015.

===== Manually generated certificates
- client.p12 : A PKCS #12 file containing a client certificate and a private
     key created for testing.  The password is "12345".

- client-nokey.p12 : A PKCS #12 file containing a client certificate (the same
     as the one in client.p12) but no private key. The password is "12345".

- unittest.selfsigned.der : A self-signed certificate generated using private
     key in unittest.key.bin. The common name is "unittest".

- unittest.key.bin : private key stored unencrypted.

- unittest.originbound.der: A test origin-bound certificate for
     https://www.google.com:443.
- unittest.originbound.key.der: matching PrivateKeyInfo.

- x509_verify_results.chain.pem : A simple certificate chain used to test that
    the correctly ordered, filtered certificate chain is returned during
    verification, regardless of the order in which the intermediate/root CA
    certificates are provided.

- test_mail_google_com.pem : A certificate signed by the test CA for
    "mail.google.com". Because it is signed by that CA instead of the true CA
    for that host, it will fail the
    TransportSecurityState::IsChainOfPublicKeysPermitted test.

- multivalue_rdn.pem : A regression test for http://crbug.com/101009. A
     certificate with all of the AttributeTypeAndValues stored within a single
     RelativeDistinguishedName, rather than one AVA per RDN as normally seen.

- unescaped.pem : Regression test for http://crbug.com/102839. Contains
     characters such as '=' and '"' that would normally be escaped when
     converting a subject/issuer name to their stringized form.

- ocsp-test-root.pem : A root certificate for the code in
      net/tools/testserver/minica.py

- websocket_cacert.pem : The testing root CA for testing WebSocket client
     certificate authentication.
     This file is used in SSLUITest.TestWSSClientCert.

- websocket_client_cert.p12 : A PKCS #12 file containing a client certificate
     and a private key created for WebSocket testing. The password is "".
     This file is used in SSLUITest.TestWSSClientCert.

- no_subject_common_name_cert.pem: Used to test the function that generates a
  NSS certificate nickname for a user certificate. This certificate's Subject
  field doesn't have a common name.

- quic_intermediate.crt
- quic_test_ecc.example.com.crt
- quic_test.example.com.crt
- quic_root.crt
     These certificates are used by the ProofVerifier's unit tests of QUIC.

===== From net/data/ssl/scripts/generate-test-certs.sh
- expired_cert.pem
- ok_cert.pem
- root_ca_cert.pem
     These certificates are the common certificates used by the Python test
     server for simulating HTTPS connections.

- name_constraint_bad.pem
- name_constraint_good.pem
    Two certificates used to test the built-in ability to restrict a root to
    a particular namespace.

- sha256.pem: Used to test the handling of SHA-256 certs on Windows.

- spdy_pooling.pem : Used to test the handling of spdy IP connection pooling

- subjectAltName_sanity_check.pem : Used to test the handling of various types
     within the subjectAltName extension of a certificate.

- punycodetest.pem : A test self-signed server certificate with punycode name.
     The common name is "xn--wgv71a119e.com" (日本語.com)

===== From net/data/ssl/scripts/generate-weak-test-chains.sh
- 2048-rsa-root.pem
- {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
- {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-ee-by-
      {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
      Test certificates used to ensure that weak keys are detected and rejected

===== From net/data/ssl/scripts/generate-cross-signed-certs.sh
- cross-signed-leaf.pem
- cross-signed-root-md5.pem
- cross-signed-root-sha1.pem
     A certificate chain for regression testing http://crbug.com/108514

===== From net/data/ssl/scripts/generate-redundant-test-chains.sh
- redundant-validated-chain.pem
- redundant-server-chain.pem
- redundant-validated-chain-root.pem

     Two chains, A -> B -> C -> D and A -> B -> C2 (C and C2 share the same
     public key) to test that SSLInfo gets the reconstructed, re-ordered
     chain instead of the chain as served. See
     SSLClientSocketTest.VerifyReturnChainProperlyOrdered in
     net/socket/ssl_client_socket_unittest.cc. These chains are valid until
     26 Feb 2022 and are generated by
     net/data/ssl/scripts/generate-redundant-test-chains.sh.

===== From net/data/ssl/scripts/generate-policy-certs.sh
- explicit-policy-chain.pem
     A test certificate chain with requireExplicitPolicy field set on the
     intermediate, with SkipCerts=0. This is used for regression testing
     http://crbug.com/31497.

===== From net/data/ssl/scripts/generate-client-certificates.sh
- client_1.pem
- client_1.key
- client_1.pk8
- client_1_ca.pem
- client_2.pem
- client_2.key
- client_2.pk8
- client_2_ca.pem
     This is a set of files used to unit test SSL client certificate
     authentication.
     - client_1_ca.pem and client_2_ca.pem are the certificates of
       two distinct signing CAs.
     - client_1.pem and client_1.key correspond to the certificate and
       private key for a first certificate signed by client_1_ca.pem.
     - client_2.pem and client_2.key correspond to the certificate and
       private key for a second certificate signed by client_2_ca.pem.
     - each .pk8 file contains the same key as the corresponding .key file
       as PKCS#8 PrivateKeyInfo in DER encoding.

===== From net/data/ssl/scripts/generate-android-test-key.sh
- android-test-key-rsa.pem
- android-test-key-dsa.pem
- android-test-key-dsa-public.pem
- android-test-key-ecdsa.pem
- android-test-key-ecdsa-public.pem
     This is a set of test RSA/DSA/ECDSA keys used by the Android-specific
     unit test in net/android/keystore_unittest.c. They are used to verify
     that the OpenSSL-specific wrapper for platform PrivateKey objects
     works properly. See the generate-android-test-keys.sh script.

===== From net/data/ssl/scripts/generate-bad-eku-certs.sh
- eku-test-root.pem
- non-crit-codeSigning-chain.pem
- crit-codeSigning-chain.pem
     Two code-signing certificates (eKU: codeSigning; eKU: critical,
     codeSigning) which we use to test that clients are making sure that web
     server certs are checked for correct eKU fields (when an eKU field is
     present). Since codeSigning is not valid for web server auth, the checks
     should fail.

===== From net/data/ssl/scripts/generate-multi-root-test-chains.sh
- multi-root-chain1.pem
- multi-root-chain2.pem
     Two chains, A -> B -> C -> D and A -> B -> C2 -> E (C and C2 share the
     same public key) to test that certificate validation caching does not
     interfere with the chain_verify_callback used by CertVerifyProcChromeOS.
     See CertVerifyProcChromeOSTest.

===== From net/data/ssl/scripts/generate-duplicate-cn-certs.sh
- duplicate_cn_1.p12
- duplicate_cn_1.pem
- duplicate_cn_2.p12
- duplicate_cn_2.pem
     Two certificates from the same issuer that share the same common name,
     but have distinct subject names (namely, their O fields differ). NSS
     requires that certificates have unique nicknames if they do not share the
     same subject, and these certificates are used to test that the nickname
     generation algorithm generates unique nicknames.
     The .pem versions contain just the certs, while the .p12 versions contain
     both the cert and a private key, since there are multiple ways to import
     certificates into NSS.

===== From net/data/ssl/scripts/generate-aia-certs.sh
- aia-cert.pem
- aia-intermediate.der
- aia-root.pem
     A certificate chain which we use to ensure AIA fetching works correctly
     when using NSS to verify certificates (which uses our HTTP stack).
     aia-cert.pem has a caIssuers that points to "aia-test.invalid" as the URL
     containing the intermediate, which can be served via a URLRequestFilter.
     aia-intermediate.der is stored in DER form for convenience, since that is
     the form expected of certificates discovered via AIA.


