使用动态 IP 的 HTTPS

9

我的情况是: 我想在一个未知网络上的设备上运行一个web服务器。从全局IP转发到该设备的端口80或443的请求将被转发到该设备。

该设备定期向网络上的服务器发布其IP地址,并保存在该服务器上。

是否有可能轻松地通过https访问此设备? 当然问题在于,IP地址可能会更改,而SSL证书需要一个主机名。

编辑:该设备没有分配给它的域,我可以用它来获取证书。也许可以使用我拥有的一个域并将其重新路由到动态IP而不更改标头吗? 据我了解,这将使https变得可能。

2个回答

20
SSL证书只与一个IP地址关联的普遍看法是误导性的。SSL证书是为域名而发行的,而非IP地址。IP地址的问题来自于HTTPS协议的细节,即名称解析问题。一个HTTP服务器可以在同一端口和IP地址上为许多不同的域名托管许多不同的网站。它根据HTTP标头知道正在请求哪个站点。

现在,在HTTPS中,服务器需要先协商一个安全的SSL连接,然后再交换任何HTTP标头。因此,问题在于它无法知道应该使用哪个域名的证书来协商安全连接,因为它尚未有机会与客户端交谈并了解其要访问的域名。

实际上,HTTPS协议的较新版本中有用于加密前的名称协商机制,但实际问题是较旧的客户端还不支持它(看着你IE6)。

因此,实际解决方案是为每个HTTPS站点保留一个IP地址和/或端口,因为这样就没有多个名称解析的问题了。一个IP地址/端口仅保留给一个特定的HTTPS站点,进而保留了一个SSL证书。

这意味着,只要您的服务器仅服务于一个HTTPS域名,它的IP地址可以随时更改,那里就没有任何问题。


2
你好,感谢您的回答。我的问题是我没有一个与动态IP相对应的域名。据我所知,这需要在IP更改时更新DNS条目(例如使用DynDNS)。是否可以从Web服务器上的域名重新路由流量到动态IP?这样我就可以为证书使用该域名。 IP将存储在数据库中并定期更新。 - Agent T
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - deceze
您可以为自己的域名获取主机名证书,并使该主机名成为指向DynDNS(或类似服务)主机名的CNAME DNS条目。我以前成功完成过这个操作。 - Bruno
我本来想避免使用DynDns,但似乎这是一个可以接受的解决方案,此外,如果您已经拥有域名和证书,CNAME DNS似乎也是一个不错的选择。不过,如果没有使用DynDns,能够建立到动态IP的加密HTTP连接会更好。 - Agent T
这意味着,只要您的服务器仅为一个HTTPS域名提供服务,其IP地址可以随意更改;这里没有问题。嗯,是指'您的服务器仅提供一个域名作为HTTPS'还是'您的服务器每个域名仅提供一个HTTPS端口'? 英文表述有点问题。 - John Greene
@EgbertS 那是不可能的!... 不过,说真的,我认为我写对了吧? - deceze

2

动态IP地址并不是问题。在SSL证书中,您存储一个静态主机名(domain.com),而不是IP地址。


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