我刚刚尝试购买 Comodo Positive SSL,但由于不支持公共 IP 地址而被拒绝,而他们只支持域名。
是否有人知道支持公共 IP 地址而不是域名的 SSL 证书提供商?
我的公司有一台由网络托管公司托管的专用服务器,用于为多个项目(多个客户)运行错误跟踪器。由于它仅用于错误跟踪器,因此我们不需要域名(我们的客户通过在浏览器中输入公共 IP 来访问它)。
答案1
我认为你可以做到这一点,但不能按照你尝试的方式去做。
SSL 证书是将公共加密密钥绑定到包含 CN(通用名称)元素的 X.500 结构的声明;签名证书是这样一种证书,其中绑定由第三方认证机构使用最终用户已知的公钥(浏览器内部的认证机构 (CA) 证书堆栈)进行可验证的认证。
当您使用浏览器访问 SSL 安全的网站时,浏览器就会获知签名的 CN。 浏览器选择如何处理它取决于浏览器。 据我所知,浏览器会将其与请求的主机名进行比较,如果不同,则会出错(或者如果该认证绑定经不起分析,例如浏览器不知道签名证书或绑定已过期,但这是另一个问题)。原则上没有什么可以阻止你获得公开签名的证书,其中 CN 是 IP 地址而不是 FQDN(完全合格域名)[1],但是这不会神奇地让浏览器将 CN 与 IP 地址进行比较,而不是与请求的主机名进行比较。
我认为解决问题的最简单方法是启动自己的 CA,这很容易做到,并且有很多公共教程;其中一个是这里。一旦您的最终用户将您的 CA 导入他们的浏览器,您颁发的所有证书都将被接受为权威证书。
然后,您可能遇到第二个问题,即您想在单个 IP 地址上运行大量 NameVirtualHost 站点。这在历史上一直是无法克服的,因为(与 TLS 不同)SSL 协商在连接上先于其他任何操作发生;也就是说,嵌入在证书中的 CN 会被客户端知晓并使用前客户端能够说出他们正在尝试连接的主机。
最近,似乎引入了一个名为 SNI(服务器名称指示)的协议扩展,它允许客户端和服务器在出示 SSL 证书之前指示它们想要执行一些主机名操作,从而允许服务器提供一组证书中的正确证书。显然,这需要 apache 2.2.10、足够新的 OpenSSL 版本,以及(重要的) 客户端支持。
因此,如果我必须做您正在尝试做的事情,我会考虑铸造自己的 CA 证书,告诉我的最终用户他们必须使用支持 SNI 的浏览器并导入我的 CA 根证书,并为每个 bugtrack 站点剪切和签署我自己的 SSL 证书。
[1] 好吧,你可能还没找到人来做这件事,但这是一个实施细节。我想说的是,即使你找到了,也无法解决你的问题。
答案2
我知道有一个根证书颁发机构,它已预先填充了所有主流浏览器和在公共 IP 地址上颁发 SSL 证书:查看全球标志。它们读出 RIPE 信息来验证您的证书请求,因此您可能需要首先检查 RIPE 条目是否以正确的名称颁发。
关于此条目收到的反馈:
是的,最好购买域名并在该 CN 上颁发 SSL 证书。它也比上面的 GlobalSign 选项便宜。
但在某些情况下,使用公共 IP 作为 CN 的 SSL 证书很有用。许多互联网提供商和政府会根据 DNS 基础设施屏蔽不受欢迎的网站。如果您提供的网站可能会被屏蔽,例如出于政治原因,那么让该网站通过其公共 IP 地址访问是一个不错的选择。同时,您将要想要为这些用户加密流量,并且您不希望非技术用户费力点击浏览器的安全异常警告(因为证书的 CN 与实际输入的不匹配)。让他们安装您自己的根 CA 更加麻烦,也不现实。
答案3
继续购买域名。它们很便宜,不要再便宜了。你只需要一个。甚至可能只需设置 bugtracker.yourcompany.com。
然后,为每个 bugtracker 设置一个子域名。为每个子域名获取一个 SSL 证书。由于您似乎特别不愿意花钱,因此您想要合作的公司名为 StartSSL。
您想要使用它们的原因是(除了受到主流浏览器的信任之外)它们的证书价格不贵。最基本的证书真的、老实说,完全免费。它们会验证您的身份,然后让您颁发所需的证书数量。如果您想要更高级的证书(通常要花费数百美元),您需要花费大约 50 美元,为期 2 年,以支持单个 IP 上的多个域的 SSL。
它们的价格非常便宜。它们颁发的是真正的证书,受到客户浏览器的信任,而不是像其他地方那样提供 90 天的试用期。