java - 主题中带有电子邮件地址的 x509 证书在 java .vs net 中不同

标签 java .net certificate x509 asn.1

我有一个包含多个 Web 应用程序的网站,这些应用程序依赖于最终用户使用其 x509 客户端证书进行身份验证。我们观察到相同的证书在由 .Net 应用程序处理时显示的主题 DN 与由 Java 应用程序处理时不同,此时 DN 包含电子邮件地址属性。

在 .Net 中,我看到服务器变量 CERT_SUBJECT 是这样的:

C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan

在 Java 中,当我探索同一证书(同一浏览器 session )的 x509 证书对象时,主题是:

EMAILADDRESS=rsand@idfconnect.lan, CN=Richard Sand, OU=Test, O=IDFC Dev, L=Wilmington, ST=Delaware, C=US

忽略属性的颠倒顺序(这是一种已知现象),我们遇到的问题是在 Java 中电子邮件地址属性是 EMAILADDRESS 而在 .Net 中是相同的属性显示为 E

进一步挖掘,OpenSSL 显示此输出:

openssl.exe pkcs12 -in my.pfx -info

subject=/C=US/ST=Delaware/L=Wilmington/O=IDFC Dev/OU=Test/CN=Richard Sand/emailAddress=rsand@sidfconnect.lan

而当我在 IE 或 Firefox 证书存储中查看相同的证书时,它们显示 E=,例如:

E = rsand@idfconnect.lan
CN = Richard Sand
OU = Test
O = IDFC Dev
L = Wilmington
S = Delaware
C = US

我知道只是在一些代码中填充以将主题 DN 的一个“解释”更改为另一个似乎微不足道,但问题是我们有两个我们无法更改的 COTS 产品,并且在我们开始破解之前问题 我想了解哪个(或两者都是?)正确,以及是否某层上有什么东西导致了差异。 RFC 似乎都引用了 EMAILADDDRRESS,但如前所述,IE 和 FF 以及 .Net 应用程序似乎都在使用“E”

谁能解释为什么会这样?

谢谢!

最佳答案

EEMAILADDRESS 是同义词。

当电子邮件地址嵌入到主题识别名中时(已弃用,应使用主题替代名称扩展),它使用 PCKS#9 中定义的标识符 pkcs-9-at-emailAdress( RFC2985 ).

这意味着 emailAddress 不是用字符串 EEMAILADDRESS 存储的,而是作为标识符 1.2.840.113549.1.9 的 ASN.1 结构存储的。 1,.NET、Java 或 IE 所显示的是此属性的表示。

如果要检查证书的主题是否匹配,则需要比较每个 RDN 字段,而不是字符串。

关于java - 主题中带有电子邮件地址的 x509 证书在 java .vs net 中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546892/

相关文章:

security - 如何检查是否启用了 Authenticated Origin Pulls?

c# - 如何在自定义验证中调用默认 ServerCertificateValidationCallback?

java - 如何从另一个 Web 应用程序访问数据

c# - 保存时如何自动更新 Entity Framework 4 中实体的 Modified 属性?

c# - 使用不在证书存储区中的客户端证书

c# - 寻找错误版本的 Newtonsoft.Json.dll 的程序集

.NET 属性 : Why does GetCustomAttributes() make a new attribute instance every time?

java - BufferedImage 到 2D 数组 : Finding pixelated edges

java - 使用 JSoup 和 Android Studio 从网站或 rss feed 收集信息

java - 如何从 fragment 中禁用 Activity 的抽屉导航