From 14081713dac0795f492a3cc48240bcc9db478884 Mon Sep 17 00:00:00 2001 From: yeyuning Date: Wed, 18 Oct 2023 17:26:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yeyuning Change-Id: Id6a0608d1181cec12e51bab1475e103a32bc9bff --- services/key_enable/src/cert_chain_utils.rs | 50 ++++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/services/key_enable/src/cert_chain_utils.rs b/services/key_enable/src/cert_chain_utils.rs index d770547..cda3136 100644 --- a/services/key_enable/src/cert_chain_utils.rs +++ b/services/key_enable/src/cert_chain_utils.rs @@ -108,6 +108,46 @@ pub fn load_pem_cert_from_json_file(file_path: &str, member_names: &[&str]) -> V cert_vec.join("\n").into_bytes() } +fn fabricate_name(subject: &str) -> String { + let mut common_name = String::new(); + let mut orgnazition = String::new(); + let mut email = String::new(); + let mut ret = String::new(); + + let parts: Vec<&str> = subject.split(',').collect(); + for part in parts { + let inner: Vec<&str> = part.split('=').collect(); + if inner.len() < 2 { + continue; + } + let inner_trimmed: Vec<&str> = inner.iter().map(|s| s.trim()).collect(); + if inner_trimmed[0] == "CN" { + common_name = inner_trimmed[1].into(); + } else if inner_trimmed[0] == "O" { + orgnazition = inner_trimmed[1].into(); + } else if inner_trimmed[0] == "E" { + email = inner_trimmed[1].into(); + } + } + if !common_name.is_empty() && !orgnazition.is_empty() { + if common_name.len() >= 6 + && orgnazition.len() >= 6 + && common_name[0..6] == orgnazition[0..6] + { + ret = common_name; + } else { + ret = orgnazition + ": " + &common_name; + } + } else if !common_name.is_empty() { + ret = common_name; + } else if !orgnazition.is_empty() { + ret = orgnazition; + } else if !email.is_empty() { + ret = email; + } + ret +} + /// load cert path from json file pub fn load_cert_path_from_json_file(cert_paths: &mut Vec, file_path: &str) { let value = match JsonValue::from_file(file_path) { @@ -165,8 +205,14 @@ pub fn load_cert_path_from_json_file(cert_paths: &mut Vec, file_ Err(_) => continue, }; - let signing_cstring = CString::new(signing.as_str()).expect("app-signing-cert is invalid"); - let issuer_cstring = CString::new(issuer.as_str()).expect("issuer-ca is invalid"); + let f_signing = fabricate_name(signing); + let f_issuer = fabricate_name(issuer); + if f_signing.is_empty() || f_issuer.is_empty() { + continue; + } + + let signing_cstring = CString::new(f_signing.as_str()).expect("app-signing-cert is invalid"); + let issuer_cstring = CString::new(f_issuer.as_str()).expect("issuer-ca is invalid"); cert_paths.push(TrustAppSource { signing: signing_cstring, issuer: issuer_cstring, -- Gitee