这个问题已经问过几次了,我将链接几个:


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服务(从透视的角度来看:这对我们公司和我们的客户不利,但对任何一方都没有生命危险)。我想提供对这些系统的轻松访问,但是安全性显然很重要。 (其中一些服务是通过非浏览器客户端作为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中没有私有地址”的规则?

所以,所有这些都可以说...正确的答案是什么? ?我可以“放弃”并公开公开私有服务,并相信加密和特定于应用程序的身份验证要求可以确保一切安全。确实,对于一些不太敏感的事情,这是一个很好的过程。但是我担心特定于应用程序的身份验证可能会出错,或者凭据以其他方式受到破坏(人们始终是最薄弱的环节),并且我希望如果有合理的话还会有另外的障碍。 />

#1 楼

进行证书验证以确保对等体是您期望的对等体。在浏览器中验证服务器证书主要是通过检查URL中的主机名是否与证书中的名称匹配以及您可以建立到本地信任的CA证书的信任链(即浏览器中存储的根证书)来完成的。或OS)。此外,还有到期和吊销检查。

为确保此过程按预期工作,这是必不可少的,证书的颁发者验证您实际上拥有证书中的主机名。这意味着,只有您可以证明自己拥有此名称,才能获得由公共CA颁发的证书,这通常涉及具有该名称的主机是公开可见的-至少对于完成自动验证的廉价证书而言。当然,您可以通过实际使用主机名(即可以通过*.example.com访问的单个服务器)公开主机名,然后将已颁发的证书用于内部系统来解决此问题。

(以这种方式误用公共CA用于内部系统)是一种难看的方法,但应该可以正常工作。您仍然需要Internet连接,因为吊销检查将使用来自CA(即来自本地网络外部)的信息来完成。通过使用OCSP装订,可以在某种程度上限制此操作,但并非所有客户端和服务器都支持此功能。如果您不允许客户端向外部CA索取吊销信息,则有时连接建立可能会很慢,因为客户端无法成功获取吊销信息。

因此,使用公共CA应该是可能的,但是有缺点,而且感觉就像以错误的方式使用CA系统一样-所以我不建议这样做。处理大量证书时,唯一的其他选择是使用您自己的本地CA。但是,就像您意识到自己一样,这意味着在所有本地系统上安装并信任根证书(对于某些系统可以自动执行)。这也意味着您确实必须保护该本地CA免受滥用,因为它不仅限于仅颁发本地证书,而且从理论上讲还可以为任何公共域(如google.com)颁发证书。并且由于您所有的本地系统都信任此CA,因此它们也将信任此证书。另外,当将颁发者CA明确添加为受信任时,在大多数系统中将不检查证书固定。这样就很容易将CA滥用为合法或非法SSL拦截(即中间人攻击)。

这意味着没有真正好的选择:将公共CA滥用为内部主机具有所有缺点的地方,或者创建具有所有缺点的自己的CA。我确定还将有公共CA来帮助您解决此问题,但这可能会比您想要的花费更多。

#2 楼

“使用公共证书,但要使用内部地址。”

此选项非常有效,这就是我们要做的。

您实际上可以进行HTTP验证,证书不包括IP地址,只是DNS名称。因此,您可以将DNS指向外部服务,进行验证,然后将其指向内部IP。

但是,如果您的CA支持,则DNS验证会更好,因为您不必更改条目每次需要续订时。 SSL证书所做的全部工作就是验证您是否控制了名称,因此,如果您可以创建子域条目,则显然可以控制名称。letsencrypt的说明:https://serverfault.com/questions/750902 / how-to-use-lets-encrypt-dns-challenge-validation

评论


“您可以将DNS指向外部服务,进行验证,然后将其指向内部IP”-如何做到这一点?这是否需要对网络路由器进行一些配置?

–tom
18/12/14在1:15

您可以启动一个AWS实例或类似对象的时间足够长,以安装certbot并验证您的证书。

–布莱恩·拉森(Bryan Larsen)
18/12/14在13:24

#3 楼

我本人也一直在进行此工作,并且仅在一些内部Web应用程序上实现了https。

首先在内部DNS服务器上,我设置了一个新的正向查找区域corp.domain.com
,然后在其中设置一些A / Cna​​me记录,即webapp1.corp.domain.com,指向我们的内部LAN IP。

现在我们已经拥有* .domain.com的通配符SSL证书,因此有了我的证书请求,我为webapp1.corp.domain.com创建了一个重复的SSL证书。

将其安装到我们的IIS中,并在浏览器中显示为SECURE :)

#4 楼

到目前为止,我发现的最佳解决方案是使用反向代理(例如Caddy)来处理证书(颁发和续订),设置DNS服务器以将所有内部主机名指向Caddy服务器,并且一切都会自动进行。如果只想限制内部访问,则可以关闭端口80,直到需要更新证书为止。

评论


您实际上并不需要球童,只需要为CA建立绑定(或任何DNS),就可以将您所有的* .intra.yourcopany.com主机都视为外部http代理。

–peterh-恢复莫妮卡
19年4月30日在9:06

#5 楼

我认为对公共IP和FQDN的要求由CA承担,而不是由浏览器承担,因此您应该没事(至少,除非有人掌握了更多信息,否则您可以在下午进行测试并确定一种方法或另一种方法) )。

这至少排除了公共证书。在剩下的三个选项中,创建自己的CA会带来最佳的用户体验,这也是最受信任的选项,因为它提供了其他选项所缺乏的身份验证的全部好处。

到底有什么用,您可以在Android(v4.x和更高版本)和iOS(如您所说的一个相对神秘的过程)上安装根证书,尽管无疑这很麻烦。

真正的选择是获得一个公共IP并使用一个公共域名来设置DNS,并且仅限制对它的访问,例如通过VPN等。

使用自签名证书用户接受每次使用应该绝对是万不得已的方法,正如您指出的那样,这只是培训他们做错事。

评论


“并且仅通过VPN或类似方式限制访问权限。”我不太确定这是什么意思。通常,我使用VPN访问私有空间。我将如何使用VPN访问原本无法访问的公共IP?

–小汽车
16年4月21日在20:31

这是一个公平的问题,也许这不是限制访问的正确方法,而您仍然可以通过其公共地址访问该网站。限制访问的最“常规”方法可能是源IP限制和/或客户端证书(后者不能大大减轻您的管理负担)的某种组合。

–詹森
16年4月21日在21:19

公用CA将不再在证书中包含私有IP(或如今的任何IP),但这无关紧要,因为您只需要具有主机名的证书。此名称解析为哪个IP地址对于证书验证无关紧要,对于证书发行绝对不重要。唯一的要求是您需要证明自己拥有此名称,如果仅在内部网络中使用此名称,则可能会遇到挑战。

– Steffen Ullrich
16-4-22在5:01