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

时间:2012-07-29 11:05:14

标签: java ssl https keytool

  

可能重复:
  How are SSL certificate server names resolved/Can I add alternative names using 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的工作原理以及它所需的值是什么?

谢谢!

1 个答案:

答案 0 :(得分:25)

您需要在证书中添加的身份必须是您通过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 Section 3.1

中定义
  

如果存在类型为dNSName的subjectAltName扩展名,则必须将其用作标识。否则,(最具体)共同   必须使用证书的“主题”字段中的名称字段。   虽然使用通用名称是现有的做法,但确实如此   不推荐使用,并鼓励认证机构使用   而是dNSName。

     

[...]

     

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

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

中的描述生成