diff --git a/src/cert.rs b/src/cert.rs index 44429d7..6b6f7cf 100644 --- a/src/cert.rs +++ b/src/cert.rs @@ -13,10 +13,15 @@ pub struct Cert { } pub fn load_certificate(cert_fn: &str, key_fn: &str) -> Result<(Certificate, String), String> { - let cert_pem = fs::read_to_string(cert_fn).map_err(|e| format!("Read file: {} failed: {}", cert_fn, e))?; - let key_pem = fs::read_to_string(key_fn).map_err(|e| format!("Read file: {} failed: {}", key_fn, e))?; - let key_pem = parse_pkcs8(&key_pem); - let key_pair = KeyPair::from_pem(&key_pem).map_err(|e| format!("Parse key: {} failed: {}", key_fn, e))?; + let cert_pem = fs::read_to_string(cert_fn) + .map_err(|e| format!("Read file: {} failed: {}", cert_fn, e))?; + + let key_pem = fs::read_to_string(key_fn) + .map_err(|e| format!("Read file: {} failed: {}", key_fn, e))?; + let key_pem = resolve_ec_pkcs8(&key_pem); + let key_pair = KeyPair::from_pem(&key_pem) + .map_err(|e| format!("Parse key: {} failed: {}", key_fn, e))?; + // 底层逻辑限制,P256 与 SHA256 搭配,P384 与 SHA384 搭配 let certificate_params = CertificateParams::from_ca_cert_pem(&cert_pem, key_pair) .map_err(|e| format!("Cert and keypair match failed: {}", e))?; @@ -51,7 +56,7 @@ macro_rules! ecc_private_key_convert { }}; } -fn parse_pkcs8(pem: &str) -> String { +fn resolve_ec_pkcs8(pem: &str) -> String { // KeyPair only support PKCS#8 private key with public key, though public key is optional ecc_private_key_convert!(p256, pem); ecc_private_key_convert!(p384, pem);