#[non_exhaustive]pub struct TlsKeyAndCert {
pub(crate) certificates: Vec<Vec<u8>>,
pub(crate) private_key: RsaPrivateKey,
pub(crate) sha256_digest: [u8; 32],
pub(crate) expiration: SystemTime,
}Expand description
A set of x.509 certificate information and keys for use with a TLS library.
Only relays need this: They should set these as the certificate(s) to be used for incoming TLS connections.
This is not necessarily the most convenient form to manipulate certificates in: rather, it is intended to provide the formats that TLS libraries generally expect to get.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.certificates: Vec<Vec<u8>>A list of certificates in DER form.
(This may contain more than one certificate, but for now only one certificate is used.)
private_key: RsaPrivateKeyA private key for use in the TLS handshake.
sha256_digest: [u8; 32]A SHA256 digest of the link certificate (the one certifying the private key’s public component).
This digest is the one what will be certified by the relay’s
SIGNING_V_TLS_CERT
certificate.
expiration: SystemTimeA time after which this set of link information won’t be valid, and another should be generated.
Implementations§
Source§impl TlsKeyAndCert
impl TlsKeyAndCert
Sourcepub fn certificates_der(&self) -> Vec<&[u8]>
pub fn certificates_der(&self) -> Vec<&[u8]>
Return the certificates as a list of DER-encoded values.
Sourcepub fn certificate_pem(&self) -> String
pub fn certificate_pem(&self) -> String
Return the certificates as a concatenated list in PEM (“BEGIN CERTIFICATE”) format.
Sourcepub fn private_key_pkcs8_der(&self) -> Result<Zeroizing<Vec<u8>>, X509CertError>
pub fn private_key_pkcs8_der(&self) -> Result<Zeroizing<Vec<u8>>, X509CertError>
Return the private key in (unencrypted) PKCS8 DER format.
Sourcepub fn private_key_pkcs8_pem(&self) -> Result<Zeroizing<String>, X509CertError>
pub fn private_key_pkcs8_pem(&self) -> Result<Zeroizing<String>, X509CertError>
Return the private key in (unencrypted) PKCS8 PEM (“BEGIN PRIVATE KEY”) format.
Sourcepub fn expiration(&self) -> SystemTime
pub fn expiration(&self) -> SystemTime
Return the earliest time at which any of these certificates will expire.
Sourcepub fn link_cert_sha256(&self) -> &[u8; 32]
pub fn link_cert_sha256(&self) -> &[u8; 32]
Return the SHA256 digest of the link certificate
This digest is the one certified with the relay’s
SIGNING_V_TLS_CERT
certificate.
Sourcepub fn create<Rng: CryptoRng>(
rng: &mut Rng,
now: SystemTime,
issuer_hostname: &str,
subject_hostname: &str,
) -> Result<Self, X509CertError>
pub fn create<Rng: CryptoRng>( rng: &mut Rng, now: SystemTime, issuer_hostname: &str, subject_hostname: &str, ) -> Result<Self, X509CertError>
Create a new TLS link key and associated certificate(s).
The certificate will be valid at now, and for a while after.
The certificate parameters and keys are chosen for reasonable security, approximate conformance to RFC5280, and limited fingerprinting resistance.
Note: The fingerprinting resistance is quite limited. We will likely want to pursue these avenues for better fingerprinting resistance:
- Encourage more use of TLS 1.3, where server certificates are encrypted. (This prevents passive fingerprinting only.)
- Adjust this function to make certificates look even more normal
- Integrate with ACME-supporting certificate issuers (Letsencrypt, etc) to get real certificates for Tor relays.
Trait Implementations§
Source§impl Clone for TlsKeyAndCert
impl Clone for TlsKeyAndCert
Source§fn clone(&self) -> TlsKeyAndCert
fn clone(&self) -> TlsKeyAndCert
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TlsKeyAndCert
impl RefUnwindSafe for TlsKeyAndCert
impl Send for TlsKeyAndCert
impl Sync for TlsKeyAndCert
impl Unpin for TlsKeyAndCert
impl UnsafeUnpin for TlsKeyAndCert
impl UnwindSafe for TlsKeyAndCert
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more