pub fn new_intermediate(
common_name: &str,
issuer: &Ca,
) -> 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(0));
params.key_usages = vec![
KeyUsagePurpose::KeyCertSign,
KeyUsagePurpose::CrlSign,
];
params.not_before = OffsetDateTime::now_utc();
params.not_after = OffsetDateTime::now_utc() + Duration::days(365 * 7);
let cert = params.signed_by(&key, &issuer.cert, &issuer.key)?;
Ok(Ca { cert, key, kind: CaKind::Intermediate })
}