diff --git a/services/key_enable/src/cert_path_utils.rs b/services/key_enable/src/cert_path_utils.rs index 8bc658f10d9ee23095cc8af8a7896129c268ab65..bb5a09af2cd10f31f3a1daa5caa63dbaf5494251 100644 --- a/services/key_enable/src/cert_path_utils.rs +++ b/services/key_enable/src/cert_path_utils.rs @@ -30,6 +30,7 @@ const TYPE_KEY: &str = "type"; const SUBJECT_KEY: &str = "subject"; const ISSUER_KEY: &str = "issuer"; const MAX_CERT_PATH: &str = "max-certs-path"; +const COMMON_NAME_CHAR_LIMIT: usize = 7; /// profile cert path error pub enum CertPathError { /// cert path add remove error @@ -365,8 +366,14 @@ pub fn common_format_fabricate_name(common_name: &str, organization: &str, email if common_name.len() >= organization.len() && common_name.starts_with(organization) { return common_name.to_string(); } - if common_name.len() >= 7 && organization.len() >= 7 && common_name[0..7] == organization[0..7] { - ret = common_name.to_string(); + let common_name_first_seven_bytes = &common_name.as_bytes()[..common_name.len().min(COMMON_NAME_CHAR_LIMIT)]; + let organization_first_seven_bytes = &organization.as_bytes()[..organization.len().min(COMMON_NAME_CHAR_LIMIT)]; + if common_name.len() >= COMMON_NAME_CHAR_LIMIT && organization.len() >= COMMON_NAME_CHAR_LIMIT { + let common_name_first_seven_bytes = &common_name.as_bytes()[..COMMON_NAME_CHAR_LIMIT]; + let organization_first_seven_bytes = &organization.as_bytes()[..COMMON_NAME_CHAR_LIMIT]; + if common_name_first_seven_bytes == organization_first_seven_bytes { + ret = common_name.to_string(); + } } else { ret = format!("{}: {}", organization, common_name); }