fix(generate):修复公钥证书无法生成的问题。
This commit is contained in:
parent
bf3add13a3
commit
0e3528baf8
|
@ -4,7 +4,8 @@ use std::path::PathBuf;
|
||||||
use std::{io, path::Path};
|
use std::{io, path::Path};
|
||||||
|
|
||||||
use openssl::bn::BigNumContext;
|
use openssl::bn::BigNumContext;
|
||||||
use openssl::x509::X509;
|
use openssl::hash::MessageDigest;
|
||||||
|
use openssl::x509::{X509NameBuilder, X509};
|
||||||
use openssl::{
|
use openssl::{
|
||||||
asn1::{Asn1Integer, Asn1Time},
|
asn1::{Asn1Integer, Asn1Time},
|
||||||
bn::BigNum,
|
bn::BigNum,
|
||||||
|
@ -33,11 +34,21 @@ pub fn generate_certificate(
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
let rsa = Rsa::generate(key_length)?;
|
let rsa = Rsa::generate(key_length)?;
|
||||||
let private_key = rsa.private_key_to_pem()?;
|
let private_key = rsa.private_key_to_pem()?;
|
||||||
let mut builder = X509Builder::new()?;
|
|
||||||
builder.set_version(version)?;
|
|
||||||
let pkey = PKey::from_rsa(rsa)?;
|
let pkey = PKey::from_rsa(rsa)?;
|
||||||
|
let mut builder = X509Builder::new()?;
|
||||||
builder.set_pubkey(&pkey)?;
|
builder.set_pubkey(&pkey)?;
|
||||||
|
|
||||||
|
let mut x509_name = X509NameBuilder::new()?;
|
||||||
|
x509_name.append_entry_by_text("CN", certificate_name)?;
|
||||||
|
x509_name.append_entry_by_text("C", "CN")?;
|
||||||
|
x509_name.append_entry_by_text("ST", "Hebei")?;
|
||||||
|
x509_name.append_entry_by_text("L", "Shi Jiazhuang")?;
|
||||||
|
x509_name.append_entry_by_text("O", "archgrid.xyz")?;
|
||||||
|
let x509_name = x509_name.build();
|
||||||
|
builder.set_subject_name(&x509_name)?;
|
||||||
|
builder.set_issuer_name(&x509_name)?;
|
||||||
|
builder.set_version(version)?;
|
||||||
|
|
||||||
let not_before = Asn1Time::days_from_now(0)?;
|
let not_before = Asn1Time::days_from_now(0)?;
|
||||||
let not_after = Asn1Time::days_from_now(available_days)?;
|
let not_after = Asn1Time::days_from_now(available_days)?;
|
||||||
builder.set_not_before(¬_before)?;
|
builder.set_not_before(¬_before)?;
|
||||||
|
@ -46,6 +57,8 @@ pub fn generate_certificate(
|
||||||
let sn = Asn1Integer::from_bn(&serial_number)?;
|
let sn = Asn1Integer::from_bn(&serial_number)?;
|
||||||
builder.set_serial_number(&sn)?;
|
builder.set_serial_number(&sn)?;
|
||||||
|
|
||||||
|
builder.sign(&pkey, MessageDigest::sha256())?;
|
||||||
|
|
||||||
let certificate = builder.build();
|
let certificate = builder.build();
|
||||||
|
|
||||||
let store_path = PathBuf::from(storage_path);
|
let store_path = PathBuf::from(storage_path);
|
||||||
|
@ -54,7 +67,8 @@ pub fn generate_certificate(
|
||||||
let cert_path = store_path.clone().join(format!("{}.pem", certificate_name));
|
let cert_path = store_path.clone().join(format!("{}.pem", certificate_name));
|
||||||
let cert_file = File::create(cert_path)?;
|
let cert_file = File::create(cert_path)?;
|
||||||
let mut writer = BufWriter::new(cert_file);
|
let mut writer = BufWriter::new(cert_file);
|
||||||
writer.write_all(&certificate.to_pem()?)?;
|
let cert_data = certificate.to_pem()?;
|
||||||
|
writer.write_all(&cert_data)?;
|
||||||
writer.flush()?;
|
writer.flush()?;
|
||||||
|
|
||||||
let private_key_path = store_path.join(format!("{}.key", certificate_name));
|
let private_key_path = store_path.join(format!("{}.key", certificate_name));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user