rcgen: Root CA Params
use rcgen::{
BasicConstraints, CertificateParams, DistinguishedName,
DnType, IsCa, KeyPair, KeyUsagePurpose,
};
use time::{Duration, OffsetDateTime};
pub fn new_root(common_name: &str) -> anyhow::Result<Ca> {
let key = KeyPair::generate()?;
let mut params = CertificateParams::default();
params.distinguished_name.push(DnType::CommonName, common_name);
params.is_ca = IsCa::Ca(BasicConstraints::Constrained(1));
params.key_usages = vec![
KeyUsagePurpose::KeyCertSign,
KeyUsagePurpose::CrlSign,
];
params.not_before = OffsetDateTime::now_utc();
params.not_after = OffsetDateTime::now_utc() + Duration::days(365 * 15);
let cert = params.self_signed(&key)?;
Ok(Ca { cert, key, kind: CaKind::Root })
}