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. 安装部署jumpserver3.0

    1.安装依赖包yum -y install git readline-devel automake autoconf2.下载 jumpservergit clone https://github.co ...

  2. Prometheus使用入门

    Monitoring with Prometheus读书笔记 原书见: https://www.safaribooksonline.com/library/view/monitoring-with-p ...

  3. Javascript sort方法

    sort()方法用于对数组的元素进行排序 语法:array.Object.sort(sortBy) sortBy:可选.规定排序顺序.必须是函数 返回值:对数组的引用.数组在原数组上进行排序,不生成副 ...

  4. mac缺少librt问题记录

    在mac下编译一个程序的时候遇到错误 ld: library not found for -lrt librt.so主要是glibc对real-time部分的支持.所以一般含有#include< ...

  5. qcharts编译

    编译环境vs2013+qt5.5.1+perl5 qchart源码在git上自己下载,或者在此下载,参考文档:Qt Charts 5.7.0 安装教程,这篇文章是使用mingw的方式编译qcharts ...

  6. 设计模式java实现合集

    http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 桥接模式:http://blog.csdn.net/jason05 ...

  7. JS 中 原生方法 (四) --- Object

    Javascript 中 str. arr.date.obj 等常见的原生方法总结 本文也说主要阐释了 Javascript 中的基础类型和 引用类型的自带方法,那么熟悉的同学又可以绕道了 总是绕道, ...

  8. 什么是Web Server

    WebService到底是什么? 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. WebService平台技术 XML+XSD,SOAP和WSDL就是构成WebSer ...

  9. SpringBoot读取yml中的配置,并分离配置文件

    前言 在项目中经常遇到需要读取配置文件中的配置信息,这些配置信息之所以不写在代码中是因为实际项目发布或者部署之后会进行更改,而如果写在代码中编译之后没有办法进行修改. 之前使用的是properties ...

  10. windows下使用jenkins持续集成.net项目

    前言 随着微服务的兴起,原先一个庞大的项目,被切分一个个功能独立的微服务,虽然使得业务系统的扩展性和维护性得到提升,但是也加大了维护人员的工作量.有的系统由成百上千个微服务组成,如果每次有修改,都要手 ...