从证书DN中解析出CN
首先,我要说这是一个美学问题。我已经解决了自己的问题,只是对更好的解决方法感到好奇。
因此,我有一个证书DN,如下所示:
CN = Jimmy Blooptoop,OU =某个地方,OU =员工,DC = Bloopsoft-Inc
现在,我想从中获取CN。在Java中,没有本机支持就可以从X509证书中获取除完整DN之外的任何内容,而无需使用诸如充气城堡之类的第3方库-
我无法使用。因此,我必须将其解析出来,这不是什么大问题。唯一使它有些棘手的是,CN不一定总是被格式化为<first name> <lastname>
。通常,实际上是<last name>, <first name> <middleinitial>
。因此,在上面的示例中,CN可以是Jimmy Blooptoop或Blooptoop,Jimmy J(当然是Joop的缩写)。
在阅读了有关正则表达式的内容之后,我编写了以下内容,它们足够好用:
Matcher m = Pattern.compile("CN=[A-Za-z]*[, ]*[ A-Za-z]*").matcher(dn);if (m.find())
cn = m.group();
我只是好奇是否有一些看起来不像废话的表情。我很自信,自从我阅读了正则表达式的简介后就可以解决这个问题。
回答:
怎么javax.naming.ldap.LdapName
样
String dn = "CN=Jimmy Blooptoop,OU=Someplace,OU=Employees,DC=Bloopsoft-Inc";LdapName ln = new LdapName(dn);
for(Rdn rdn : ln.getRdns()) {
if(rdn.getType().equalsIgnoreCase("CN")) {
System.err.println("CN is: " + rdn.getValue());
break;
}
}
它不是最漂亮的界面,因为缺少一些类似的东西,LdapName#getByType(String)
但是它使您不必考虑DN可能具有的奇怪功能。
以上是 从证书DN中解析出CN 的全部内容, 来源链接: utcz.com/qa/432582.html