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

09-30 09:48