/// Generate certificate authority to sign cert
Generate certificate authority to sign cert
Generate certificate authority to sign cert
fn create_ca() -> Result<(X509, PKey<Private>)> {
    let rsa = Rsa::generate(2048)?;
    let privkey = PKey::from_rsa(rsa)?;
    let mut x509_name = X509NameBuilder::new()?;
    x509_name.append_entry_by_text("C", "US")?;
    x509_name.append_entry_by_text("ST", "TX")?;
    x509_name.append_entry_by_text("O", "Wrangler")?;
    x509_name.append_entry_by_text("CN", "Wrangler")?;
    let x509_name = x509_name.build();
    let mut cert_builder = X509::builder()?;
    cert_builder.set_version(2)?;
    let serial_number = {
        let mut serial = BigNum::new()?;
        serial.rand(159, MsbOption::MAYBE_ZERO, false)?;
        serial.to_asn1_integer()?
    };
    cert_builder.set_serial_number(&serial_number)?;
    cert_builder.set_subject_name(&x509_name)?;
    cert_builder.set_issuer_name(&x509_name)?;
    cert_builder.set_pubkey(&privkey)?;
    let not_before = Asn1Time::days_from_now(0)?;
    cert_builder.set_not_before(&not_before)?;
    let not_after = Asn1Time::days_from_now(365)?;
    cert_builder.set_not_after(&not_after)?;
    cert_builder.append_extension(BasicConstraints::new().critical().ca().build()?)?;
    cert_builder.append_extension(
        KeyUsage::new()
            .critical()
            .key_cert_sign()
            .crl_sign()
            .build()?,
    )?;
    let subject_key_identifier =
        SubjectKeyIdentifier::new().build(&cert_builder.x509v3_context(None, None))?;
    cert_builder.append_extension(subject_key_identifier)?;
    cert_builder.sign(&privkey, MessageDigest::sha256())?;
    let cert = cert_builder.build();
    Ok((cert, privkey))
}
fn create_ca ( ) -> Result < ( X509 , PKey < Private > ) > { let rsa = Rsa :: generate ( 2048 ) ? ; let privkey = PKey :: from_rsa ( rsa ) ? ; let mut x509_name = X509NameBuilder :: new ( ) ? ; x509_name . append_entry_by_text ( " " , " " ) ? ; x509_name . append_entry_by_text ( " " , " " ) ? ; x509_name . append_entry_by_text ( " " , " " ) ? ; x509_name . append_entry_by_text ( " " , " " ) ? ; let x509_name = x509_name . build ( ) ; let mut cert_builder = X509 :: builder ( ) ? ; cert_builder . set_version ( 2 ) ? ; let serial_number = { let mut serial = BigNum :: new ( ) ? ; serial . rand ( 159 , MsbOption :: MAYBE_ZERO , false ) ? ; serial . to_asn1_integer ( ) ? } ; cert_builder . set_serial_number ( & serial_number ) ? ; cert_builder . set_subject_name ( & x509_name ) ? ; cert_builder . set_issuer_name ( & x509_name ) ? ; cert_builder . set_pubkey ( & privkey ) ? ; let not_before = Asn1Time :: days_from_now ( 0 ) ? ; cert_builder . set_not_before ( & not_before ) ? ; let not_after = Asn1Time :: days_from_now ( 365 ) ? ; cert_builder . set_not_after ( & not_after ) ? ; cert_builder . append_extension ( BasicConstraints :: new ( ) . critical ( ) . ca ( ) . build ( ) ? ) ? ; cert_builder . append_extension ( KeyUsage :: new ( ) . critical ( ) . key_cert_sign ( ) . crl_sign ( ) . build ( ) ? , ) ? ; let subject_key_identifier = SubjectKeyIdentifier :: new ( ) . build ( & cert_builder . x509v3_context ( None , None ) ) ? ; cert_builder . append_extension ( subject_key_identifier ) ? ; cert_builder . sign ( & privkey , MessageDigest :: sha256 ( ) ) ? ; let cert = cert_builder . build ( ) ; Ok ( ( cert , privkey ) ) }
Generate certificate authority to sign cert
Generate certificate authority to sign cert