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 : Certificates for testing parsing of different formats.

- 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.

- 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.

- 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/

- leaf_from_known_root.pem : A certificate issued by a public trust anchor,
     used for CertVerifyProcInternalTest.TestKnownRoot. Using for other
     purposes is not recommended. This needs to be updated periodically so the
     server name the cert is valid for may change.

- treadclimber.pem: A chain where the leaf does not contain embedded SCTs,
  and which has a notBefore date after 2018/10/15. Expires 2020/02/07.
- treadclimber.sctlist: The TLS encoded SignedCertificateTimestampList for the
  treadclimber.pem leaf certificate.
- lets-encrypt-dst-x3-root.pem: A chain that ends in the Lets encrypt DST X3
  root (https://crt.sh/?id=8395). Has the same leaf as
  lets-encrypt-isrg-x1-root.pem.
- lets-encrypt-isrg-x1-root.pem: A chain that ends in the Lets encrypt ISRG X1
  root (https://crt.sh/?id=9314791). Has the same leaf as
  lets-encrypt-dst-x3-root.pem.

===== 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".

- client-empty-password.p12 : A PKCS #12 file containing an unencrypted client
     certificate and a encrypted private key.  The password is the empty string,
     encoded as two zero bytes.  (PKCS#12 passwords are encoded as
     NUL-terminated UTF-16.)

- client-null-password.p12 : A PKCS #12 file containing an unencrypted client
     certificate and a encrypted private key.  The password is the empty string,
     encoded as the empty byte string.

- 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.

- 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.

- 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.

- ct-test-embedded-with-uids.pem: A certificate with embedded SCT and
  issuer/subject unique IDs. This certificate should only be used in parsing
  tests and otherwise kept fixed. The signature, etc., are intentionally
  invalid.

- name_constrained_key.pem
  The private key matching the public_key_hash of the kDomainsTest constraint
  in CertVerifyProc::HasNameConstraintsViolation.

===== From net/data/ssl/scripts/generate-quic-chain.sh
- quic-chain.pem
- quic-leaf-cert.key
- quic-leaf-cert.key.pkcs8.pem
- quic-root.pem
     These certificates are used by integration tests that use QUIC.

- quic-leaf-cert.key.sct
     This isn't generated and just contains a simple text file (the contents
     don't actually matter, just the presence of the file).

===== 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.

- intermediate_ca_cert.pem
- ok_cert_by_intermediate.pem
    These certificates simulate a more common chain of root (root_ca_cert.pem)
    to intermediate (intermediate_ca_cert.pem) to leaf
    (ok_cert_by_intermediate.pem).

- wildcard_.pem
    A certificate and private key valid for *.example.org, used in various
    net unit tests.

- test_names.pem
    A certificate and private key valid for a number of test names. See
    [test_names] in ee.cnf. Other names may be added as needed.

- bad_validity.pem
    A certificate and private key only valid on 0001-01-01. Windows refuses to
    parse this certificate.

- 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.

- policies_sanity_check.pem : Used to test the parsing of various types of
     certificatePolicies extension policyQualifiers.

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

- sha1_2016.pem
    Used to test the handling of SHA1 certificates expiring in 2016.

- 10_year_validity.pem
- 11_year_validity.pem
- 39_months_after_2015_04.pem
- 40_months_after_2015_04.pem
- 60_months_after_2012_07.pem
- 61_months_after_2012_07.pem
- pre_br_validity_bad_121.pem
- pre_br_validity_bad_2020.pem
- pre_br_validity_ok.pem
- start_after_expiry.pem
    Certs to test that the maximum validity durations set by the CA/Browser
    Forum Baseline Requirements are enforced.

- pre_june_2016.pem
- post_june_2016.pem
- dec_2017.pem
   Certs to test that policies related to enforcing CT on Symantec are
   properly gated on the issuance date. See
   https://g.co/chrome/symantecpkicerts. (Note, however, that the leaf and
   root do not actually form a chain.)

- may_2018.pem
   An 825-day certificate issued on May 1, 2018, the official start of
   enforcement requiring Certificate Transparency for new certificates. This
   certificate does not have any embedded SCTs.

- 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.

- ev_test.pem
- ev_test_state_only.pem
     Certificates for testing EV display (including regression test for
     https://crbug.com/1069113).

===== 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-sha256.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-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
- client_3.pem
- client_3.key
- client_3.pk8
- client_3_ca.pem
- client_4.pem
- client_4.key
- client_4.pk8
- client_4_ca.pem
- client_5.pem
- client_5.key
- client_5.pk8
- client_5_ca.pem
- client_6.pem
- client_6.key
- client_6.pk8
- client_6_ca.pem
- client_root_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.
     - client_3.pem is nearly identical to client_2.pem, except it is used
       to test wifi EAP-TLS authentication so it uses a different set
       of X509v3 extensions.  Specifically it includes two Subject
       Alternative Name fields recognized by Chrome OS.
     - client_4.pem is similar to client_2.pem but is a P-256 ECDSA key rather
       than RSA.
     - client_5.pem is similar to client_2.pem but is a P-384 ECDSA key rather
       than RSA.
     - client_6.pem is similar to client_2.pem but is a P-521 ECDSA key rather
       than RSA.
     - client_root_ca.pem is the CA certificate which signed client_*_ca.pem.

===== 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-multi-root-keychain.sh
- multi-root.keychain: An OSX Keychain containing the generated
  certificates multi-root-*-by-*.pem

===== 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-self-signed-certs.sh
- self-signed-invalid-name.pem
- self-signed-invalid-sig.pem
     Two "self-signed" certificates with mismatched names or an invalid
     signature, respectively.

===== From net/data/ssl/scripts/generate-key-usage-certs.sh
- key_usage_rsa_no_extension.pem
- key_usage_rsa_keyencipherment.pem
- key_usage_rsa_digitalsignature.pem
- key_usage_rsa_both.pem
     Self-signed RSA certificates with various combinations of keyUsage
     flags. Their private key is key_usage_rsa.key.

- key_usage_p256_no_extension.pem
- key_usage_p256_keyagreement.pem
- key_usage_p256_digitalsignature.pem
- key_usage_p256_both.pem
     Self-signed P-256 certificates with various combinations of keyUsage
     flags. Their private key is key_usage_p256.key.
