我正在从Java中的X509证书中提取SubjectAlternativeName,它似乎返回了类似的内容
[2, domain.example.com ]
这是标准吗?值中的
2
代表什么?目前,我仅解析2个,但是我不想部署代码并发现2
不是证书的标准输出。这是我的代码
X509Certificate[] clientCert = (X509Certificate[]) req
.getAttribute("javax.servlet.request.X509Certificate");
senderDomain = clientCert[0].getSubjectAlternativeNames().toArray()[0]
.toString();
最佳答案
这记录在X509Certificate.getSubjectAlternativeNames()
中(也来自X.509 specification, section 8.3.2.1):
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER}
因此2是DNS名称(验证服务器证书时的主机名),这很常见。 (如果您希望使用IP地址,则应该使用7。)