我们有一些 Windows 服务器位于防火墙后面,无法访问互联网。其中一些是 Web 服务器(用于内部网),一些是应用程序服务器、数据库、文件等。
一些应用程序需要登录,并且由于缺少 SSL 证书,浏览器每当在页面上看到输入字段时就会向用户显示警告。
由于缺少 SSL 证书,我们无法将 Web 服务器配置为使用 HTTPS。
我的问题是:有没有办法将服务器配置为使用 HTTPS,即使它无法访问互联网?
如果是,那么如何在其上安装证书?我知道我必须从某个地方购买证书,但如何在所有服务器上安装它?
在哪里可以阅读有关适用于我们的设置的更多信息?
答案1
当您可以控制连接到您的服务器的客户端时,一个合适的解决方案是设置自签名的内部证书颁发机构。
理论上,您要做的就是设置一个根证书,该证书应保持安全且处于离线状态。在此基础上,您将创建子 CA 证书,这些证书应用于签署实际的服务器证书。然后,您需要将适当的公钥部署到所有连接到内部服务的计算机,以使信任关系发挥作用。
在 Windows 环境中,Microsoft 的文档可能会有所帮助:https://docs.microsoft.com/en-us/windows-server/networking/core-network-guide/cncg/server-certs/server-certificate-deployment-overview。
在更开放的环境中,有几种方法可以进行,通常基于 OpenSSL 和补充工具。网络搜索引擎是你的好帮手。
答案2
答案3
您有多种选择。
要获得“真正的”证书(即浏览器默认信任的证书),您需要验证对域的访问权限。这可以通过以下三种方式之一完成:
- 将 CA 提供的文件放在网络服务器上,CA 会检查该文件是否存在,从而确认您有权访问该服务器。这可能是最常见的方法,但由于您不是公开的,因此不适合您。
- 通过添加 CA 向您的 DNS 提供的条目,表明您有权更改 DNS 记录,从而表明您实际上有权访问该域。
- 回复发送至选定的电子邮件地址之一。这表明您有权访问主邮件服务器,因此必须有权访问域。
因此,您可以使用 2 或 3 来获取“真实”证书。最受欢迎的免费证书颁发机构 Let's Encrypt 仅支持方法 1 和 2,并且 2 依赖于您的 DNS 是否具有自动 API 来添加条目,因此并非总是一种选择。其他 CA 将支持所有 3 种方法并指导您如何执行此操作 - 但通常会收取服务费,因为它本质上是手动的。
另一个选择是获取通配符证书(例如*.example.com
),该证书可用于任何内部地址(例如internal.example.com
)。此通配符证书的确认方式与上述类似(尽管某些 CA 可能不允许所有这些通配符证书验证方法。例如,Let's Encrypt 仅允许通过基于 DNS 的验证颁发通配符证书)。如果您获得通配符证书,则允许在该域下的任何服务器上重复使用(例如intranet.example.com
、dev.example.com
等)。如果与多个服务器/所有者/部门共享密钥,这当然还有其他风险。
最后,正如其他人提到的,您可以创建一个内部证书颁发机构来创建自签名证书。这些将不是默认情况下,浏览器无法识别它们,因为它们不是由公认的“真实”CA 颁发的。但是,您可以将 CA 根密钥添加到计算机中,以便识别它。这通常是企业环境的一个好选择,在企业环境中,您可以通过策略确保此根密钥安装在所有设备上,因此它实际上就像一个真正的证书一样。详细介绍如何设置它超出了本答案的范围...