SSL 3.0曝出高危漏洞

2014年10月15日,Google研究人员公布SSL 3.0协议存在一个非常严重的漏洞,该漏洞可被黑客用于截取浏览器与服务器之间进行传输的加密数据,如网银账号、邮箱账号、个人隐私等等。SSL 3.0的漏洞允许攻击者发起降级攻击,即欺骗浏览器说“服务器不支持更安全的安全传输层(TLS)协议”,然后强制其转向使用SSL 3.0,在强制浏览器采用SSL 3.0与服务器进行通讯之后,黑客就可以利用中间人攻击来解密HTTPs的cookies,Google将其称之为POODLE攻击,若受到POODLE攻击,所有在网络上传输的数据将不再加密。

笔者也是在微信公众平台发出“公众平台调整SSL安全策略,请开发者注意升级”的通知时,才开始关注SSL3.0漏洞,才开始意识到问题的严重性。通知的主要内容:“近一段时间HTTPS加密协议SSL曝出高危漏洞,可能导致网络中传输的数据被黑客监听,对用户信息、网络账号密码等安全构成威胁。为保证用户信息以及通信安全,微信公众平台将关闭掉SSLv2、SSLv3版本支持,不再支持部分使用SSLv2、 SSLv3或更低版本的客户端调用。请仍在使用这些版本的开发者于11月30日前尽快修复升级。”

知识普及1:SSL协议要点

SSL(Secure Sockets Layer 安全套接层)是一种基于Web应用的安全通信协议,最早由Netscape(网景)公司提出。SSL介于TCP协议和应用层协议之间,主要作用就是将HTTP、FTP等应用层的数据进行加密然后依托可靠的TCP协议在互联网上传输到目的地,其中最典型的应用就是https。

SSL提供3个基本的安全服务

1)身份合法性:数据发送方和接收方要确认彼此身份,要确保各自的身份不会被冒充。

2)数据机密性:所有传输的数据都进行加密,并且要确保即使数据被截获也无法破解。

3)数据完整性:确保收到的数据与发送方发出的数据一致,没有被篡改。

SSL协议主要采用的数据加密算法

1)非对称加密算法:数据加密和解密使用不同的密钥,如RSA公钥加密算法。优点是安全级别高,很难被破解;缺点是加密解密的速度慢,因此只适用于小量数据的加密。SSL协议采用非对称加密算法实现数字签名,验证数据发送方(或接收方)的身份,同时也用非对称加密算法交换密钥(用于数据加密的对称加密算法的密钥,以及用于数据完整性验证的MAC算法)。

2)对称加密算法:数据加密和解密使用同一个密钥,如DES、3DES、RC4等都是对称加密算法。优点是加解密速度快,适用于大数据量的加密,但安全性较差。SSL协议采用对称加密算法对传输的数据进行加密。

3)MAC算法:Message Authentication Codes,即消息认证码算法,MAC含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥。SSL协议采用MAC算法来检验消息的完整性。

知识普及2:SSL协议的版本

目前在用的SSL协议主要有5个版本,分别是SSL2.0、SSL3.0、TLS1.0、TLS1.1和TLS1.2,这里的TLS(Transport Layer Security,传输层安全)协议是SSL协议的升级版。
在SSL协议曝出Poodle漏洞后,微信公众平台将取消对SSLv2、SSLv3两个版本的支持,浏览器及其他采用SSL协议的平台也会逐渐取消对SSLv2、SSLv3的支持,目前只建议使用TLSv1.0、TLSv1.1和TLSv1.2三个版本。

如何查看所采用的SSL协议?

在Java开发中,在SSL服务端或客户端代码之前设置系统属性“javax.net.debug”为“ssl,handshake”就能够将SSL通信日志输出到控制台。开启SSL通信日志的代码如下:

[java] view plaincopy
  1. System.setProperty("javax.net.debug", "ssl,handshake");

下面是笔者测试调用微信公众平台接口获取access_token所产生的SSL通信日志的一部分。从日志中可以看到,这次通信过程一共用到了SSLv2和TLSv1两种协议。其中,SSLv2协议用于客户端向服务器发送hello消息,而TLSv1协议用于握手、交换密钥和数据加密。

[plain] view plaincopy
  1. *** ClientHello, TLSv1
  2. ...
  3. main, WRITE: TLSv1 Handshake, length = 75
  4. main, WRITE: SSLv2 client hello message, length = 101
  5. main, READ: TLSv1 Handshake, length = 81
  6. *** ServerHello, TLSv1
  7. ...
  8. main, READ: TLSv1 Handshake, length = 3747
  9. ...
  10. main, WRITE: TLSv1 Change Cipher Spec, length = 1
  11. ...
  12. main, WRITE: TLSv1 Handshake, length = 48
  13. main, READ: TLSv1 Change Cipher Spec, length = 1
  14. main, READ: TLSv1 Handshake, length = 48
  15. ...
  16. main, WRITE: TLSv1 Application Data, length = 336
  17. main, READ: TLSv1 Application Data, length = 336

如何设置SSL客户端采用哪种协议?

1、在Java中,如果采用 SSLSocket 或 SSLEngine 实现SSL客户端,可以通过 setEnabledProtocols(String[] protocols) 方法设置SSL客户端能够使用的协议。示例代码片断如下:

[java] view plaincopy
  1. SocketFactory sf = SSLSocketFactory.getDefault();
  2. SSLSocket socket = (SSLSocket) sf.createSocket("localhost", 8443);
  3. // 设置SSL客户端使用的协议
  4. String[] protocols = { "TLSv1" };
  5. socket.setEnabledProtocols(protocols);

2、在Java中,如果采用 HttpsURLConnection 实现SSL客户端,可以在 HttpsURLConnection 的相关代码之前通过系统属性“https.protocols”来指定SSL客户端使用的协议。代码如下:

[java] view plaincopy
  1. System.setProperty("https.protocols", "TLSv1");

如何设置SSL服务端支持哪些协议?

1、在Java中,如果采用 SSLSocket 或 SSLEngine 实现SSL服务端,同样也是使用 setEnabledProtocols(String[] protocols) 方法设置SSL服务端支持的协议。

2、在Java中,如果是通过Tomcat对外提供https服务,可以通过设置%tomcat%/conf/server.xml中的sslProtocol属性指定SSL服务端所支持的协议。示例代码如下:

[html] view plaincopy
  1. <Connector
  2. port="8443"
  3. protocol="HTTP/1.1"
  4. SSLEnabled="true"
  5. maxThreads="150"
  6. scheme="https"
  7. secure="true"
  8. clientAuth="false"
  9. sslProtocol="TLS" />

sslProtocol属性的设置说明:

1)如果设置setProtocol="TLSv1",那么服务端将支持SSLv3和TLSv1;

2)如果设置setProtocol="TLSv1.1",那么服务端将支持SSLv3、TLSv1和TLSv1.1;

3)如果设置setProtocol="TLSv1.2",那么服务端将支持SSLv3、TLSv1、TLSv1.1和TLSv1.2。

如果服务端不支持SSLv3,只支持TLSv1、TLSv1.1和TLSv1.2,又该如何设置呢?这时需要设置另外一个属性sslEnabledProtocols,示例代码如下:

[html] view plaincopy
  1. <Connector
  2. port="8443"
  3. protocol="HTTP/1.1"
  4. SSLEnabled="true"
  5. maxThreads="150"
  6. scheme="https"
  7. secure="true"
  8. clientAuth="false"
  9. sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />

如果读者采用其他Web服务器对外提供https服务,例如:Apache、WebLogic、WebSphere等,也都有类似的属性设置服务端所支持的SSL协议,笔者就不在此赘述了。相信读完本篇文章,开发人员应该能够轻松应对SSL 3.0 Poodle漏洞,同时,也应该清楚公众平台调整SSL安全策略后如何修改自己的程序代码。

转载于:https://www.cnblogs.com/tangpu/p/4243554.html

SSL 3.0曝出Poodle漏洞的解决方案-----开发者篇(转自:http://blog.csdn.net/lyq8479/article/details/40709175)...相关推荐

  1. [054] SSL 3.0曝出Poodle漏洞的解决方案-----网民篇

    SSL 3.0曝出高危险漏洞 2014年10月15日,Google研究人员公布SSL 3.0协议存在一个非常严重的漏洞,更让人不安的是几乎所有的浏览器都支持SSL 3.0协议.SSL 3.0的漏洞可被 ...

  2. (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835

    从接触公众号到现在,通过不断积累学习,对如何调用微信提供接口有了一定的见解.当然在开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开 ...

  3. 本地编译Hadoop2.8.0源码总结和问题解决(转自:http://blog.csdn.net/young_kim1/article/details/50324345)

    编译准备 1.下载所需的软件 先去官网下载hadoop2.8.0源码并解压,打开解压目录下的BUILDING.txt,编译过程和需要的软件其实就是根据这个文档里的描述来的. (可以通过命令下载:wge ...

  4. Android 8 WiFi断流,安卓8.0曝出重大bug,比国产手机WiFi断流严重多了

    原标题:安卓8.0曝出重大bug,比国产手机WiFi断流严重多了 某品牌的部分用户会经常将"WiFi断流"挂在嘴边,这到底是啥意思?顾名思义就是手机正常运行时突然断开WiFi连接, ...

  5. android休眠 wifi 断流,WiFi断流算什么!安卓8.0曝出重大bug,严重多了

    原标题:WiFi断流算什么!安卓8.0曝出重大bug,严重多了 之前某品牌的手机有时会出现手机正常运行时突然断开WiFi连接的情况,大家调侃为WiFi断流. 虽然这种情况发生不频繁,但是也让用户苦不堪 ...

  6. 二十余款Linksys路由器曝出安全漏洞,或可被远程控制

    本文讲的是 二十余款Linksys路由器曝出安全漏洞,或可被远程控制, 近日,有研究人员透露,Linksys路由器中存在未修补的安全漏洞,这些漏洞将使数以千计的设备受到攻击. 周三,IOActive高 ...

  7. Java 轻量级框架Spring曝出0day漏洞

    首语 3月29日,Spring框架曝出RCE 0day漏洞.已经证实由于 SerializationUtils#deserialize 基于 Java 的序列化机制,可导致远程代码执行 (RCE),使 ...

  8. IE再次曝出安全漏洞 微软表示正在调查

    今天,微软官网发表了安全公告KB980088,声称正在调查一个近日被公布的新IE浏览器安全漏洞.据了解,该漏洞会导致信息泄露,影响所有Windows XP用户以及那些关闭了IE保护模式的用户. 根据微 ...

  9. WiFi曝出安全漏洞几近“裸奔”:运营商能借机收割一波红利吗?

    作为大众生活中不可或缺的基础架构,也是智能生活普及的推动性力量,运营商的重要性毋庸置疑.但无奈的是,一直以来运营商都似乎是站在了大众的"对立面".看似光鲜亮丽,但在壮观的大楼下面却 ...

最新文章

  1. 间谍新高度:航空航天探测器被当作间谍武器
  2. 成绩不超过100的C语言,输入若干个学生的百分制成绩,计算平均分并输出.输入-1表示结束,若输入的成绩超过100,则需重新输入.c语言...
  3. AI时代的交换机什么样?华为CloudEngine 16800告诉你!
  4. 给自己的网址加上https,添加ssl证书(springboot项目)
  5. webpack多个Html,使用webpack构建多页面应用
  6. oracle语言的分类及其常见的系统函数
  7. xp升级windows7_微软大升级!Windows系统电脑将告别杀毒软件
  8. React技术栈梳理
  9. windows之2012安装vs2017编译环境失败
  10. FISCO BCOS(四)——— 在Ubantu上安装python3.8
  11. PMP培训机构怎么选?
  12. 听音扒谱app_掌握这些,你也可以轻松扒谱(下)
  13. 机器人运动学基础——旋转矩阵
  14. k8s服务器修改ip,k8s的kubeadm的master更换ip
  15. TensorFlow学习日记9
  16. 访问html 403 iis,IIS 403 错误详细原因 及解决办法总结
  17. 基于ssh的后台新闻管理系统
  18. linux 下的文本处理——除去重复行uniq命令
  19. 一个可以截取其他App素材的办法Visual Studio Code
  20. 实操信贷场景中的反欺诈模型

热门文章

  1. WebSocket使用sendObject(Object arg0)向页面方法发送对象
  2. 判断线程池中的线程是否全部执行完毕
  3. java 栈队列区别是什么意思_java栈和队列的区别
  4. c++primer 第2章 书上例子 资料截图等
  5. ubuntu atpdpkg
  6. 关于CSS HACK
  7. 精通Python网络爬虫:核心技术、框架与项目实战.1.4 网络爬虫的类型
  8. Httpd2.4简介及CenOS6.6下编译安装
  9. 2013再见,2014你好!
  10. 类的变量初始化是直接使用初始化器还是放在构造函数中?