可能重复:
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的工作原理以及它所需的值是什么?
谢谢!
答案 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。
中的描述生成