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

主题中包含电子邮件地址的x509证书在java.vs.net中不同,java,.net,certificate,x509,asn.1,Java,.net,Certificate,X509,Asn.1,我有一个包含多个web应用程序的网站,它依赖于最终用户使用x509客户端证书进行身份验证。我们注意到,当由.Net应用程序处理同一证书时,该证书显示的主题DN与由Java应用程序处理时(当DN包含电子邮件地址属性时)显示的主题DN不同 在.Net中,我看到服务器变量CERT_SUBJECT如下: C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan 在Java中,

我有一个包含多个web应用程序的网站,它依赖于最终用户使用x509客户端证书进行身份验证。我们注意到,当由.Net应用程序处理同一证书时,该证书显示的主题DN与由Java应用程序处理时(当DN包含电子邮件地址属性时)显示的主题DN不同

在.Net中,我看到服务器变量CERT_SUBJECT如下:

C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan
在Java中,当我探索同一证书(同一浏览器会话)的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似乎都引用了EMAILADDRRESS,但正如所说的,IE和FF以及.Net应用程序似乎都在使用“E”

有人能解释为什么会这样吗


谢谢

E
EMAILADDRESS
是同义词

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

这意味着emailAddress不是以字符串
E
emailAddress
存储的,而是以标识符
1.2.840.113549.1.9.1
的ASN.1结构存储的,而.NET、Java或IE显示的是此属性的表示


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

正如@pedrofb在其回答中提到的
E
EmailAddress
是同义词。每个平台可以指定自己的OID翻译。至于主题,它们并非完全不同。只是其中一个顺序相反。太好了,谢谢你的回答,这很有意义,让我有信心对其中一个进行规范化(正如我所说的,我实际上无法修改后端应用程序,这确实是罪魁祸首,因为它配置了一个正则表达式来匹配字符串,并且没有查看ASN.1值)。很高兴提供帮助。当你有足够的声誉时,考虑把答案标记为正确或赞成。