SSL 3.0曝出Poodle漏洞的解决方案-----开发者篇(转自:http://blog.csdn.net/lyq8479/article/details/40709175)...
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通信日志的代码如下:
- System.setProperty("javax.net.debug", "ssl,handshake");
下面是笔者测试调用微信公众平台接口获取access_token所产生的SSL通信日志的一部分。从日志中可以看到,这次通信过程一共用到了SSLv2和TLSv1两种协议。其中,SSLv2协议用于客户端向服务器发送hello消息,而TLSv1协议用于握手、交换密钥和数据加密。
- *** ClientHello, TLSv1
- ...
- main, WRITE: TLSv1 Handshake, length = 75
- main, WRITE: SSLv2 client hello message, length = 101
- main, READ: TLSv1 Handshake, length = 81
- *** ServerHello, TLSv1
- ...
- main, READ: TLSv1 Handshake, length = 3747
- ...
- main, WRITE: TLSv1 Change Cipher Spec, length = 1
- ...
- main, WRITE: TLSv1 Handshake, length = 48
- main, READ: TLSv1 Change Cipher Spec, length = 1
- main, READ: TLSv1 Handshake, length = 48
- ...
- main, WRITE: TLSv1 Application Data, length = 336
- main, READ: TLSv1 Application Data, length = 336
如何设置SSL客户端采用哪种协议?
1、在Java中,如果采用 SSLSocket 或 SSLEngine 实现SSL客户端,可以通过 setEnabledProtocols(String[] protocols) 方法设置SSL客户端能够使用的协议。示例代码片断如下:
- SocketFactory sf = SSLSocketFactory.getDefault();
- SSLSocket socket = (SSLSocket) sf.createSocket("localhost", 8443);
- // 设置SSL客户端使用的协议
- String[] protocols = { "TLSv1" };
- socket.setEnabledProtocols(protocols);
2、在Java中,如果采用 HttpsURLConnection 实现SSL客户端,可以在 HttpsURLConnection 的相关代码之前通过系统属性“https.protocols”来指定SSL客户端使用的协议。代码如下:
- 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服务端所支持的协议。示例代码如下:
- <Connector
- port="8443"
- protocol="HTTP/1.1"
- SSLEnabled="true"
- maxThreads="150"
- scheme="https"
- secure="true"
- clientAuth="false"
- 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,示例代码如下:
- <Connector
- port="8443"
- protocol="HTTP/1.1"
- SSLEnabled="true"
- maxThreads="150"
- scheme="https"
- secure="true"
- clientAuth="false"
- 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)...相关推荐
- [054] SSL 3.0曝出Poodle漏洞的解决方案-----网民篇
SSL 3.0曝出高危险漏洞 2014年10月15日,Google研究人员公布SSL 3.0协议存在一个非常严重的漏洞,更让人不安的是几乎所有的浏览器都支持SSL 3.0协议.SSL 3.0的漏洞可被 ...
- (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
从接触公众号到现在,通过不断积累学习,对如何调用微信提供接口有了一定的见解.当然在开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开 ...
- 本地编译Hadoop2.8.0源码总结和问题解决(转自:http://blog.csdn.net/young_kim1/article/details/50324345)
编译准备 1.下载所需的软件 先去官网下载hadoop2.8.0源码并解压,打开解压目录下的BUILDING.txt,编译过程和需要的软件其实就是根据这个文档里的描述来的. (可以通过命令下载:wge ...
- Android 8 WiFi断流,安卓8.0曝出重大bug,比国产手机WiFi断流严重多了
原标题:安卓8.0曝出重大bug,比国产手机WiFi断流严重多了 某品牌的部分用户会经常将"WiFi断流"挂在嘴边,这到底是啥意思?顾名思义就是手机正常运行时突然断开WiFi连接, ...
- android休眠 wifi 断流,WiFi断流算什么!安卓8.0曝出重大bug,严重多了
原标题:WiFi断流算什么!安卓8.0曝出重大bug,严重多了 之前某品牌的手机有时会出现手机正常运行时突然断开WiFi连接的情况,大家调侃为WiFi断流. 虽然这种情况发生不频繁,但是也让用户苦不堪 ...
- 二十余款Linksys路由器曝出安全漏洞,或可被远程控制
本文讲的是 二十余款Linksys路由器曝出安全漏洞,或可被远程控制, 近日,有研究人员透露,Linksys路由器中存在未修补的安全漏洞,这些漏洞将使数以千计的设备受到攻击. 周三,IOActive高 ...
- Java 轻量级框架Spring曝出0day漏洞
首语 3月29日,Spring框架曝出RCE 0day漏洞.已经证实由于 SerializationUtils#deserialize 基于 Java 的序列化机制,可导致远程代码执行 (RCE),使 ...
- IE再次曝出安全漏洞 微软表示正在调查
今天,微软官网发表了安全公告KB980088,声称正在调查一个近日被公布的新IE浏览器安全漏洞.据了解,该漏洞会导致信息泄露,影响所有Windows XP用户以及那些关闭了IE保护模式的用户. 根据微 ...
- WiFi曝出安全漏洞几近“裸奔”:运营商能借机收割一波红利吗?
作为大众生活中不可或缺的基础架构,也是智能生活普及的推动性力量,运营商的重要性毋庸置疑.但无奈的是,一直以来运营商都似乎是站在了大众的"对立面".看似光鲜亮丽,但在壮观的大楼下面却 ...
最新文章
- 间谍新高度:航空航天探测器被当作间谍武器
- 成绩不超过100的C语言,输入若干个学生的百分制成绩,计算平均分并输出.输入-1表示结束,若输入的成绩超过100,则需重新输入.c语言...
- AI时代的交换机什么样?华为CloudEngine 16800告诉你!
- 给自己的网址加上https,添加ssl证书(springboot项目)
- webpack多个Html,使用webpack构建多页面应用
- oracle语言的分类及其常见的系统函数
- xp升级windows7_微软大升级!Windows系统电脑将告别杀毒软件
- React技术栈梳理
- windows之2012安装vs2017编译环境失败
- FISCO BCOS(四)——— 在Ubantu上安装python3.8
- PMP培训机构怎么选?
- 听音扒谱app_掌握这些,你也可以轻松扒谱(下)
- 机器人运动学基础——旋转矩阵
- k8s服务器修改ip,k8s的kubeadm的master更换ip
- TensorFlow学习日记9
- 访问html 403 iis,IIS 403 错误详细原因 及解决办法总结
- 基于ssh的后台新闻管理系统
- linux 下的文本处理——除去重复行uniq命令
- 一个可以截取其他App素材的办法Visual Studio Code
- 实操信贷场景中的反欺诈模型
热门文章
- WebSocket使用sendObject(Object arg0)向页面方法发送对象
- 判断线程池中的线程是否全部执行完毕
- java 栈队列区别是什么意思_java栈和队列的区别
- c++primer 第2章 书上例子 资料截图等
- ubuntu atpdpkg
- 关于CSS HACK
- 精通Python网络爬虫:核心技术、框架与项目实战.1.4 网络爬虫的类型
- Httpd2.4简介及CenOS6.6下编译安装
- 2013再见,2014你好!
- 类的变量初始化是直接使用初始化器还是放在构造函数中?