Struct rocket::mtls::x509::X509Certificate
[−]pub struct X509Certificate<'a> {
pub tbs_certificate: TbsCertificate<'a>,
pub signature_algorithm: AlgorithmIdentifier<'a>,
pub signature_value: BitStringObject<'a>,
}
mtls
only.Expand description
An X.509 v3 Certificate.
X.509 v3 certificates are defined in RFC5280, section
4.1. This object uses the same structure for content, so for ex the subject can be accessed
using the path x509.tbs_certificate.subject
.
X509Certificate
also contains convenience methods to access the most common fields (subject,
issuer, etc.). These are provided using Deref<Target = TbsCertificate>
, so documentation for
these methods can be found in the TbsCertificate
object.
A X509Certificate
is a zero-copy view over a buffer, so the lifetime is the same as the
buffer containing the binary representation.
fn display_x509_info(x509: &X509Certificate<'_>) {
let subject = x509.subject();
let issuer = x509.issuer();
println!("X.509 Subject: {}", subject);
println!("X.509 Issuer: {}", issuer);
println!("X.509 serial: {}", x509.tbs_certificate.raw_serial_as_string());
}
Fields
tbs_certificate: TbsCertificate<'a>
signature_algorithm: AlgorithmIdentifier<'a>
signature_value: BitStringObject<'a>
Methods from Deref<Target = TbsCertificate<'a>>
pub fn version(&self) -> X509Version
pub fn version(&self) -> X509Version
Get the version of the encoded certificate
pub fn public_key(&self) -> &SubjectPublicKeyInfo<'_>
pub fn public_key(&self) -> &SubjectPublicKeyInfo<'_>
Get the certificate public key information.
pub fn extensions(&self) -> &[X509Extension<'a>]
pub fn extensions(&self) -> &[X509Extension<'a>]
Returns the certificate extensions
pub fn iter_extensions(&self) -> impl Iterator<Item = &X509Extension<'a>>
pub fn iter_extensions(&self) -> impl Iterator<Item = &X509Extension<'a>>
Returns an iterator over the certificate extensions
pub fn get_extension_unique(
&self,
oid: &Oid<'_>
) -> Result<Option<&X509Extension<'a>>, X509Error>
pub fn get_extension_unique(
&self,
oid: &Oid<'_>
) -> Result<Option<&X509Extension<'a>>, X509Error>
Searches for an extension with the given Oid
.
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error DuplicateExtensions
if the extension is present twice or more.
pub fn find_extension(&self, oid: &Oid<'_>) -> Option<&X509Extension<'a>>
👎 Deprecated since 0.13.0: Do not use this function (duplicate extensions are not checked), use get_extension_unique
pub fn find_extension(&self, oid: &Oid<'_>) -> Option<&X509Extension<'a>>
Do not use this function (duplicate extensions are not checked), use get_extension_unique
Searches for an extension with the given Oid
.
Duplicate extensions
Note: if there are several extensions with the same Oid
, the first one is returned, masking other values.
RFC5280 forbids having duplicate extensions, but does not specify how errors should be handled.
Because of this, the find_extension
method is not safe and should not be used!
The get_extension_unique
method checks for duplicate extensions and should be
preferred.
pub fn extensions_map(
&self
) -> Result<HashMap<Oid<'_>, &X509Extension<'a>, RandomState>, X509Error>
pub fn extensions_map(
&self
) -> Result<HashMap<Oid<'_>, &X509Extension<'a>, RandomState>, X509Error>
Builds and returns a map of extensions.
If an extension is present twice, this will fail and return DuplicateExtensions
.
pub fn basic_constraints(
&self
) -> Result<Option<BasicExtension<&BasicConstraints>>, X509Error>
pub fn basic_constraints(
&self
) -> Result<Option<BasicExtension<&BasicConstraints>>, X509Error>
Attempt to get the certificate Basic Constraints extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is present twice or more.
pub fn key_usage(&self) -> Result<Option<BasicExtension<&KeyUsage>>, X509Error>
pub fn key_usage(&self) -> Result<Option<BasicExtension<&KeyUsage>>, X509Error>
Attempt to get the certificate Key Usage extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn extended_key_usage(
&self
) -> Result<Option<BasicExtension<&ExtendedKeyUsage<'_>>>, X509Error>
pub fn extended_key_usage(
&self
) -> Result<Option<BasicExtension<&ExtendedKeyUsage<'_>>>, X509Error>
Attempt to get the certificate Extended Key Usage extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn policy_constraints(
&self
) -> Result<Option<BasicExtension<&PolicyConstraints>>, X509Error>
pub fn policy_constraints(
&self
) -> Result<Option<BasicExtension<&PolicyConstraints>>, X509Error>
Attempt to get the certificate Policy Constraints extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn inhibit_anypolicy(
&self
) -> Result<Option<BasicExtension<&InhibitAnyPolicy>>, X509Error>
pub fn inhibit_anypolicy(
&self
) -> Result<Option<BasicExtension<&InhibitAnyPolicy>>, X509Error>
Attempt to get the certificate Policy Constraints extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn policy_mappings(
&self
) -> Result<Option<BasicExtension<&PolicyMappings<'_>>>, X509Error>
pub fn policy_mappings(
&self
) -> Result<Option<BasicExtension<&PolicyMappings<'_>>>, X509Error>
Attempt to get the certificate Policy Mappings extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn subject_alternative_name(
&self
) -> Result<Option<BasicExtension<&SubjectAlternativeName<'_>>>, X509Error>
pub fn subject_alternative_name(
&self
) -> Result<Option<BasicExtension<&SubjectAlternativeName<'_>>>, X509Error>
Attempt to get the certificate Subject Alternative Name extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn name_constraints(
&self
) -> Result<Option<BasicExtension<&NameConstraints<'_>>>, X509Error>
pub fn name_constraints(
&self
) -> Result<Option<BasicExtension<&NameConstraints<'_>>>, X509Error>
Attempt to get the certificate Name Constraints extension
Return Ok(Some(extension))
if exactly one was found, Ok(None)
if none was found,
or an error if the extension is invalid, or is present twice or more.
pub fn raw_serial(&self) -> &'a [u8]ⓘNotable traits for &'_ mut [u8]impl<'_> Write for &'_ mut [u8]impl<'_> Read for &'_ [u8]
pub fn raw_serial(&self) -> &'a [u8]ⓘNotable traits for &'_ mut [u8]impl<'_> Write for &'_ mut [u8]impl<'_> Read for &'_ [u8]
Get the raw bytes of the certificate serial number
pub fn raw_serial_as_string(&self) -> String
pub fn raw_serial_as_string(&self) -> String
Get a formatted string of the certificate serial number, separated by ‘:’
Trait Implementations
impl<'a> Clone for X509Certificate<'a>
impl<'a> Clone for X509Certificate<'a>
fn clone(&self) -> X509Certificate<'a>
fn clone(&self) -> X509Certificate<'a>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl<'a> Debug for X509Certificate<'a>
impl<'a> Debug for X509Certificate<'a>
impl<'a> Deref for X509Certificate<'a>
impl<'a> Deref for X509Certificate<'a>
type Target = TbsCertificate<'a>
type Target = TbsCertificate<'a>
The resulting type after dereferencing.
fn deref(&self) -> &<X509Certificate<'a> as Deref>::Target
fn deref(&self) -> &<X509Certificate<'a> as Deref>::Target
Dereferences the value.
impl<'a> FromDer<'a> for X509Certificate<'a>
impl<'a> FromDer<'a> for X509Certificate<'a>
fn from_der(
i: &'a [u8]
) -> Result<(&'a [u8], X509Certificate<'a>), Err<X509Error>>
fn from_der(
i: &'a [u8]
) -> Result<(&'a [u8], X509Certificate<'a>), Err<X509Error>>
Parse a DER-encoded X.509 Certificate, and return the remaining of the input and the built object.
The returned object uses zero-copy, and so has the same lifetime as the input.
Note that only parsing is done, not validation.
Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING }
Example
To parse a certificate and print the subject and issuer:
let res = parse_x509_certificate(DER);
match res {
Ok((_rem, x509)) => {
let subject = x509.subject();
let issuer = x509.issuer();
println!("X.509 Subject: {}", subject);
println!("X.509 Issuer: {}", issuer);
},
_ => panic!("x509 parsing failed: {:?}", res),
}
impl<'a> Parser<&'a [u8], X509Certificate<'a>, X509Error> for X509CertificateParser
impl<'a> Parser<&'a [u8], X509Certificate<'a>, X509Error> for X509CertificateParser
fn parse(
&mut self,
input: &'a [u8]
) -> Result<(&'a [u8], X509Certificate<'a>), Err<X509Error>>
fn parse(
&mut self,
input: &'a [u8]
) -> Result<(&'a [u8], X509Certificate<'a>), Err<X509Error>>
A parser takes in input type, and returns a Result
containing
either the remaining input and the output value, or an error Read more
fn map<G, O2>(self, g: G) -> Map<Self, G, O> where
G: Fn(O) -> O2,
fn map<G, O2>(self, g: G) -> Map<Self, G, O> where
G: Fn(O) -> O2,
Maps a function over the result of a parser
fn flat_map<G, H, O2>(self, g: G) -> FlatMap<Self, G, O> where
G: FnMut(O) -> H,
H: Parser<I, O2, E>,
fn flat_map<G, H, O2>(self, g: G) -> FlatMap<Self, G, O> where
G: FnMut(O) -> H,
H: Parser<I, O2, E>,
Creates a second parser from the output of the first one, then apply over the rest of the input
fn and_then<G, O2>(self, g: G) -> AndThen<Self, G, O> where
G: Parser<O, O2, E>,
fn and_then<G, O2>(self, g: G) -> AndThen<Self, G, O> where
G: Parser<O, O2, E>,
Applies a second parser over the output of the first one
fn and<G, O2>(self, g: G) -> And<Self, G> where
G: Parser<I, O2, E>,
fn and<G, O2>(self, g: G) -> And<Self, G> where
G: Parser<I, O2, E>,
Applies a second parser after the first one, return their results as a tuple
impl<'a> PartialEq<X509Certificate<'a>> for X509Certificate<'a>
impl<'a> PartialEq<X509Certificate<'a>> for X509Certificate<'a>
fn eq(&self, other: &X509Certificate<'a>) -> bool
fn eq(&self, other: &X509Certificate<'a>) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
fn ne(&self, other: &X509Certificate<'a>) -> bool
fn ne(&self, other: &X509Certificate<'a>) -> bool
This method tests for !=
.
impl<'a> StructuralPartialEq for X509Certificate<'a>
Auto Trait Implementations
impl<'a> RefUnwindSafe for X509Certificate<'a>
impl<'a> Send for X509Certificate<'a>
impl<'a> Sync for X509Certificate<'a>
impl<'a> Unpin for X509Certificate<'a>
impl<'a> UnwindSafe for X509Certificate<'a>
Blanket Implementations
impl<'a, T> AsTaggedExplicit<'a> for T where
T: 'a,
impl<'a, T> AsTaggedExplicit<'a> for T where
T: 'a,
fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self>
impl<'a, T> AsTaggedImplicit<'a> for T where
T: 'a,
impl<'a, T> AsTaggedImplicit<'a> for T where
T: 'a,
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
sourcefn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
fn into_collection<A>(self) -> SmallVec<A> where
A: Array<Item = T>,
Converts self
into a collection.
fn mapped<U, F, A>(self, f: F) -> SmallVec<A> where
F: FnMut(T) -> U,
A: Array<Item = U>,
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more