安全与性能可以兼得:优化SSL/TLS保障网站安全

2017-06-06

如今,HTTPS更快也更安全,使用HTTPS的企业网站也比以往更多。尽管Web开发人员或网络架构师忙碌依旧,却很难跟上互联网技术的最新发展。

在本文中,笔者将讨论通过SSL保障现代网站安全的最佳方法。现代SSL除了要保障企业网站的安全外,还要兼顾性能。因此,本文会涉及一些有助于提高网站性能的SSL优化方法。

安全与性能可以兼得:优化SSL/TLS保障网站安全

在讨论所谓的最佳方法之前,我们首先看几个SSL和TLS术语。从技术上讲,SSL已经被TLS(传输层安全)协议代替,但是多数人仍将SSL和TLS混称为SSL。除非SSL后有一个版本号,否则此文仍使用此习惯用法。

其次,在深入讨论之前,对SSL/TLS握手有一个基本的理解也很重要。这种握手发生在浏览器通过HTTPS与服务器进行连接之时,是客户端和服务器约定的用于会话加密的一种方法。TLS握手有几种不同的类型,但是RSA握手图展示的是相关部分。

首先,浏览器向WEB服务器发送一个大随机数和一个加密套件清单,由此开始了TLS握手。Web服务器从中选择首要的加密套件,从而决定了握手类型以及用于此次TLS会话的加密机制。然后,Web服务器向浏览器发送加密套件,还要向浏览器返回另一个大随机数和服务器的公共SSL证书。浏览器需要知道SSL证书是否被吊销,所以它会检查CA的证书吊销列表(除非支持OCSP封装)。

如果证书仍然合法,浏览器会生成一个“预主密钥”,以生成一个对称的会话密钥。浏览器会用服务器的公钥(包含在服务器的SSL证书中)来加密“预主密钥”,并传送回服务器。在服务器用私钥解密“预主密钥”后,浏览器和服务器都获得对称密钥,用以加密TLS会话的其余部分。

在本文中,所讨论的每种措施都可以使这些步骤更安全或更快速。

充分利用现代SSL的安全功能

TLS握手有很多步骤,这意味着安全管理员有很多机会改进网站的安全性。这里先讨论强制使用HTTPS连接的HSTS,然后再看一下SHA-1与SHA-2的当前状态,还要探讨如何保护未来的用户会话数据,以及升级到最新TLS版本的重要性。

支持HSTS头

支持HSTS协议是更好地保障网站、API、移动应用安全的最简单方法之一。HSTS是HTTP协议的一个扩展,它强制客户端对每一个访问Web服务器的请求都使用安全连接。通过提供一个严格传输安全(STS)头部,Web服务器就可以告诉浏览器只能在指定的时间段由HTTPS连接到网站。

然后,浏览器会在将用户的请求发送给服务器之前,自动将所有的http请求变成https请求。在连接的安全性存在问题时(例如,服务器的TLS证书不再可信时),HSTS还会告诉浏览器显示一个错误页面。这类错误不同于用户凭直觉就可以忽视的错误,它无法被绕开。

这种链接重写可以防御某些类型的“降级攻击”,如SSL-stripping攻击,防止中间人将HTTPS请求变成HTTP请求而窥探用户通信。

支持SHA-2证书签名

SHA-2是SHA(安全哈希算法)的下一代版本。哈希算法是一种单向功能,它可以产生一个消息的唯一指纹特征,并且从互联网诞生起就已经成为一个关键组件。

在CA为网站颁发TLS证书后,就取得了证书中的所有信息(域名、合法周期、公钥、序列号,等等),将这些信息“哈希(hash)”变成数字证书,使用指纹信息创建签名,并生成私有签名密钥。在浏览器信任服务器的证书之前,它需要将证书信息进行哈希(hash),并且使用CA的公共签发密钥验证指纹是否与证书的签名相匹配。

如果攻击者能够使用不同的证书信息生成同样的数字指纹,就可以生成伪造的但仍能通过CA签名验证的证书。然后,攻击者就可以将此伪造的证书作为中间人,而终端用户并不能够分辨自己是否正在将其敏感信息发送给互联网上的某个人,而不是安全的Web服务器。

产生这种哈希冲突需要大量的计算资源。随着计算机越来越快和廉价,攻击者就越有可能伪造一个使用SHA-1进行签名的TLS证书。解决方案就是SHA-2。

现代网站都使用SHA-2而不是SHA-1签名的TLS证书。如果企业网站仍在使用SHA-1证书,主流的浏览器厂商都会显示警告消息,告诉网站的访问者正在访问不安全的网站。到2016年底的时候,浏览器将会完全阻止用户访问这种网站。为了升级,企业网站需要从自己的CA购买一个新的SHA-2证书,并且将其安装到Web服务器上。

如果企业仍需要支持不能使用SHA-2的用户,不妨考虑利用一个能够选择最高安全的证书,并且用户的浏览器还要支持。

用EDH(Ephemeral Diffie-Hellman)支持前向转发的加密