我的任务是为命令行软件开发内部网接口,现在我正在研究安全选项。我们的命令行应用程序已完成,但我还没有开始编写Web界面。我不确切知道潜在客户的安全要求是什么,尽管我认为命令行界面通常可以接受ssh
。考虑到这一点,我正在寻求帮助开发一个选择菜单及其相关的优点/缺点。有一天,我们可能会考虑将我们的网络界面发布到互联网上,所以如果它很容易和/或免费,我愿意考虑比目前更加安全的安全性。
我一直在做很多阅读,我的初步结论是没有证书的SSL安全性是最好的方法,不是因为安全性较低是不可接受的,而是因为SSL是标准,因为它似乎不是很难建立起来。我是一名安全非专家,不需要解释为什么安全非专家可以接受的安全性较低。如有必要,我可以在将来升级我的应用程序以使用证书。
这是一个与SSL相关的安全选择列表,按照我对安全级别的看法和我的评论进行排序。我需要什么级别的保护?
没有SSL。如果我们的客户不担心员工看到/更改彼此的数据,这可能是可以接受的。他们的员工可能希望相互分享结果,我可以使用基于IP的访问控制和/或密码来保证安全。
执行没有证书的SSL。这会加密通信,至少可以防止未经授权的员工读取数据。使用密码,这与命令行上的ssh
具有相同的安全级别,对吧?我不需要担心内联网中的中间人攻击,对吗?如果存在大量浏览器警告消息,则采用此方法。
使用自签名证书执行SSL。这给了我什么,没有证书给我?如果DNS可以被不适当地更改,那么客户那么我的应用程序是他们最不关心的问题。换句话说,如果DNS可以改变,那么我认为ssh
也会变得脆弱。
使用本地证书颁发机构执行SSL。 OpenSSL允许我创建自己的证书颁发机构。这给了我一个自签名证书不是什么?我假设在局域网上,验证服务器不太重要。
使用外部证书颁发机构执行SSL。是否有理由将此路由用于Intranet?我在网上发现了一些“内联网证书” - 但目前尚不清楚他们提供的是我自己无法做到的。
作为参考,此页面可用于比较证书:
http://httpd.apache.org/docs/trunk/ssl/ssl_faq.html#aboutcerts
[更新]
Here's一篇文章,讨论从公共CA获取内部证书的风险和规则。
答案 0 :(得分:20)
是的,证书对Intranet SSL仍然有用。
SSH和SSL-without-a-certificate之间存在重要区别:当您首次使用SSH连接到服务器时,SSH会存储服务器的指纹。如果您尝试连接到SSH客户端认为是同一台计算机但返回不同指纹的内容,则会提醒您可能有人拦截您的通信。
另一方面,SSL-without-a-certificate不存储服务器的指纹。您的通信仍然会被加密,但如果某人以某种方式劫持了您提到的DNS服务器,或者as Rushyo notes,ARP中毒或类似的东西,他们将能够执行中间人攻击。如前所述,SSH(假设您在过去的某个时间已连接到正确的服务器)会注意到指纹已发生变化并提醒您。
自签名证书在安全性方面与SSH相当。中间的人可以生成自己的自签名证书,但只要您的应用程序配置为仅接受 自签名证书,您应该得到类似于SSH将提供的警报你。
本地证书颁发机构为您提供类似于自签名证书的安全性,但可能更具可伸缩性。如果您有多个服务器,每个服务器都可以拥有自己的证书,但客户端只需要顶级服务器就可以信任所有服务器。如果服务器遭到入侵,您可以撤销其证书,而不必更改每个服务器的证书。
如果您的计算机已经拥有可信任的证书颁发机构,我认为外部证书颁发机构没有任何优势,除了可能更少的配置。
最后,我不太了解双因素身份验证来评估它,但对于大多数应用程序,SSL应该足够了。
免责声明:我不是安全专家。
答案 1 :(得分:4)
- 使用外部证书颁发机构执行SSL。有没有理由去内联网这条路线?我在网上发现了一些“内联网证书” - 但目前尚不清楚他们提供的是我自己无法做到的。
醇>
如果您需要管理大量的证书和/或机器,则无需了解如何设置自己的证书颁发机构。所有浏览器都已经信任这样的证书,而您无需将自己的证书安装到受信任的商店中。
但是,这实际上不太安全,因为有人可以为不同的Intranet购买证书并在您的网络上使用它。因此,SSL供应商不再提供此服务。有关详细信息,请参阅:https://www.godaddy.com/help/phasing-out-intranet-names-and-ip-addresses-in-ssls-6935
如果您只有一个非常小的Intranet,那么我建议使用自签名证书,然后只需将每个自签名证书添加到每台计算机的可信商店。
但是,每当要添加新计算机时,在Intranet中的每台计算机上安装新证书都很快变得不切实际。此时,您需要设置自己的证书颁发机构,以便只需在每台计算机的可信任存储中安装单个CA证书。