13

可能重复:
如何解析 SSL 证书服务器名称/我可以使用 keytool 添加替代名称吗?

我创建了一个证书并将 CN 设置为我的服务器的 IP 地址,格式为 xxx.xxx.xxx.xxx。但是当我尝试在 Java 中运行我的代码时,我收到一条HTTPS hostname wrong: should be <xxx.xxx.xxx.xx>错误消息。

有什么问题?我确定我正在连接到正确的 IP 地址。但是,我没有在证书上指定服务器的端口。为 CN 提供值时是否需要端口?但我使用的是 https 的默认端口,即 8443。此外,我尝试将我的 CN 从服务器的 IP 地址更改为“localhost”。之后它就起作用了。我在想如果 CN 部分不接受 IP 地址作为值?

您能否解释一下 CN 的工作原理以及它所需的值是什么?

谢谢!

4

1 回答 1

27

您需要放入证书中的身份必须是您通过 URL 查找的身份。例如,如果您使用的是https://www.example.net,您的证书需要对www.example.net;有效。如果您正在使用https://10.0.0.1/,您的证书需要对10.0.0.1.

证书的主题 DN 中的通用名称 RDN 通常仅在 (a) 没有主题备用名称 DNS 条目和 (b) 它正在寻找主机名而不是 IP 地址时使用。这在RFC 2818 第 3.1 节中定义:

如果存在 dNSName 类型的 subjectAltName 扩展,则必须将其用作身份。否则,必须使用证书主题字段中的(最具体的)通用名称字段。尽管使用通用名称是现有的做法,但它已被弃用,并且鼓励证书颁发机构使用 dNSName 代替。

[...]

在某些情况下,URI 被指定为 IP 地址而不是主机名。在这种情况下,iPAddress subjectAltName 必须出现在证书中,并且必须与 URI 中的 IP 完全匹配。

一般来说,不建议在证书中使用 IP 地址(请参阅RFC 6125中提到的问题。但是,如果您确实需要,则需要一个 IP 地址为 IP 地址类型的 SAN 条目的证书,您可以生成如本答案所述。

于 2012-07-29T16:13:33.083 回答