创建证书时使用IP地址作为主机名?(HTTPS主机名错误:应该是<ipAddress>)

13

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

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

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

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

谢谢!


1
对于那些给我点踩的人:按名称查找 根据定义 是与运行时相关的 - 在这种情况下是针对Java运行时的 - 因此是相关主题。如果这个问题被点踩,那么离题可能不是一个好理由。 - Maarten Bodewes
1个回答

27

证书中需要放置的标识(identity)应该是您通过URL所寻找到的那个。例如,如果您使用了https://www.example.net,您的证书需要对www.example.net有效;如果您使用了https://10.0.0.1/,您的证书需要对10.0.0.1有效。

证书Subject DN中的Common Name RDN通常仅在以下情况下使用:(a) 没有Subject Alternative Name DNS条目,且(b) 寻找的是主机名,而不是IP地址。这在RFC 2818 Section 3.1中有定义:

如果存在类型为dNSName的subjectAltName扩展名,则必须将其用作标识。否则,必须使用证书主体字段中最具体的Common Name字段作为标识。虽然使用Common Name是现有的惯例,但它已经被弃用,建议认证机构使用dNSName替代。

[...]

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

通常不建议在证书中使用IP地址(请参见RFC 6125中提到的问题)。但是,如果确实需要使用IP地址,则需要生成一个具有IP地址类型的SAN条目的证书,可以按照此答案中所述进行生成。


哎呀,我的SSL有点生锈了,我给你点赞吧 :) - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接