pub struct ChainSpec {
pub leaf_cn: String,
pub leaf_sans: Vec<String>,
pub root_cn: String,
pub intermediate_cn: String,
pub rsa_bits: usize,
pub root_validity_days: u32,
pub intermediate_validity_days: u32,
pub leaf_validity_days: u32,
pub leaf_not_before_offset_days: Option<i64>,
pub intermediate_not_before_offset_days: Option<i64>,
}Expand description
Specification for generating a three-level X.509 certificate chain (root CA -> intermediate CA -> leaf).
Fields§
§leaf_cn: StringCommon Name (CN) for the leaf certificate.
leaf_sans: Vec<String>DNS Subject Alternative Names for the leaf certificate.
root_cn: StringCommon Name (CN) for the root CA.
intermediate_cn: StringCommon Name (CN) for the intermediate CA.
rsa_bits: usizeRSA key size in bits.
root_validity_days: u32Root CA validity period in days.
intermediate_validity_days: u32Intermediate CA validity period in days.
leaf_validity_days: u32Leaf certificate validity period in days.
leaf_not_before_offset_days: Option<i64>Override for leaf not_before as days before base_time.
When None, not_before = base_time - 1 day (the default).
When Some(730), not_before = base_time - 730 days, which combined
with a short leaf_validity_days produces an unambiguously expired leaf.
intermediate_not_before_offset_days: Option<i64>Override for intermediate not_before as days before base_time.
Same semantics as leaf_not_before_offset_days but for the intermediate CA.
Implementations§
Source§impl ChainSpec
impl ChainSpec
Sourcepub fn new(leaf_cn: impl Into<String>) -> ChainSpec
pub fn new(leaf_cn: impl Into<String>) -> ChainSpec
Create a chain spec with sensible defaults for the given leaf CN.
The leaf CN is automatically added to the SAN list.
Sourcepub fn with_sans(self, sans: Vec<String>) -> ChainSpec
pub fn with_sans(self, sans: Vec<String>) -> ChainSpec
Set the DNS Subject Alternative Names for the leaf certificate.
The leaf CN is not automatically added; include it explicitly if needed.
Sourcepub fn with_root_cn(self, cn: impl Into<String>) -> ChainSpec
pub fn with_root_cn(self, cn: impl Into<String>) -> ChainSpec
Set the root CA Common Name.
Sourcepub fn with_intermediate_cn(self, cn: impl Into<String>) -> ChainSpec
pub fn with_intermediate_cn(self, cn: impl Into<String>) -> ChainSpec
Set the intermediate CA Common Name.
Sourcepub fn with_rsa_bits(self, bits: usize) -> ChainSpec
pub fn with_rsa_bits(self, bits: usize) -> ChainSpec
Set the RSA key size in bits.
Sourcepub fn with_root_validity_days(self, days: u32) -> ChainSpec
pub fn with_root_validity_days(self, days: u32) -> ChainSpec
Set the root CA validity period in days.
Sourcepub fn with_intermediate_validity_days(self, days: u32) -> ChainSpec
pub fn with_intermediate_validity_days(self, days: u32) -> ChainSpec
Set the intermediate CA validity period in days.
Sourcepub fn with_leaf_validity_days(self, days: u32) -> ChainSpec
pub fn with_leaf_validity_days(self, days: u32) -> ChainSpec
Set the leaf certificate validity period in days.
Sourcepub fn stable_bytes(&self) -> Vec<u8> ⓘ
pub fn stable_bytes(&self) -> Vec<u8> ⓘ
Stable byte representation for deterministic derivation.
SANs are sorted and deduplicated before encoding for stability.
Trait Implementations§
impl Eq for ChainSpec
impl StructuralPartialEq for ChainSpec
Auto Trait Implementations§
impl Freeze for ChainSpec
impl RefUnwindSafe for ChainSpec
impl Send for ChainSpec
impl Sync for ChainSpec
impl Unpin for ChainSpec
impl UnsafeUnpin for ChainSpec
impl UnwindSafe for ChainSpec
Blanket Implementations§
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.