FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序把安全装进口袋
为了让系统管理员轻松部署安全站点或应用,本篇将讲解SSL/TLS部署最佳实践。
在SSL/TLS中,所有安全都始于服务器的密码标识。因此需要一个强大的私钥来防止攻击。另外,拥有一张有效且强大的证书也是至关重要的,它能授予私钥代表特定主机名的权利。没有这两个基本构建块,任何东西都无法得到安全保障。
对于大多数网站来说,2048位RSA密钥足以保障其安全性了。RSA加密算法的普遍应用使得这种类型的密钥成为默认的安全选择。如果是2048位,这类密钥提供了相当于112位的安全性。如果您想要比这更高的安全性,如128位的安全性,您需要3072位的RSA密钥,但是RSA加密算法的扩展性不太好,3072位的RSA密钥将会影响性能。ECDSA密钥提供了一种替代方案,可以给予更高的安全性和更好的性能。ECDSA密钥为256位,提供128位的安全性。少数老旧的客户端不支持ECDSA,但现代客户端能支持。如果您不介意管理此类设置的开销,则可以同时部署支持RSA和ECDSA加密算法的SSL证书。
私钥是非常重要的资产之一,需限制访问私钥人数,同时建议您采取以下策略保护私钥:
确保您的SSL证书覆盖您希望用于所有站点域名,否则无效证书警告会降低用户对该站点的信任度。经验法则是,安全的Web服务器应该具备这样一个证书,该证书对于指向它的每个DNS名称都有效。
通配符证书有其用途而且能满足更广泛的需求,但在跨团队或部门情况下,使用通配符证书时容易将密钥暴露给很多人。为控制访问私钥人数防止私钥被滥用,这种情况下请避免使用通配符证书。
请确保将所有必要的域名添加到使用者可选名称(SAN),因为所有最新的浏览器都不会通过检查通用名称进行验证。
选择认真对待其证书业务和安全性的可信证书颁发机构,即CA。选择CA时,请参考以下标准:
证书安全性取决于私钥的强度和签名中使用的散列函数强度。如今SHA1散列函数的证书被普遍认为是不安全的,所以最好安装使用SHA256散列函数的证书。
DNSCAA是一项防止HTTPS证书错误颁发的安全措施,CAA标准可以允许域名所有者限制能为其域名颁发证书的CA。如果没有CAA记录,那么任何人都能为该域名生成CSR并获取任何CA签发的证书。使用DNSCAA记录,可以减少欺诈证书的出现,从而使站点更加安全。如果CA启用自动签发证书的流程,那么就应该检查DNSCAA记录,这样可以减少错误颁发证书的风险。
建议通过为您的证书添加CAA记录将CA列入白名单。添加您信任的CA为您颁发证书。
正确的SSL服务器配置可以让您的网站身份能正常向用户展示以增强信任,并能使用安全的加密原语以缓解所有已知的缺陷。
在部署SSL证书时,仅靠服务器证书是不够的,这就需要两个或多个证书来建立完整的信任链。如果您部署了一个有效证书,但却缺少必要的中间证书,那么就会出现常见的配置问题。为避免这种情况的发生,您需要按相应顺序部署CA提供给您的所有证书。
SSL/TLS系列中有六种协议:SSL2.0、SSL3.0、TLS1.0、TLS1.1、TLS1.2和TLS1.3:
要确保安全通信,必须首先确定您是直接与所需方通信(而不是通过窃听的其他人)并安全地交换数据。在SSL和TLS中,密码套件定义了安全通信的发生方式。它们由不同的构建块组成,其理念是通过多样性实现安全。如果发现其中一个构建块薄弱或不安全,您应该能够切换到另一个构建块。
目前主要依赖提供强身份验证和密钥交换、前向保密和至少128位加密的AEAD套件。可能仍然有支持其他一些较弱的套件,前提是它们仅与不支持任何更好的旧客户端协商。下面是一些过时的密码原语,建议不要使用:
建议使用AEAD或PFS密码套件:
以下是专为RSA和ECDSA密钥设计的套件配置:
以上示例配置使用标准的TLS套件名称。一些平台使用非标准名称;有关更多详细信息,请参阅您平台的文档。例如,以下套件名称将与OpenSSL一起使用:
在SSL3.0及更高版本的协议中,客户端需提交他们支持的密码套件列表,服务器从列表中选择一个用于连接的套件。然而,并非所有服务器都能做出最佳选择。有些服务器会从客户端列表中选择第一个支持的套件。因此,让服务器主动选择最佳可用密码套件才能使SSL部署安全达到最佳化。
前向保密(也称完美前向保密,简称PFS),它是一种协议功能,可不依赖于服务器私钥实现安全对话。如果不使用前向保密的密码套件,他人就能恢复服务器私钥,进而解密所有先前记录下来加密对话。使用ECDHE套件就能在Web浏览器中启用前向保密。为了支持更广泛的客户端,您还应该使用DHE套件作为ECDHE后备。除非绝对必要,请避免RSA密钥交换。
对于密钥交换,公共站点通常可以选择常用的Diffie-Hellman密钥交换(DHE)或椭圆曲线变体ECDHE。RSA密钥交换应用非常广泛,但它不提供前向保密。当然还有其他密钥交换算法,但它们通常不安全。
2015年,一组研究人员发表了针对DHE的新攻击,他们的工作被称为Logjam攻击。研究人员发现,较低强度的DH密钥交换(例如768位)很容易被破解。为了安全起见,如果部署DHE,请至少配置2048位。一些老版本的客户端(例如Java6)可能不支持这种强度级别。ECDHE相比之下性能更高、更快速。secp256r1命名曲线(也称为P-256)是一个不错的选择。