CA
This commit is contained in:
32
protocol/gurtca/src/crypto.rs
Normal file
32
protocol/gurtca/src/crypto.rs
Normal file
@@ -0,0 +1,32 @@
|
||||
use anyhow::Result;
|
||||
use openssl::pkey::PKey;
|
||||
use openssl::rsa::Rsa;
|
||||
use openssl::x509::X509Req;
|
||||
use openssl::x509::X509Name;
|
||||
use openssl::hash::MessageDigest;
|
||||
|
||||
pub fn generate_key_and_csr(domain: &str) -> Result<(String, String)> {
|
||||
let rsa = Rsa::generate(2048)?;
|
||||
let private_key = PKey::from_rsa(rsa)?;
|
||||
|
||||
let mut name_builder = X509Name::builder()?;
|
||||
name_builder.append_entry_by_text("C", "US")?;
|
||||
name_builder.append_entry_by_text("O", "Gurted Network")?;
|
||||
name_builder.append_entry_by_text("CN", domain)?;
|
||||
let name = name_builder.build();
|
||||
|
||||
let mut req_builder = X509Req::builder()?;
|
||||
req_builder.set_subject_name(&name)?;
|
||||
req_builder.set_pubkey(&private_key)?;
|
||||
req_builder.sign(&private_key, MessageDigest::sha256())?;
|
||||
|
||||
let csr = req_builder.build();
|
||||
|
||||
let private_key_pem = private_key.private_key_to_pem_pkcs8()?;
|
||||
let csr_pem = csr.to_pem()?;
|
||||
|
||||
Ok((
|
||||
String::from_utf8(private_key_pem)?,
|
||||
String::from_utf8(csr_pem)?
|
||||
))
|
||||
}
|
||||
Reference in New Issue
Block a user