This question already has answers here:
How to extract CN from X509Certificate in Java?
(19个回答)
3年前关闭。
首先,我要说这是一个美学问题。我已经解决了自己的问题,我只是对更好的解决方法感到好奇。
因此,我有一个证书DN,如下所示:
CN = Jimmy Blooptoop,OU =某个地方,OU =员工,DC = Bloopsoft-Inc
现在,我想从中获取CN。在Java中,没有 native 支持就可以从X509证书中获取除完整DN之外的任何内容,而无需使用一些诸如弹力城堡之类的第三方库-我无法使用。因此,我必须将其解析出来,这不是什么大问题。唯一使它有些棘手的是,CN不会总是被格式化为
在阅读了有关正则表达式的内容之后,我写了以下内容,它们足够好用:
我只是好奇是否有一些看起来不像废话的表情。我相当有信心,自从我阅读了正则表达式的简介后就可以解决了。
它不是最漂亮的界面,因为缺少诸如
(19个回答)
3年前关闭。
首先,我要说这是一个美学问题。我已经解决了自己的问题,我只是对更好的解决方法感到好奇。
因此,我有一个证书DN,如下所示:
CN = Jimmy Blooptoop,OU =某个地方,OU =员工,DC = Bloopsoft-Inc
现在,我想从中获取CN。在Java中,没有 native 支持就可以从X509证书中获取除完整DN之外的任何内容,而无需使用一些诸如弹力城堡之类的第三方库-我无法使用。因此,我必须将其解析出来,这不是什么大问题。唯一使它有些棘手的是,CN不会总是被格式化为
<first name> <last name>
。通常,它实际上通常是<last name>, <first name> <middle initial>
。因此,在上面的示例中,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可能具有的奇怪功能的麻烦。关于java - 从证书DN中解析出CN ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7933468/
10-12 04:15