SSL/TLS是一种看似简单的技术。它易于部署,正常部署后就可以运行了。但想要部署地安全可靠却并非易事。这就使得系统管理员和开发者不得不花费额外时间和精力了解SSL/TLS相关技术,以便能配置一个高安全的服务器或应用。
为了让系统管理员轻松部署安全站点或应用,本篇将讲解SSL/TLS部署最佳实践。
一、私钥和证书在SSL/TLS中,所有安全都始于服务器的密码标识。因此需要一个强大的私钥来防止攻击。另外,拥有一张有效且强大的证书也是至关重要的,它能授予私钥代表特定主机名的权利。没有这两个基本构建块,任何东西都无法得到安全保障。
1.1使用2048位私钥对于大多数网站来说,2048位RSA密钥足以保障其安全性了。RSA加密算法的普遍应用使得这种类型的密钥成为默认的安全选择。如果是2048位,这类密钥提供了相当于112位的安全性。如果您想要比这更高的安全性,如128位的安全性,您需要3072位的RSA密钥,但是RSA加密算法的扩展性不太好,3072位的RSA密钥将会影响性能。ECDSA密钥提供了一种替代方案,可以给予更高的安全性和更好的性能。ECDSA密钥为256位,提供128位的安全性。少数老旧的客户端不支持ECDSA,但现代客户端能支持。如果您不介意管理此类设置的开销,则可以同时部署支持RSA和ECDSA加密算法的SSL证书。
1.2保护私钥私钥是非常重要的资产之一,需限制访问私钥人数,同时建议您采取以下策略保护私钥:
在可信的计算机上生成私钥,建议拒绝CA为您生成私钥。 从一开始就对密钥进行安全保护,防止密钥存储在备份系统中时遭到破坏。 证书被破坏后,撤销旧证书并生成新的私钥。 每年更新SSL证书。如果您采用自动化管理证书,更新频率应更高。有效期较短的证书在实践中更安全。 保持证书的公钥与私钥相匹配,否则每当您获得新证书时,还应该生成新的私钥。 1.3确保覆盖所有域名确保您的SSL证书覆盖您希望用于所有站点域名,否则无效证书警告会降低用户对该站点的信任度。经验法则是,安全的Web服务器应该具备这样一个证书,该证书对于指向它的每个DNS名称都有效。
通配符证书有其用途而且能满足更广泛的需求,但在跨团队或部门情况下,使用通配符证书时容易将密钥暴露给很多人。为控制访问私钥人数防止私钥被滥用,这种情况下请避免使用通配符证书。
请确保将所有必要的域名添加到使用者可选名称(SAN),因为所有最新的浏览器都不会通过检查通用名称进行验证。
1.4从可信CA获取证书选择认真对待其证书业务和安全性的可信证书颁发机构 ,即CA。选择 CA 时,请参考以下标准:
对待安全的态度。所有 CA 都会接受定期审计,但有些CA比其他CA更重视安全。找出在这方面哪个CA做的更好并不容易,但您可以做的一项是检查他们的安全历史记录,查看CA面对漏洞的反应是怎样,是否从错误中吸取了教训。 提供的服务。您选择的CA应支持证书吊销列表 (CRL) 和在线证书状态协议 (OCSP) 吊销方法,并具有稳定的网络可用性和高性能。许多站点喜欢使用域名验证型DV证书,但您还应该考站点是否需要扩展验证型EV证书。但无论哪种情况,您都应该选择公钥算法。目前大多数网站都使用RSA算法,但ECDSA可能会因为其性能优势在未来变得重要。 证书管理。如果您需要大量SSL证书并在复杂的环境中运行,请选择一个可以为您提供良好的管理工具的CA。注意:为获得最佳效果,请提前至少一周获取证书,以便部署并正常运行。这样做有助于避免因计算机时间不准确而导致出现证书不安全警告。另外,由于CA需要额外的时间才能有效的将新证书发送给OCSP响应,所以最好先提前获取证书避免证书撤销检查的失败。因此,千万不要等到您的证书到期时才替换它们。
1.5使用强签名算法证书安全性取决于私钥的强度和签名中使用的散列函数强度。如今SHA1散列函数的证书被普遍认为是不安全的,所以最好安装使用SHA256散列函数的证书。
1.6使用DNS CAADNS CAA是一项防止HTTPS证书错误颁发的安全措施,CAA标准可以允许域名所有者限制能为其域名颁发证书的CA。如果没有CAA记录,那么任何人都能为该域名生成CSR并获取任何CA签发的证书。使用DNS CAA记录,可以减少欺诈证书的出现,从而使站点更加安全。如果CA启用自动签发证书的流程,那么就应该检查DNS CAA记录,这样可以减少错误颁发证书的风险。
建议通过为您的证书添加CAA记录将CA列入白名单。添加您信任的CA为您颁发证书。
二、配置正确的SSL服务器配置可以让您的网站身份能正常向用户展示以增强信任,并能使用安全的加密原语以缓解所有已知的缺陷。
2.1使用完整的证书链在部署SSL证书时,仅靠服务器证书是不够的,这就需要两个或多个证书来建立完整的信任链。如果您部署了一个有效证书,但却缺少必要的中间证书,那么就会出现常见的配置问题。为避免这种情况的发生,您需要按相应顺序部署CA提供给您的所有证书。
2.2使用安全的协议SSL/TLS 系列中有六种协议:SSL 2.0、SSL 3.0、TLS1.0、TLS 1.1、TLS 1.2 和 TLS 1.3:
SSL 2.0不安全,不能使用。 SSL 3.0与HTTP一起使用时不安全。它也已过时,建议不使用。 TLS 1.0和TLS 1.1已于2020年1月弃用。 TLS 1.2 和TLS 1.3都没有已知的安全问题。TLS 1.2或TLS 1.3是目前主要使用的安全协议,因为这些版本提供现代认证加密(也称为AEAD)。如果您的服务器不支持 TLS 1.2或TLS 1.3,那您的网站可能缺乏安全性。 TLS 1.3相对来说更加安全,性能更强大。 2.3使用安全的密码套件要确保安全通信,必须首先确定您是直接与所需方通信(而不是通过窃听的其他人)并安全地交换数据。在 SSL 和 TLS 中,密码套件定义了安全通信的发生方式。 它们由不同的构建块组成,其理念是通过多样性实现安全。如果发现其中一个构建块薄弱或不安全,您应该能够切换到另一个构建块。
目前主要依赖提供强身份验证和密钥交换、前向保密和至少128位加密的AEAD套件。可能仍然有支持其他一些较弱的套件,前提是它们仅与不支持任何更好的旧客户端协商。下面是一些过时的密码原语,建议不要使用:
ADH套件不提供身份验证。 NULL密码套件不提供加密。 导出密码套件在连接中协商时不安全,但也可以针对更喜欢更强大的套件(FREAK攻击)的服务器使用。 弱密码(112 位或更少位数)的套件很容易被破解,是不安全的。 RC4不安全。 64 位分组密码(3DES / DES / RC2 / IDEA)很弱。 RSA密钥交换密码套件较弱。建议使用AEAD或PFS密码套件:
AEAD密码套件-包括CHACHA20_POLY1305, GCM and CCM。 PFS密码套件-包括ECDHE_RSA, ECDHE_ECDSA, DHE_RSA, DHE_DSS, CECPQ1和所有的TLS 1.3密码。以下是专为RSA和ECDSA密钥设计的套件配置:
注意:建议先在临时环境中测试TLS配置,只有在确定一切按预期工作时才转移到生成环境。请注意,以上是一个通用列表,并非所有系统(尤其是旧系统)都支持所有套件,所以建议参考《SSL服务器配置评级指南》进行检测。
以上示例配置使用标准的TLS套件名称。一些平台使用非标准名称;有关更多详细信息,请参阅您平台的文档。例如,以下套件名称将与OpenSSL一起使用:
2.4选择最佳密码套件在 SSL 3.0 及更高版本的协议中,客户端需提交他们支持的密码套件列表,服务器从列表中选择一个用于连接的套件。然而,并非所有服务器都能做出最佳选择。有些服务器会从客户端列表中选择第一个支持的套件。因此,让服务器主动选择最佳可用密码套件才能使SSL部署安全达到最佳化。
2.5使用前向保密前向保密(也称完美前向保密,简称PFS),它是一种协议功能,可不依赖于服务器私钥实现安全对话。如果不使用前向保密的密码套件,他人就能恢复服务器私钥,进而解密所有先前记录下来加密对话。使用ECDHE套件就能在Web浏览器中启用前向保密。为了支持更广泛的客户端,您还应该使用 DHE套件作为ECDHE后备。除非绝对必要,请避免RSA密钥交换。
2.6使用强密钥交换对于密钥交换,公共站点通常可以选择常用的Diffie-Hellman密钥交换(DHE)或椭圆曲线变体ECDHE。RSA密钥交换应用非常广泛,但它不提供前向保密。当然还有其他密钥交换算法,但它们通常不安全。
2015年,一组研究人员发表了针对DHE的新攻击,他们的工作被称为Logjam攻击。 研究人员发现,较低强度的DH密钥交换(例如768位)很容易被破解。为了安全起见,如果部署 DHE,请至少配置2048位。一些老版本的客户端(例如Java 6)可能不支持这种强度级别。ECDHE相比之下性能更高、更快速。secp256r1命名曲线(也称为P-256)是一个不错的选择。
小结近年来发生了几次针对SSL和TLS的严重攻击,但如果您运行的是最新软件并遵循本指南中的SSL部署最佳实践建议,那就不必太过担心这些问题。但是,没有什么是绝对安全的,最好的做法是密切关注网络安全,及时解决安全漏洞问题。
关于更多SSL部署相关问题,请上
https://www.racent.com/ssl了解详情!