pub enum IssuanceError {
InvalidCsr(String),
KeyTooSmall {
algorithm: String,
bits: u32,
min_bits: u32,
},
ValidityTooLong {
requested_days: u32,
max_days: u32,
},
MissingExtension(String),
UnknownProfile(String),
SigningError(String),
StorageError(String),
AlgorithmNotAllowed {
algorithm: String,
profile: String,
},
ProhibitedDnAttribute {
oid: String,
name: String,
},
}Expand description
Errors during certificate issuance.
Variants§
InvalidCsr(String)
The CSR is malformed or cannot be parsed.
KeyTooSmall
The CSR key does not meet minimum size requirements.
ValidityTooLong
The requested validity period exceeds the maximum.
MissingExtension(String)
A required extension is missing from the profile.
UnknownProfile(String)
The enrollment profile does not exist.
SigningError(String)
CA signing operation failed.
StorageError(String)
Database storage error.
AlgorithmNotAllowed
The CSR algorithm is not permitted by the enrollment profile.
ProhibitedDnAttribute
The CSR subject contains a prohibited DN attribute.
Implementations§
Source§impl IssuanceError
impl IssuanceError
Sourcepub fn is_client_error(&self) -> bool
pub fn is_client_error(&self) -> bool
Whether this failure was caused by the client’s request content (the CSR) rather than a server-side fault.
This is the single source of truth for HTTP/CoAP status classification:
client-content faults must surface as 4xx (RFC 7030 §4.2.3 — the
requester can fix the CSR and retry), while server/profile/signing
faults must surface as 5xx (the client cannot fix them, and internal
detail must not leak). A misclassification here would either blame the
client for a server misconfiguration or hide a bad CSR behind a 500.
Note the two profile-driven variants — MissingExtension and
ValidityTooLong — are server errors: they originate from the
server’s EnrollmentProfile (check_required_extensions,
check_validity_period), not from anything the client sent.
Trait Implementations§
Source§impl Debug for IssuanceError
impl Debug for IssuanceError
Source§impl Display for IssuanceError
impl Display for IssuanceError
Source§impl Error for IssuanceError
impl Error for IssuanceError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<IssuanceError> for KipukaError
impl From<IssuanceError> for KipukaError
Source§fn from(e: IssuanceError) -> Self
fn from(e: IssuanceError) -> Self
Classify an issuance failure into the correct HTTP domain.
A fault in the client-supplied CSR (bad self-signature/PoP, undersized
key, disallowed algorithm, prohibited DN attribute) is a
BadRequest → 400: the requester can fix
the CSR and retry, and the specific reason is safe to return. Every
other failure — signing, storage, or a server-side profile
misconfiguration — is a Ca error → 500, whose
detail is logged but never exposed to the client.
The client/server split is owned by
IssuanceError::is_client_error
so HTTP and CoAP transports classify identically.
Auto Trait Implementations§
impl Freeze for IssuanceError
impl RefUnwindSafe for IssuanceError
impl Send for IssuanceError
impl Sync for IssuanceError
impl Unpin for IssuanceError
impl UnsafeUnpin for IssuanceError
impl UnwindSafe for IssuanceError
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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