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.

- 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-test-keys.sh
- rsa-{768,1024,2048}-{1..3}.key
- ec-prime256v1-{1..3}.key
     Pre-generated keys of various types/sizes.
     Useful for tests that generate RSA certificates with CertBuilder without
     having to pay the cost of generating RSA keys at runtime. Multiple keys
     of each size are provided. (EC keys are cheap to generate at runtime, but
     having some as files simplifies test logic in cases where the test is
     reading both RSA and EC keys from files.)

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