我正在开发一个 Web 应用程序,该应用程序在与客户端位于同一网络的本地服务器上运行 - 基本上,每个客户站点都将在网络上托管自己的服务器,而不是中央 Web 服务器。服务器是 CentOS,客户端将是任何 Web 浏览器。
我想加密网络上的 Web 浏览器和服务器之间的通信,以便网络上的其他人难以看到客户端和服务器之间的通信。但是,由于客户端不会通过公共 URL 访问服务器,我的理解是我不能使用签名的 SSL 证书,这会让我容易受到 SSL 证书注入攻击。
我也无法控制安装这些系统的网络,所以我无法可靠地进行 MAC 过滤或 IP 范围过滤(尽管这些基本上是无效的,所以没有什么大的损失)。
我的问题是:1. 我理解的对吗?我到底能不能使用 SSL?如果能,怎么用?2. 除了 SSL 证书,我还有什么选择?我宁愿不采用自己的加密,因为那必须用 JavaScript 来实现,这样一来,攻击者只要在将加密代码传送到浏览器时重写它,就可以利用这种攻击。
感谢您的帮助/评论!
答案1
但是,由于客户端不会通过公共 URL 访问服务器,我的理解是我不能使用签名的 SSL 证书,这使我容易受到 SSL 证书注入攻击。
这简直是胡说八道。没有要求由受信任的 CA 签名的证书只能在可公开访问的 URL 上使用。
其他选项?IPSec、OpenVPN 等。但说实话,使用受信任的证书设置 SSL 可能是最快、最简单的选择。让您的客户能够将自己的密钥/证书上传到服务器,然后他们可以决定是使用私有 CA 还是公共 CA。
答案2
如果您对客户端设备的配置有一定的控制权,您可以充当认证机构,可以使用 OpenSSL 命令、Red Hat/Fedora Dogtag PKI 或 Active Directory 域服务器的 CA 角色。
创建一个受您控制的 CA,要求客户在其客户的受信任 CA 存储中安装来自您的 CA 的证书(http://technet.microsoft.com/en-us/library/cc772491.aspx对于 Windows 客户端,或者使用 Puppet 或 CFEngine 之类的工具将您的根证书安装到 /etc/ssl/certs/ca-certificates.crt 和 Linux 的 NSS db 中。
当您将解决方案发送给客户时,请向他们提供一个证书,以便安装在解决方案内的 Web 服务器中(向他们提供说明,通常并不难),证书中的 SubjectAlternateName 中包含服务器的完全限定主机名。
如果您需要更多详细信息,请告诉我。
答案3
除了使用 SSL 访问网站外,您还可以使用 802.1x 在 LAN 上提供加密通信。这样做比一篇文章中解释的要复杂一些,但通常涉及在 LAN 上设置主机身份验证方法。
这项特定技术的典型用例是强制只有经过 IT 批准的主机才能连接到网络,但它还有一个额外的(强大的)优势,即线路上的所有内容都经过加密。
以下资源提供了有用的解释:http://services.geant.net/cbp/Knowledge_Base/Security/Documents/gn3-na3-ufs_133.pdf
请注意,这通常是一个重大项目。如果您只想加密通信并提供特定内部 Web 应用程序的身份验证,则只需使用 TLS(如果您愿意并且正在使用内部控制的公开委托域,则使用从公共根签名的证书,否则使用您自己的本地 PKI)。