创建证书时将 IP 地址作为主机名 (CN)?(HTTPS主机名错误:应<ip地址>)

2022-09-04 07:26:32

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

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

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

您能解释一下CN是如何工作的,以及它所需的值是什么吗?

谢谢!


答案 1

您需要放入证书中的标识必须是您通过 URL 查找的标识。例如,如果您使用的是 ,则证书的有效期必须为 ;如果使用的是 ,则证书必须对 有效。https://www.example.netwww.example.nethttps://10.0.0.1/10.0.0.1

证书的使用者 DN 中的公用名 RDN 通常仅在以下情况下使用:(a) 没有使用者备用名称 DNS 条目,并且 (b) 它正在查找主机名,而不是 IP 地址。这在 RFC 2818 第 3.1 节中定义:

如果存在 dNSName 类型的主题AltName扩展,则必须将其用作标识。否则,必须使用证书的“使用者”字段中的(最具体的)公用名字段。尽管使用公用名是现有做法,但它已弃用,并鼓励证书颁发机构改用 dNSName。

[...]

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

通常,不建议在证书中使用 IP 地址(请参阅 RFC 6125 中提到的问题。但是,如果确实需要,则需要一个证书,其中 IP 地址是 IP 地址类型的 SAN 条目,您可以按照此答案中的说明生成该证书


答案 2