相关疑难解决方法(0)

从证书DN中解析CN

首先让我说这是一个美学问题.我已经解决了自己的问题,我只是对更好的方法感到好奇.

所以,我有一个DN证书,如下所示:

CN = Jimmy Blooptoop,OU = Someplace,OU = Employees,DC = Bloopsoft-Inc

现在,我想从中获取CN.在java中,除了使用Xoun9证书中的完整DN而没有使用像bouncy castle这样的第三方库时,没有原生支持可以抓取任何东西 - 我无法使用它.所以我必须解析它,这不是什么大问题.唯一让它有点棘手的事实是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();
Run Code Online (Sandbox Code Playgroud)

我只是好奇是否有看起来不像垃圾的表情.我非常有信心,因为我在阅读了正则表达式的介绍之后就已经解决了这个问题.

java regex

26
推荐指数
4
解决办法
3万
查看次数

如何在SslStream.AuthenticateAsClient期间从X509Certificate对象中提取域名?(.NET4)

我有一个由SslStream.AuthenticateAsClient调用的RemoteCertificateValidationCallback函数,该函数传递给X509Certificate对象.

我想从该证书中提取名称,这样,如果我将该字符串传递给AuthenticateAsClient,它就会通过.(假设没有其他问题.)

(注意:Subject属性包含域名,但它位于"CN = ...,S = ..."等格式化字符串中.)

另请参见:如何从Java中的X509Certificate中提取CN?(问一个类似的Java问题,但我找不到那些答案中提到的类似.NET的类.)

(跟随Eugene的回答.)
我试过这个......

var cert2 = new System.Security.Cryptography.X509Certificates.X509Certificate2();
cert2.Import(certificate.GetRawCertData());
Run Code Online (Sandbox Code Playgroud)

...但是cert2.SubjectName.Name仍然具有CN = etc格式.我做错了吗?

.net c# ssl x509certificate x509

12
推荐指数
1
解决办法
1万
查看次数

在Tomcat中读出传入证书

我使用带有客户端身份验证的tomcat http连接器.如果客户端启动与我的服务器的新连接并发送其证书,我是否可以获取证书并从我的java代码中读取传入证书的公用名.如果有,怎么样?

谢谢阿迪

java ssl tomcat certificate ssl-client-authentication

10
推荐指数
1
解决办法
1万
查看次数

为什么Nginx以相反的顺序提供客户端SSL DN?

我很好奇为什么有些Web服务器(例如Nginx)以相反的顺序提供客户端SSL DN.

Web应用程序将DN发布到Java Web服务,该服务正在尝试创建Java javax.naming.ldap.LdapName.

标准订单(LDAP或X500Name):

"CN=Jimmy Blooptoop,OU=Someplace,OU=Employees,DC=Bloopsoft-Inc"
Run Code Online (Sandbox Code Playgroud)

逆序(OpenSSL Oneline格式)(Nginx返回_ $ ssl_client_s_dn_):

"/DC=Bloopsoft-Inc/OU=Employees/OU=Someplace/CN=Jimmy Blooptoop"
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

哪一个与LDAP RFC匹配?

他们俩都这样?

关于LDAP RFC的说明:

有许多与LDAP相关的RFC:https://www.ldap.com/ldap-specifications-defined-in-rfcs

许多人提到不同的人,这里是对他们的快速历史的尝试:

  • 1993年7月:RFC 1485 - 杰出名称的字符串表示
  • 1995年3月:RFC 1779 - 可分辨名称的字符串表示
  • 1997年12月:RFC 2253 - 轻量级目录访问协议(v3):可分辨名称的UTF-8字符串表示
  • 2002年9月:RFC 3377 - 轻量级目录访问协议(v3):技术规范(更新RFC 2253)
  • 2003年3月:RFC 3494 - 轻量级目录访问协议版本2(LDAPv2)到历史状态(退休RFC 1485,RFC 1779)
  • 2006年6月:RFC 4514 - 轻量级目录访问协议(LDAP):可分辨名称的字符串表示

最新的One,其他人已废弃: RFC 4514:轻量级目录访问协议(LDAP):可分辨名称的字符串表示

Java库:

是否存在来回转换的Java库(从反向转换为非反转)?LdapName抛出InvalidNameException.似乎应该有,倒退格式经常出现.

Java库:

Ngninx备注:

链接:

java openssl ldap nginx spring-ldap

6
推荐指数
1
解决办法
1233
查看次数

获取与证书匹配的所有主机名列表

如何获取与certificate(java.security.cert.X509Certificate)匹配的所有主机名和IP列表,包括主题备用名称?我只发现了javax.net.ssl.HostnameVerifiers的各种实现.

java ssl certificate ssl-certificate

2
推荐指数
1
解决办法
2642
查看次数