这个问题已经被问过好几次了,我将链接几个:
- https://superuser.com/questions/791015/https-over-private-network
- https://stackoverflow.com/questions/616055/https-certificate-for-internal-use
- https://stackoverflow.com/questions/2676238/ssl-signed-certificates-for-internal-use
- 我可以购买签名有效的证书供内部使用吗?
然而,这些都是老问题,我知道,至少在某些方面,提供的答案已经过时了。我正在提供我的研究,希望我能找出它的哪些部分已经过时,哪些部分仍然很好。我正在寻找现代答案。
这个问题很简单,但情况就是这样。我有访问敏感信息的网络服务(从角度来看:这对我们的公司和我们的客户都不利,但可能不会危及任何一方的生命)。我想提供对这些系统的轻松访问,但安全性显然很重要。(其中一些服务是通过非浏览器客户端访问的,如 Web 服务。有些只是人类在现代浏览器中使用的网页。)
为此,我们保持最重要的服务只能在内部访问。这样,攻击者 a) 不太可能意外发现它们,并且 b) 有一个额外的障碍需要克服。
然而,“深度安全”建议我们也在内部加密流量。这使得网络内部的人更难以随意从网络上嗅出密码。
本着“做我的功课”的精神,我收集了几种选择,有些不如其他选择。我不完全确定其中哪些现在是可行的,因为我知道一些规则已经改变。
自签名证书
大多数时候,这似乎是这个问题的“首选”答案。这为随意嗅探问题提供了阻力,但我必须告诉所有员工“大的讨厌的警告页面很好,只需点击它”。我一直在努力训练他们永远不要忽略该页面,他们中的大多数人不会理解“当您知道并期望该站点使用自签名证书时,该页面有时还可以”的细微差别(他们倾向于停止在逗号处聆听:))。
自签名证书,但在每个系统上都安装和信任
我认为这修复了讨厌的页面,但我必须将其设置为在访问它的每台计算机上都受信任。这是可能的,但不可取。
此外,我不能 100% 确定这对于内部地址是否可行。我的理解是,现代浏览器应该拒绝任何声称可以证明解析为非公共 IP 地址或不完全合格的机器的证书。
此外,在移动设备上安装系统根证书的过程……基本上是不可能的。它需要有根的 Android 手机,以及 iOS 设备的相对神秘的过程。
设置我自己的 CA
已安装和受信任的证书基本上存在相同的问题,但我只需要安装根证书,而不是为我支持的每个系统安装一个证书。仍然基本上关闭了所有移动设备,包括经理喜欢在会议中使用的平板电脑。
我更不相信这会起作用,因为 IP 将是内部的,而 DNS 将不是完全合格的。
使用公共证书,但用于内部地址。
我们可以配置完全限定地址(如“secret.private.example.com”)以解析为内部地址(如“192.168.0.13”)。然后,我们可以为这些公共 DNS 名称使用证书(甚至可能为“*.private.example.com”使用通配符证书)。
这可能有效,也可能无效,甚至可能不是一个好主意。浏览器可能会拒绝尝试解析为本地地址的证书。
如果它确实有效,那可能不是一个好主意。从我们的内部系统带到另一个网络的笔记本电脑(可能非常快,通过 VPN 断开连接)可能会尝试访问其他网络上本地 IP 地址的秘密内容。只要 HSTS 生效,这应该没什么大不了的,因为没有我们的私钥,他们将无法说服客户端接受伪造的站点,也无法强制降级到 HTTP。但这似乎是不可取的,它打破了(也许?)最近生效的“公共 DNS 中没有私有地址”规则?
所以,所有这些要说......正确的答案是什么?我可以“放弃”并公开公开私人服务,相信加密和特定于应用程序的身份验证要求将确保事情安全。确实,对于一些不那么敏感的东西,这是一门不错的课程。但我担心特定于应用程序的身份验证可能有问题,或者凭据以其他方式受到损害(人总是最薄弱的环节),如果完全合理的话,我希望有一个额外的障碍。