rcgen: Issuing a Server Cert
use rcgen::{
CertificateParams, ExtendedKeyUsagePurpose,
KeyUsagePurpose, SanType, KeyPair,
};
pub fn issue_server_cert(
hostnames: &[&str],
issuer: &Ca,
) -> anyhow::Result<(rcgen::Certificate, rcgen::KeyPair)> {
let key = KeyPair::generate()?;
let mut params = CertificateParams::new(
hostnames.iter().map(|s| s.to_string()).collect()
)?;
params.is_ca = IsCa::NoCa;
params.key_usages = vec![KeyUsagePurpose::DigitalSignature];
params.extended_key_usages = vec![ExtendedKeyUsagePurpose::ServerAuth];
params.not_before = OffsetDateTime::now_utc();
params.not_after = OffsetDateTime::now_utc() + Duration::days(90);
let cert = params.signed_by(&key, &issuer.cert, &issuer.key)?;
Ok((cert, key))
}