从证书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

回到顶部