Struct webpki::EndEntityCert [] [src]

pub struct EndEntityCert<'a> {
    // some fields omitted
}

An end-entity certificate.

Server certificate processing in a TLS connection consists of several steps. All of these steps are necessary:

  • EndEntityCert.verify_is_valid_tls_server_cert: Verify that the server's certificate is currently valid.
  • EndEntityCert.verify_is_valid_for_dns_name: Verify that the server's certificate is valid for the host that is being connected to.
  • EndEntityCert.verify_signature: Verify that the signature of server's ServerKeyExchange message is valid for the server's certificate.

Although it would be less error-prone to combine all these steps into a single function call, some significant optimizations are possible if the three steps are processed separately (in parallel). It does not matter much which order the steps are done in, but all of these steps must completed before application data is sent and before received application data is processed. EndEntityCert::from is an inexpensive operation and is deterministic, so if these tasks are done in multiple threads, it is probably best to just call EndEntityCert::from multiple times (before each operation) for the same DER-encoded ASN.1 certificate bytes.

Methods

impl<'a> EndEntityCert<'a>
[src]

Parse the ASN.1 DER-encoded X.509 encoding of the certificate cert_der.

Verifies that the end-entity certificate is valid for use by a TLS server.

supported_sig_algs is the list of signature algorithms that are trusted for use in certificate signatures; the end-entity certificate's public key is not validated against this list. trust_anchors is the list of root CAs to trust. intermediate_certs is the sequence of intermediate certificates that the server sent in the TLS handshake. cert is the purported end-entity certificate of the server. time is the time for which the validation is effective (usually the current time).

Verifies that the certificate is valid for the given DNS host name.

dns_name is assumed to a normalized ASCII (punycode if non-ASCII) DNS name.

Verifies the signature signature of message msg using the certificate's public key.

signature_alg is the algorithm to use to verify the signature; the certificate's public key is verified to be compatible with this algorithm.

For TLS 1.2, signature corresponds to TLS's DigitallySigned.signature and signature_alg corresponds to TLS's DigitallySigned.algorithm of TLS type SignatureAndHashAlgorithm. In TLS 1.2 a single SignatureAndHashAlgorithm may map to multiple SignatureAlgorithms. For example, a TLS 1.2 ignatureAndHashAlgorithm of (ECDSA, SHA-256) may map to any or all of {ECDSA_P256_SHA256, ECDSA_P384_SHA256}, depending on how the TLS implementation is configured.

For current TLS 1.3 drafts, signature_alg corresponds to TLS's algorithm fields of type SignatureScheme. There is (currently) a one-to-one correspondence between TLS 1.3's SignatureScheme and SignatureAlgorithm.