|
| 1 | +#![allow(clippy::complexity, clippy::style, clippy::pedantic)] |
| 2 | + |
| 3 | +use rcgen::{date_time_ymd, Certificate, CertificateParams, DistinguishedName, DnType, SanType}; |
| 4 | +use std::fs; |
| 5 | + |
| 6 | +fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 7 | + let mut params: CertificateParams = Default::default(); |
| 8 | + params.not_before = date_time_ymd(1975, 01, 01); |
| 9 | + params.not_after = date_time_ymd(4096, 01, 01); |
| 10 | + params.distinguished_name = DistinguishedName::new(); |
| 11 | + params |
| 12 | + .distinguished_name |
| 13 | + .push(DnType::OrganizationName, "Crab widgits SE"); |
| 14 | + params |
| 15 | + .distinguished_name |
| 16 | + .push(DnType::CommonName, "Master Cert"); |
| 17 | + params.subject_alt_names = vec![ |
| 18 | + SanType::DnsName("crabs.crabs".to_string()), |
| 19 | + SanType::DnsName("localhost".to_string()), |
| 20 | + ]; |
| 21 | + |
| 22 | + let cert = Certificate::from_params(params)?; |
| 23 | + |
| 24 | + let pem_serialized = cert.serialize_pem()?; |
| 25 | + let pem = pem::parse(&pem_serialized)?; |
| 26 | + let der_serialized = pem.contents(); |
| 27 | + println!("{pem_serialized}"); |
| 28 | + println!("{}", cert.serialize_private_key_pem()); |
| 29 | + std::fs::create_dir_all("certs/")?; |
| 30 | + fs::write("certs/cert.pem", &pem_serialized.as_bytes())?; |
| 31 | + fs::write("certs/cert.der", &der_serialized)?; |
| 32 | + fs::write( |
| 33 | + "certs/key.pem", |
| 34 | + &cert.serialize_private_key_pem().as_bytes(), |
| 35 | + )?; |
| 36 | + fs::write("certs/key.der", &cert.serialize_private_key_der())?; |
| 37 | + Ok(()) |
| 38 | +} |
0 commit comments