SSL和TLS部署实践指南

2019-03-07 15:20:3511109人阅读

在TLS中,所有安全性都以服务器的加密身份开始,这就需要一个强大的私钥来防止攻击者进行模拟攻击。同样重要的是拥有一个有效和强大的证书,它会授予私钥来代表一个特定的主机名。

对于大多数网站都来说,由2048位RSA密钥提供的安全性就已经足够了。 由于RSA公钥算法应用广泛,从而使得它成为安全的默认选择。对于2048位的RSA密钥来说,能够提供大约112位密钥。如果你想要更高的安全性, RSA密钥则不能很好地进行扩展。比如,要获得128位的密钥,就需要3072位的RSA密钥,这显然运行较慢。椭圆曲线数字签名算法ECDSA显示为你提供了更好的安全性和更好的性能。以ECDSA256为例,,ECDSA密钥提供了128位的密钥。

如何保护私钥

(1)要在具有足够熵的可信计算机上生成私钥。

(2)从一开始就要为密钥设置密码保护,以防止在存储到备份系统中时受到攻击。私钥密码在实际运行中不会有太大的安全保障,因为攻击者完全可以随时从进程内存中检索密钥。利用硬件设备(硬件安全模块或HSM),即使在服务器受损的情况下也可以保护私钥,但是这些设备是昂贵的,因此仅适用于对安全有严格安全性要求的机构。

(3)被攻击后,撤销旧证书并生成新密钥。

(4)每年更新证书,最好你的设备可以自动执行此过程,因此具有较短使用周期的证书在实践中更为安全。

(5)除非特殊情况,否则每当获得新证书时,就应该生成相应的新私钥。

确保证书覆盖所使用的网站

确保你的证书覆盖你所使用的网站,避免无效的证书警告。

即使你只有一个域名,你也应确保证书与www前缀有关,例如,example.com和www.example.com。安全的Web服务器的每个DNS名称都应该配置一个有效的证书。还有就是,访问私钥的人越少越好。

可靠的CA获取证书

选择CA时,请注意以下5方面:

(1)所有CA的安全状态都要经过定期审核;

(2)选择以CA为主业务且提供各种功能支持的机构;

(3)你选择的CA应提供证书吊销列表(CRL)和在线证书状态协议(OCSP)撤销的支持; 

使用强大的证书签名算法

证书安全性取决于用于签署证书的私钥的强度及签名中使用的哈希函数的强度。原来大多数证书都依赖于SHA1散列函数,不过现在已经证实这是不安全的。因此,目前的趋势是正在向SHA256转型。截止2016年底,SHA1证书将不再被网站支持。

TLS服务器的配置

使用完整的证书链

无效的证书链会让服务器证书无效并导致浏览器发出安全警告,在大多数SSL和TLS部署中,只有服务器证书需要两个或多个证书来建立完整的信任链。

使用安全协议

SSL/TLS系列中有五种协议:SSL  2,SSL  3,TLS 1.0,TLS 1.1和TLS 1.2。

SSL2和SSL3已经非常过时了,建议不要使用。从理论上来讲,TLS  1.0也不应该被使用,但在实践中经常被使用。截至目前,TLS  1.1和 1.2都还没有什么安全问题,但只有 1.2提供了现代的加密算法。

所以TLS 1.2应该是被使用的主要协议,因为它是唯一提供现代认证加密(也称为AEAD)的版本。

选择最佳加密套件

加密套件是用于在SSL/TLS握手期间协商安全设置的算法的组合。在ClientHello和ServerHello消息交换之后,客户端发送优先级列表的密码支持套件。然后,服务器使用从列表中选择的密码套件进行响应。加密套件为以下组合:

密钥交换算法(RSA,DH,ECDH,PSK);

认证算法(RSA,DSA);

批量加密算法(AES,Camellia,ARIA);

消息认证码算法(SHA-256);

不过有几个过时的加密原语必须禁止使用:

(1)匿名Diffie-Hellman(ADH)套件不提供身份验证。

(2)NULL加密套件不提供加密。

(3)导出加密套件在连接协商时不安全,但也可以针对更强大的套件(FREAK攻击)的服务器使用。

(4)弱密码(通常为40和56位)的套件使用可以轻松被攻击。

(5)RC4是不安全的。

(6)3DES运行缓慢且易被攻击。

在SSL  3及更高版本的协议版本中,客户端会先提交一系列支持的加密套件,服务器从列表中选择一个用于连接的套件。然而,并不是所有的服务器都能执行此操作,有些会固定的从客户端列表中选择第一个支持的套件,所以服务器主动选择最佳可用加密套件对于实现最佳安全性至关重要。

使用前向保密

前向安全或前向保密(英语:Forward Secrecy,缩写:FS),有时也被称为完美前向安全 [1]  (英语:Perfect Forward Secrecy,缩写:PFS),是密码学中通讯协议的安全属性,指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。 [2]  前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。如果系统具有前向安全性,就可以保证在主密钥泄露时历史通讯的安全,即使系统遭到主动攻击也是如此。

使用强大的密钥交换算法

确保数据的传输、存储安全,通常都会对传输的数据加密后存储或传输,接收方收到数据后解密密文,还原明文。通常采用的加密算法主要有对称密钥加密算法以及非对称密钥加密算法。在安全的数据通信中,通信的双方必须分别具有加密的密钥以及解密的密钥。一旦通信的密钥被泄漏或破解,由其加密的信息就会被泄漏。因此,如何安全地交换或协商通信密钥就成为至关重要的问题,从而如何保证密钥的安全,特别是安全的密码交换就成为电子商务中安全信息交换的核心问题。

2015年,研究人员发现一个SSL加密安全漏洞LogJam,LogJam漏洞将影响任何支持DHE_EXPORT密码的服务器及所有浏览器,包括最新版的IE、Chrome、Firefox、Safari等。随后他们评估称学术派黑客可以破解768位的密钥,而国家支持的黑客更可以突破1024位的密钥。所以为了安全起见,如果部署DHE,至少要配置2048位的密钥。

正确部署前的验证

也许在按着本文的方法在进行部署时,许多软件和硬件配置都有了新的版本,建议大家先对自己的SSL / TLS做个全面评估,以确保运行的安全,推荐大家使用此链接进行测试。

实践部署过程中的注意事项

避免一味的追求过高的安全性

使用太短的密码肯定是不安全的,但使用太长的密码也不一定安全,比如会导致操作的复杂。对于大多数网站来说,使用强于2048位的RSA密钥以及使用强于256位的ECDSA密钥会浪费CPU功耗,并可能会损害用户体验。类似地,增加临时密钥交换的强度对于DHE为2048位以及ECDHE为256位几乎没有什么好处,使用高于128位的加密也没有明显的好处。

使用会话重用机制

由于SSL握手的非对称运算无论是RSA还是ECDHE,都会消耗性能,故为了提高性能,对于之前已经进行过握手的SSL连接,尽可能减少握手round time trip以及运算。

SSL提供2中不同的会话复用机制。

(1)session id会话复用;

(2)session ticket会话复用,Session id会话复用有2个缺点,其一就是服务器会大量堆积会话,特别是在实际使用时,会话老化时间配置为数小时,这种情况对服务器内存占用非常高。

使用广域网优化

广域网优化(WAN optimization),通常也被称为广域网加速(WAN acceleration),即通过一些优化技术来提供高性能的远程数据访问,从而提高应用程序在广域网上的性能。

缓存公共内容

通过TLS进行通信时,浏览器可能会把所有流量都视为敏感数据。这样,它们通常会使用内存来缓存某些资源,但一旦关闭浏览器,所有内容都可能会丢失。为了获得性能提升并实现对某些资源的长期缓存,可以将公共资源(例如图像)标记为公开。

启用OCSP Stapling

OCSP (Online Certificate Status Protocol) 通常由 CA 提供,用于在线实时验证证书是否合法有效,这样客户端就可以根据证书中的 OCSP 信息,发送查询请求到 CA 的验证地址,来检查此证书是否有效。

而 OCSP Stapling ,顾名思义,是将查询 OCSP 接口的工作交给服务器来做,服务器除了可以直接查询 OCSP 信息,还可以仅进行少数次查询并将响应缓存起来。当有客户端向服务器发起 TLS 握手请求时,服务器将证书的 OCSP 信息随证书链一同发送给客户端,从而避免了客户端验证会产生的阻塞问题。由于 OCSP 响应是无法伪造的,因此这一过程也不会产生额外的安全问题。

使用快速加密原语

尽可能使用支持硬件加速AES的CPU,如果你真的想要进一步提高性能,请考虑使用ECDSA密钥。

HTTP的加密

加密整个网站,加密的问题可能是当今最大的安全问题之一,比如:

(1)没有TLS的网站

(2)具有TLS但不执行TLS的站点

(3)混合了TLS和非TLS内容的网站,有时甚至在同一网页内

(4)编程错误的网站会破坏TLS

删除混合内容

即使你加密了整个网站,仍然可能会从第三方网站中检索出未加密的一些资源。混合内容页面是通过TLS传输但是包含不通过TLS传输的资源(例如,JavaScript文件,图像,CSS文件)的页面。这样的页面非常不安全,这些不受保护的JavaScript资源会被中间人攻击所利用,例如劫持整个用户会话。

了解第三方服务

多数网站都是通过从另一台服务器下载的JavaScript代码来激活的第三方服务比如Google Analytics。包含第三方代码的网站会创建一个隐含的信任连接,有效地使对方完全控制你的网站。虽然第三方连接可能不是恶意的,但是这些服务背后的厂商可能被攻击,比如,如果一个服务器被攻击,那攻击者将自动访问所有依赖该服务器的站点。

安全设置Cookie

为了在保持性能的前提下,实现安全,网站需要TLS,而且所有的Cookie在创建时都被明确标记为安全的。否则就有可能被MITM攻击者利用,建议大家为你的Cookie添加加密完整性验证。

安全的HTTP压缩

CRIME攻击通过利用压缩过程中的漏洞,可解密部分安全连接。而禁用TLS压缩可防止这种攻击。另外要注意,HTTP压缩可能被TIME和BREACH攻击利用。与TLS压缩不同,HTTP压缩是必需的,不能关闭。因此,为了解决这些攻击,需要对应用程序代码进行更改。

配置使用HTTP严格传输安全(HSTS)

要激活HSTS保护,你可以向你的网站添加一个新的响应头。之后,支持HSTS的浏览器就会执行它。通过自动将所有明文链接转换为安全的链接,来实现了这一目标。

建议大家添加对HSTS的支持,这是为TLS安全性做出的最重要的保障。为了获得最佳安全效果,请考虑使用HSTS预加载,将HSTS配置嵌入到浏览器中。只要是在有效期内,浏览器都将直接强制性的发起HTTPS请求。

部署内容安全策略(CSP)

敏感内容作出处理

由于使用基于云的应用平台正在增加,所以为了让所有敏感内容只让接收方收到,你必须小心对敏感内容作出处理。


本文翻译自:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices

翻译作者:lucywang 原文地址:https://www.4hou.com/web/16571.html

0
现金券
0
兑换券
立即领取
领取成功