创建证书时IP地址作为主机名(CN)? (HTTPS主机名错误:应该是)

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

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

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

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

谢谢!

您需要在证书中添加的身份必须是您通过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扩展名,则必须将其用作标识。 否则,必须使用证书的Subject字段中的(最具体的)Common Name字段。 虽然使用公用名是现有做法,但不推荐使用它,并且鼓励证书颁发机构使用dNSName。

[…]

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

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