我们在使用SSL保护内部网/互联网网站时遇到问题 我们事先无法知道合格的域名。
基本上,我正在尝试制作一个将安装在网络服务器上的程序 在我的直接控制之外,可通过内部或互联网访问。在任一情况下 我希望它通过SSL(https)安全。要做到这一点,我想包括和 在目标计算机上安装SSL证书。我的安装程序已完全预先打包 并且不应该要求我的任何特定的期间或安装后干预 结束。问题是,我无法提前知道目标机器的名称或域名 名称,所以我可以告诉SSL连接将返回警告(或 更糟糕的?)访问时,因为我包含的证书将(必须)有不同的 名字就在上面。
我真的想避免这些警告,但我仍然希望保持安全。在那儿 在没有域的情况下安装没有证书警告的SSL连接的任何方法 提前知道名字?
感谢大家给予的任何帮助。
答案 0 :(得分:9)
你想做什么是不可能的。这就是原因。
证书将包含一组名称(通用名称,可能还包括主题备用名称,可能包括通配符名称)。
客户端的Web浏览器将执行以下操作:
因此,您需要一个证书,其中包含将使用该应用程序的确切域名(或与确切域名匹配的通配符)。并且证书需要在网站的确切域名被知晓的同时或之后可用,并且不能在任何早期提供。
您似乎误以为证书可以“创建”或“安装”SSL连接。那是错误的。 Web服务器 - Apache,IIS,Nginx,LigHTTPD或您碰巧使用的任何一个 - 是了解如何实现SSL连接的每个方面的程序。证书只是一个文件,Web服务器发送给客户端,甚至没有打开或以任何方式使用。
此外,要分发的Web应用程序的作者不负责创建或分发证书,并且不应该误解他负责。只有网站维护者应负责获取其网站的证书。正如另一个人所说,在您的安装过程中或者在安装后的过程中,您可能会要求安装webapp的人员提供证书。但这是你能做的最好的事情。
答案 1 :(得分:2)
您可以做的最好的事情是购买通配符SSL证书 - 但是等等,这不是您的想法。您仍需要提前知道二级域名(TLD为“.com”)。您可以有效地要求提供涵盖* .foo.com的证书 - 然后将涵盖任何网站,a.foo.com,b.foo.com。当然,这些证书比FQDN证书更昂贵,因为你是用一些额外的硬币来做bug。
-Oisin
答案 2 :(得分:1)
每个网站都应拥有自己的SSL证书。为什么不提示用户在安装期间提供证书文件?
答案 3 :(得分:0)
在大多数(如果不是全部)情况下,SSL证书与Web服务器(apache,IIS等)相关联,并且不属于您的应用程序。由Web服务器的管理员来安装证书,而不是您作为该程序的作者。
如果您的安装程序确实能够修改Web服务器配置,并且您愿意让它使用自签名证书,则可以编写证书的脚本以允许输入域名。但是,我觉得这并不适合你。此外,自签名证书通常会导致证书警告。
答案 4 :(得分:0)
如果我理解正确,现在可能有解决方案。但是,如果您无法控制从安装程序的Web服务器(通过其他人提及)指定哪些SSL证书,则此解决方案将无法帮助您。如果您的程序本身包含Web服务器,则不会出现此问题。
如果您从受信任的https网站开始,则可以对运行应用程序的Web服务器进行跨域TLS(SSL)XmlHttpRequests。使用opensource Forge项目可以实现这一点。该项目使用用JavaScript编写的TLS实现和一个小的Flash swf来处理跨域请求。您的程序需要提供XML Flash策略文件,该文件授予受信任的网站访问运行该应用程序的Web服务器的权限。
您的程序还需要生成自签名SSL证书并将其上传到受信任的网站。从那里,每个程序的证书都可以通过JavaScript TLS实现包含在内。或者,您可以让您的程序上传其证书,由您创建的CA签名,使用适合您使用的通用或主题替代名称(不必是域名)。然后,您可以使用JavaScript信任CA证书,并在每个证书上查找正确的名称。
有关详细信息,请查看github上的Forge项目:
http://github.com/digitalbazaar/forge/blob/master/README
最后的博客文章链接提供了有关其工作原理的更深入信息。