在Java中从X509中提取SubjectAlternativeName

时间:2013-09-12 22:17:44

标签: java ssl x509certificate

我正在从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();

1 个答案:

答案 0 :(得分:3)

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地址,你应该寻找它。)