feat: notworking

This commit is contained in:
2024-03-24 23:54:27 +08:00
parent 9696af7a50
commit 7281637722
5 changed files with 300 additions and 8 deletions

View File

@@ -8,9 +8,12 @@ use structopt::StructOpt;
mod app;
mod service;
mod main2;
pub fn main() {
init_logger();
main2::test_main();
panic!("END");
let opt = Some(Opt::from_args());
let mut my_server = Server::new(opt).unwrap();

64
src/main2.rs Normal file
View File

@@ -0,0 +1,64 @@
use std::fs;
use rcgen::{BasicConstraints, Certificate, CertificateParams, DnType, DnValue::PrintableString, ExtendedKeyUsagePurpose, IsCa, KeyPair, KeyUsagePurpose};
use time::{Duration, OffsetDateTime};
/// Example demonstrating signing end-endity certificate with ca
pub fn test_main() {
let ca_pem = fs::read_to_string("__ignore_intermediate_cert.pem").unwrap();
let key_pem = fs::read_to_string("__ignore_intermediate_pri_key.pem").unwrap();
let k = KeyPair::from_pem(&key_pem).unwrap();
// let k = KeyPair::from_pem_and_sign_algo(&key_pem, &PKCS_ECDSA_P384_SHA384).unwrap();
let certificate_params = CertificateParams::from_ca_cert_pem(&ca_pem, k).unwrap();
let ca = Certificate::from_params(certificate_params).unwrap();
// let ca = new_ca();
let end_entity = new_end_entity();
let end_entity_pem = end_entity.serialize_pem_with_signer(&ca).unwrap();
println!("directly signed end-entity certificate: {end_entity_pem}");
let end_entity_key_pem = end_entity.serialize_private_key_pem();
println!("directly signed end-entity key: {end_entity_key_pem}");
let ca_cert_pem = ca.serialize_pem().unwrap();
println!("ca certificate: {ca_cert_pem}", );
}
fn new_ca() -> Certificate {
let mut params = CertificateParams::new(Vec::default());
let (start, end) = validity_period();
params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained);
params.distinguished_name.get(&DnType::CommonName);
params.distinguished_name.push(DnType::CommonName, "Hatter Test CA");
params.distinguished_name.push(DnType::CountryName, PrintableString("CN".into()));
params.distinguished_name.push(DnType::OrganizationName, "Hatter Ink");
params.key_usages.push(KeyUsagePurpose::DigitalSignature);
params.key_usages.push(KeyUsagePurpose::KeyCertSign);
params.key_usages.push(KeyUsagePurpose::CrlSign);
params.not_before = start;
params.not_after = end;
Certificate::from_params(params).unwrap()
}
fn new_end_entity() -> Certificate {
let name = "demo.example.com";
let mut params = CertificateParams::new(vec![name.into()]);
let (start, end) = validity_period();
params.distinguished_name.push(DnType::CommonName, name);
params.use_authority_key_identifier_extension = true;
params.key_usages.push(KeyUsagePurpose::DigitalSignature);
params.is_ca = IsCa::NoCa;
params.extended_key_usages.push(ExtendedKeyUsagePurpose::ServerAuth);
params.extended_key_usages.push(ExtendedKeyUsagePurpose::ClientAuth);
params.not_before = start;
params.not_after = end;
Certificate::from_params(params).unwrap()
}
fn validity_period() -> (OffsetDateTime, OffsetDateTime) {
let start = OffsetDateTime::now_utc().checked_sub(Duration::hours(1)).unwrap();
let end = OffsetDateTime::now_utc().checked_add(Duration::days(90)).unwrap();
(start, end)
}