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

Arc*_*rci 10 java ssl https keytool

可能重复:
如何解析SSL证书服务器名称/我可以使用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如何工作以及它所需的值是多少?

谢谢!

Bru*_*uno 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第3.1节中定义:

如果存在类型为dNSName的subjectAltName扩展名,则必须将其用作标识.否则,必须使用证书的Subject字段中的(最具体的)Common Name字段.尽管使用Common Name是现有做法,但不推荐使用它,并且鼓励证书颁发机构使用dNSName.

[...]

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

在一般情况下,不建议(见中提到的问题在证书中使用的IP地址RFC 6125.但是,如果你真的需要,你需要与IP地址的证书是IP地址类型,它可以生成的SAN入门如本答案所述.