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.
- login.trustwave.com.pem :
     Certificate for testing EV with multiple OIDs. Regression test for crbug.com/705285

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

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

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

- comodo.pem : A certificate chain for comodo.com which contains signed
	    certificate timestamps that conform to Chrome's Certificate Transparency
			policy as of December 2017.

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

- daltonridgeapts.com-chain.pem : A long-lived (39 month), BR compliant,
     non-EV certificate, issued by a public trust anchor, and valid for the
     domain daltonridgeapts.com.

- gms.hongleong.com.my-verisign-chain.pem: A certificate chain for
  gms.hongleong.com.my issued by VeriSign Class 3 Public Primary Certification
  Authority - G5. Expires Dec 30 2019.
- verisign_class3_g5_crosssigned.pem: The SHA1 cross-signed version of
  VeriSign Class 3 Public Primary Certification Authority - G5
- verisign_class3_g5_crosssigned-trusted.keychain: OSX Keychain set to Always
  Trust the certificate in verisign_class3_g5_crosssigned.pem (Generated by
  scripts/generate-verisign_class3_g5_crosssigned-trusted-keychain.sh)

- www.ahrn.com.pem: A certificate issued by the Legacy Symantec PKI in 2014,
  expires on 2019-10-27.

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

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

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

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

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

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

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

- reject_intranet_hosts.pem
   A certificate with a non-IANA delegated domain, which is rejected since a CA
   cannot validate the applicant controls that domain.

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

- tls_feature_extension.pem
  A certificate that contains the TLS Feature Extension.

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

===== 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-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
- 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-BFE-keychain.sh
- multi-root-BFE.keychain: An OSX Keychain containing the generated
  certificates "multi-root-B-by-F.pem" and "multi-root-F-by-E.pem".
- 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-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.

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