转载

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

如今,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)支持前向转发的加密

如果服务器一直用同样的私钥获得对称TLS会话密钥,私钥就成为链条中的脆弱一环。例如,如果攻击者记录了服务器和用户之间的大量通信,就可以从服务器中窃取私钥,然后可以解密通信。

即使私钥在日后失窃了,EDH (Ephemeral Diffie-Hellman)或 DHE也可以使用户的加密会话更安全。EDH 是一种可以为每个会话产生唯一对称密钥的密钥交换机制,这意味着即使服务器的私钥被窃多年,攻击者也不能用它来解密已记录的会话。

仅支持TLS1.2

加密系统并非静止不变,所以安全的Web服务器应当总是全力支持互联网安全方面的最新和最大的改进。理想情况下,企业网站不应当支持低于TLS最新版本的任何系统。TLS和SSL协议的早期版本包括过时的加密套件或一些不安全的实施方案,这使得企业的加密通信易于遭受攻击。

TLS连接依靠客户端和服务器的功能。安全管理者可能担心,如果企业网站不支持较老的版本,就可能影响客户体验,但事实上,大多数浏览器已经支持TLS1.2有很长时间了。

到2016年六年底时,升级到TLS1.2对于必须遵循PCI的企业来说将是强制性的。所以,现在我们有理由为网站实施仅支持TLS1.2的策略。

确保服务器的SSL的最新对企业网站的安全有实际影响。SSL3.0易于遭受POODLE攻击,并且还会遭受有安全问题的RC4加密的破坏。TLS1.0修复了此问题,却发现了新漏洞:隐式初始化向量和填充错误的不正确处理,导致不安全的加密CBC。TLS1.1同样如此,并易于遭受Lucky 13的攻击。TLS1.2支持使用AES-GCM加密套件,却没有CBC模式加密的相同漏洞。

充分挖掘现代SSL的性能优化

过去的SSL要比HTTP慢得多,这正是许多Web开发者和网络管理者更愿意使用“http://”的原因。但是,互联网技术的发展已经使SSL更加高效。通过利用最新的TLS性能特性以及SPDY或http/2技术,现代SSL网站往往比未加密网站更快。

支持OCSP 封装

CA和TLS并非总是可靠。有时,CA颁发了一个非预期的证书,有时公司用一种使证书无效的方式改变了安全策略,有时证书的密钥被恶意用户窃取。不管是什么原因,CA和浏览器的厂商认识到:它们需要撤销有可能被破坏的证书的方法。

为了使网站的用户信任服务器交给他们的TLS证书,就需要查询由CA维护的证书撤销列表(CRL),看看证书是否已经被撤销。不幸的是,这种额外的撤销检查可以延缓用户页面的加载,并且浏览器必须等到CA返回TLS证书的状态。这种检查往往还需要DNS查询,并且需要下载很多被撤销的证书,从而导致巨大的性能牺牲。

OCSP 封装是OCSP的一部分,后者用实时的撤销检查修复了一些性能问题。由此,Web服务器不再强迫用户的浏览器直接查询CA,而是由服务器自己在一定的时间查询CA,用以找回OCSP响应。这个响应是由CA签发的,证明在指定的时间段内TLS证书的合法性。服务器可以消除用户浏览器的不必要的往返时间。

支持ECC(椭圆曲线密码)

ECC是当代的一种替代RSA的选择。ECC使用椭圆曲线的数学属性来创建单向功能,这成为公钥加密的基础。

使用ECC的好处就是ECC要求的密钥更短,所以几乎不需要向终端用户的计算机传送数据,从而加速了最初的TLS握手。此外,ECC花费的签名时间要比RSA少10倍。每次握手都需要由私钥签名,所以ECC实际上可以减少服务器的负担。

支持通过会话票据(Session Ticket)实现恢复 TLS 会话

毋庸置疑,TLS扬很昂贵,但TLS确实包括一种避免不必要握手的方法。TLS的会话恢复可以利用以前会话的对称密钥使客户端与服务器重新连接。这就无需额外的数据往返和获得新的对称密钥的费用。有两种不同的TLS恢复机制:票据(ticket)和id。

如果浏览器和服务器都支持TLS会话票据(ticket),服务器会返回一个包含对称密钥的票据(ticket),作为握手的一部分。这个票据(ticket)使用一个只有服务器才知道的加密密钥来加密的,这就使得存储TLS的会话信息成为一种安全方法。在浏览器试图重新连接到服务器时,就会返回一个加密的会话票据(ticket)。每个人都可以绕过TLS握手的其余部分,这是因为双方都可以访问对称的会话密钥。

不幸的是,Safari和IE并不支持会话票据(ticket)。这些浏览器使用一种称为会话ID的机制来恢复TLS会话。会话信息存储在服务器上而不是存储在客户端,客户端将会话的ID返回给服务器。保持所有TLS连接参数的高速缓存对服务器可能是一种负担,但是,如果你希望更广泛地支持TLS会话恢复,既支持会话票据(ticket)又支持会话ID是一个好主意。

支持 SPDY 或 HTTP/2

SPDY 和 HTTP/2是可以极大提升网站加载速度的互联网协议。从技术上讲,SSL并不要求其中任何协议,但是主流的浏览器厂商都支持SPDY或http/2。

HTTP/1.1强制每一次请求都使用TCP连接,而浏览器每次只能打开有限的TCP连接。结果,网站的HTML、CSS、JavaScript、媒体资产等都被连续下载。HTTP/2 和 SPDY增加了几个称为多路传输的新特性,可以使浏览器使用整个网站的单个TCP连接。它不像HTTP/1.1,多路传输可以使浏览器并行下载网站的所有资产。所以,它要比HTTP/1.1快得多。

大多数互联网通信都支持SPDY或HTTP/2。如果Web服务器并不支持这种得到广泛支持的SPDY和HTTP/2浏览器,就无法充分利用支持TLS的Web服务器的全部价值。这是现代SSL真正使Web服务器更快的一个好例子,虽然最初握手花费了一些成本。

结论:HTTPS面面观

在考虑到现代SSL所带来的安全和性能益处后,企业网站再也没有理由不利用HTTPS去响应每一个请求。如此便会简化Web开发者和系统管理员的工作,因为他们不再需要编写复杂的URL重定向来对一些网页使用HTTP,而对另一些网页使用HTTPS。

选择TLS还可以在企业和企业网站之间建立信任。HTTPS可以确保网站的访问者看到在企业网站上应该看到的内容。企业通过HTTPS提供内容就可以避免利用普通的HTTP时ISP将广告植入到企业网页中的情况。

在保障企业网站安全的问题上,四个很实用的SSL最佳实践是:

1.支持HSTS头

2.使用SHA-2证书签名

3.使用EDH 握手实现前向加密

4.升级到TLS1.2

另外,在此还提供使支持SSL的企业网站拥有更高性能的四个最佳方法:

1.支持OCSP 封装

2.利用椭圆曲线加密(ECC)

3.支持TLS会话恢复

4.支持HTTP/2可SPDY

原文  http://netsecurity.51cto.com/art/201606/512904.htm
正文到此结束
Loading...