TLS / SSL密码强化的建议

传输层安全性(TLS)及其前身安全套接字层(SSL)是广泛使用的协议,旨在通过身份验证,加密和完整性来保护客户端和服务器之间的数据传输安全。

与常见假设相反,TLS / SSL不仅是网站和Web应用程序中广泛使用的技术(使用HTTP协议),而且TLS / SSL也被其他一些服务和协议广泛使用,包括但不限于电子邮件服务器( SMTP,POP和IMAP协议),FTP服务器,聊天服务器(XMPP协议),虚拟专用网络(TLS / SSL VPN),网络设备。

为了保护正在传输的数据,TLS / SSL使用一个或多个密码套件。密码套件是认证,加密和消息认证码(MAC)算法的组合。所有这些都在协商TLS / SSL连接的安全设置以及数据的安全传输时使用。

以下一些是密码套件可以使用的算法的示例。

功能 算法
密钥交换 RSA,Diffie-Hellman,ECDH,SRP,PSK
认证 RSA,DSA,ECDSA
批量密码 RC4,3DES,AES
消息验证 HMAC-SHA256,HMAC-SHA1,HMAC-MD5

除了在若干监管标准中的要求之外,主要浏览器在没有TLS的情况下将站点标记为“不安全”,它也可能被视为服务网站和Web应用程序的要求。然而,获得正确的TLS实施可能会比预期的要简单一些。最糟糕的是,糟糕的TLS配置可能会提供虚假的安全感,同时使网站和Web应用程序容易受到一系列攻击。

许多常见的TLS配置错误在于密码套件选择不当。旧的或过时的密码套件,尤其是那些遭受各种攻击的密码套件,可能允许攻击者在传输过程中成功拦截或篡改秘密数据。以下是要对TLS / SSL实施进行的推荐配置列表。

禁用SSL 2.0和SSL 3.0

SSL 2.0是1995年第一个公开发布的SSL版本。此版本的SSL包含许多导致SSL 3.0引入的安全问题。SSL 3.0于1996年发布,完全重新设计了协议。

由于SSL2.0中出现的问题,协议使用起来不安全,应该完全禁用。
由于POODLE(Padding Oracle On Downgraded Legacy.Encryption)漏洞,SSL 3.0使用起来也不安全,应该被禁用以避免攻击者检索到安全连接的明文。此外,Elliptic Curve Cryptography(本文稍后将讨论)不能与SSL3.0一起使用。

Internet Explorer 6是唯一仍然使用SSL3.0的浏览器。因此,除非仍然需要支持旧版Internet Explorer 6浏览器,否则应禁用SSL 3.0,如稍后所述。

禁用TLS 1.0和1.1

除非需要支持旧版浏览器,否则还应禁用TLS 1.0和1.1。PCI DSS规定自2018年6月30日起不再使用TLS 1.0,并强烈建议禁用TLS 1.1; 因为这些协议可能会受到FREAK,POODLE,BEAST和CRIME等漏洞的影响。

除非需要支持旧版浏览器,否则还应禁用TLS 1.0和1.1。PCI DSS规定自2018年6月30日起不再使用TLS 1.0,并强烈建议禁用TLS。如果仍然支持TLS 1.0是业务需求,强烈建议禁用TLS 1.0压缩以避免CRIME攻击

此外,禁用弱密码也很重要。应禁用DES和RC4等弱密码。DES可以在几个小时内被破坏,而RC4被发现比以前想象的要弱。虽然可能已经建议过去使用RC4来缓解BEAST攻击,但鉴于对RC4密码的最新攻击,微软再次发布了一个建议。还值得注意的是,PCI DSS也禁止使用RC4批量密码。

禁用TLS 1.0和1.1可能会影响以下用户代理(及其旧版本)(不同操作系统上的特定用户代理版本可能会有所不同)。

  • Android 4.3
  • Chrome 29
  • Firefox 26
  • Internet Explorer 10
  • Java 6u45,7u25
  • OpenSSL 0.9.8y
  • Safari 6.0

组态

根据您的业务用例(例如,需要支持旧版浏览器和法规要求),您可能需要选择稍微不同的密码套件配置。的Mozilla的SSL配置生成器可以用于获得根据您的要求使用不同的浏览器“配置文件”(现代,中间和旧配置文件)的最佳TLS配置。

以下是现代配置文件的细分(最老的兼容客户端:Firefox 27,Chrome 30,Windows 7上的Internet Explorer 11,Edge,Opera 17,Safari 9,Android 5.0和Java 8)

根据所讨论的Web服务器(例如Apache HTTP Server,Nginx ...),启用/禁用TLS协议和支持的TLS密码套件的语法会略有不同。

Nginx的

# Enable TLSv1.2, disable SSLv3.0, TLSv1.0 and TLSv1.1
ssl_protocols TLSv1.2; # Enable modern TLS cipher suites
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; # The order of cipher suites matters
ssl_prefer_server_ciphers on;

Apache HTTP Server

# Enable TLSv1.2, disable SSLv3.0, TLSv1.0 and TLSv1.1
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 # Enable modern TLS cipher suites
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 # The order of cipher suites matters
SSLHonorCipherOrder on # Disable TLS compression
SSLCompression off # Necessary for Perfect Forward Secrecy (PFS)
SSLSessionTickets off

下表将上面的密码套件字符串分解为优先顺序(最佳密钥交换算法/最强加密优先)。

   - 此处提供了有关OpenSSL支持的密码的更多信息。
订购 密钥交换算法 认证算法 批量加密算法 Mac算法
#1 椭圆曲线Diffie-Hellman(ECDH) 椭圆曲线数字签名算法(ECDSA) Galois计数器模式下的AES 256(AES256-GCM) SHA384
#2 椭圆曲线Diffie-Hellman(ECDH) RSA Galois计数器模式下的AES 256(AES256-GCM) SHA384
#3 椭圆曲线Diffie-Hellman(ECDH) 椭圆曲线数字签名算法(ECDSA) ChaCha20(CHACHA20) POLY1305
#4 椭圆曲线Diffie-Hellman(ECDH) RSA ChaCha20(CHACHA20) POLY1305
#5 椭圆曲线Diffie-Hellman(ECDH) 椭圆曲线数字签名算法(ECDSA) Galois计数器模式下的AES 128(AES128-GCM) SHA256
#6 椭圆曲线Diffie-Hellman(ECDH) RSA Galois计数器模式下的AES 128(AES128-GCM) SHA256
#7 椭圆曲线Diffie-Hellman(ECDH) 椭圆曲线数字签名算法(ECDSA) AES 256(AES256) SHA384
#8 椭圆曲线Diffie-Hellman(ECDH) RSA AES 256(AES256) SHA384
#9 椭圆曲线Diffie-Hellman(ECDH) 椭圆曲线数字签名算法(ECDSA) AES 128(AES128) SHA256
#10 椭圆曲线Diffie-Hellman(ECDH) RSA AES 128(AES128) SHA256

该字符串在现代浏览器和TLS / SSL客户端中提供最强的加密(Galois计数器模式中的AES仅在TLS 1.2中受支持)。此外,如果服务器和TLS / SSL客户端都支持它,则字符串还提供Perfect Forward Secrecy(SSLSessionTicket必须设置s才能off在Apache HTTP Server中使用)。

TLS / SSL密码强化的建议的更多相关文章

  1. Node.js TLS/SSL

    Stability: 3 - Stable 可以使用 require('tls') 来访问这个模块. tls 模块 使用 OpenSSL 来提供传输层(Transport Layer)安全性和(或)安 ...

  2. php实现https(tls/ssl)双向认证

    php实现https(tls/ssl)双向认证 通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端. 但在一些安全性较高的场景,如银行, ...

  3. [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)

    本文转自:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj150597.aspx 本主题将展示在使用 StreamSocket 功能时,如 ...

  4. Security基础(三):OpenSSL及证书服务、邮件TLS/SSL加密通信

    一.OpenSSL及证书服务 目标: 本案例要求熟悉OpenSSL工具的基本使用,完成以下任务操作: 使用OpenSSL加密/解密文件 搭建企业自有的CA服务器,为颁发数字证书提供基础环境 方案: 使 ...

  5. 邮件服务TLS/SSL,CA证书

     邮件服务TLS/SSL,CA证书 案例1:OpenSSL及证书服务 案例2:邮件TLS/SSL加密通信 1 案例1:OpenSSL及证书服务 1.1 问题 本案例要求熟悉OpenSSL工具的基本使用 ...

  6. IBM AppScan 安全扫描:支持弱 SSL 密码套件 分类: 数据安全 2014-06-28 11:34 1844人阅读 评论(0) 收藏

    问题描述: ​ 解决方法: 1.Server 2008(R2) 根据appScan的修订建议访问地址:http://msdn.microsoft.com/en-us/library/windows/d ...

  7. 使用sslsplit嗅探tls/ssl连接

    首先发一个从youtube弄到的sslsplit的使用教程 http://v.qq.com/page/x/k/s/x019634j4ks.html 我最近演示了如何使用mitmproxty执行中间人攻 ...

  8. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  9. Android : 关于HTTPS、TLS/SSL认证以及客户端证书导入方法

    一.HTTPS 简介 HTTPS 全称 HTTP over TLS/SSL(TLS就是SSL的新版本3.1).TLS/SSL是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传 ...

随机推荐

  1. 惊奇!用Java也能实现比特币系统

    最近区块链技术突然爆火,身边做技术的朋友茶余饭后不谈点区块链什么的都被认为是跟不上时代了,为啥会这样了? 这其实跟比特币价格去年的突飞猛进是分不开的,比特币价格从去年初不到一千美金到今年初最高接近两万 ...

  2. [Swift]LeetCode125. 验证回文串 | Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  3. [Swift]LeetCode135. 分发糖果 | Candy

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  4. [Swift]LeetCode581. 最短无序连续子数组 | Shortest Unsorted Continuous Subarray

    Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...

  5. PHP算法之冒泡排序

    //冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array = [11,5,4,58 ...

  6. python之PIL库(Image模块)

    PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...

  7. Unable to preventDefault inside passive event listener due to target being treated as passive

    Unable to preventDefault inside passive event listener due to target being treated as passive 今天在做项目 ...

  8. 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)

    本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...

  9. qt sleep

    原文 Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应? QThr ...

  10. C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...