[055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇
SSL 3.0曝出高危漏洞
2014年10月15日,Google研究人员发布SSL 3.0协议存在一个非常严重的漏洞,该漏洞可被黑客用于截取浏览器与server之间进行传输的加密数据,如网银账号、邮箱账号、个人隐私等等。SSL 3.0的漏洞同意攻击者发起降级攻击,即欺骗浏览器说“server不支持更安全的安全传输层(TLS)协议”,然后强制其转向使用SSL 3.0,在强制浏览器採用SSL 3.0与server进行通讯之后,黑客就能够利用中间人攻击来解密HTTPs的cookies,Google将其称之为POODLE攻击,若受到POODLE攻击,全部在网络上传输的数据将不再加密。
笔者也是在微信公众平台发出“公众平台调整SSL安全策略,请开发人员注意升级”的通知时,才開始关注SSL3.0漏洞,才開始意识到问题的严重性。通知的主要内容:“近一段时间HTTPS加密协议SSL曝出高危漏洞,可能导致网络中传输的数据被黑客监听,对用户信息、网络账号password等安全构成威胁。为保证用户信息以及通信安全,微信公众平台将关闭掉SSLv2、SSLv3版本号支持,不再支持部分使用SSLv2、 SSLv3或更低版本号的client调用。请仍在使用这些版本号的开发人员于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服务端或client代码之前设置系统属性“javax.net.debug”为“ssl,handshake”就能够将SSL通信日志输出到控制台。开启SSL通信日志的代码例如以下:
System.setProperty("javax.net.debug", "ssl,handshake");
以下是笔者測试调用微信公众平台接口获取access_token所产生的SSL通信日志的一部分。从日志中能够看到,这次通信过程一共用到了SSLv2和TLSv1两种协议。当中,SSLv2协议用于client向server发送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
怎样设置SSLclient採用哪种协议?
1、在Java中,假设採用 SSLSocket 或 SSLEngine 实现SSLclient,能够通过 setEnabledProtocols(String[] protocols) 方法设置SSLclient能够使用的协议。演示样例代码片断例如以下:
SocketFactory sf = SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) sf.createSocket("localhost", 8443);
// 设置SSLclient使用的协议
String[] protocols = { "TLSv1" };
socket.setEnabledProtocols(protocols);
2、在Java中,假设採用 HttpsURLConnection 实现SSLclient,能够在 HttpsURLConnection 的相关代码之前通过系统属性“https.protocols”来指定SSLclient使用的协议。代码例如以下:
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" />
假设读者採用其它Webserver对外提供https服务,比如:Apache、WebLogic、WebSphere等,也都有相似的属性设置服务端所支持的SSL协议,笔者就不在此赘述了。相信读完本篇文章,开发人员应该能够轻松应对SSL 3.0 Poodle漏洞,同一时候,也应该清楚公众平台调整SSL安全策略后怎样改动自己的程序代码。
假设认为博客的文章对你有所帮助,请通过留言或关注下方的微信公众账号来支持柳峰(微信号:liuyq10)!
小q机器人(xiaoqrobot) 贵阳我的家(gywodejia)
转帖请注明本文出自柳峰的博客(http://blog.csdn.net/lyq8479),请尊重他人的辛勤劳动成果,谢谢!
[055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇的更多相关文章
- SSL 3.0曝出Poodle漏洞的解决方案
tomcat 各版本对ssl解决方案的配置:tomcat6: <Connector port="443" protocol="org.apache.coyote.h ...
- 微信支付的SDK曝出重大漏洞(XXE漏洞)
一.背景 昨天(2018-07-04)微信支付的SDK曝出重大漏洞(XXE漏洞),通过该漏洞,攻击者可以获取服务器中目录结构.文件内容,如代码.各种私钥等.获取这些信息以后,攻击者便可以为所欲为,其中 ...
- 0.4 IDEA报错以及解决方式
0.4 IDEA报错以及解决方式一.端口被占用 [WARNING] FAILED SelectChannelConnector@0.0.0.0:8080: java.net.BindException ...
- WiFi曝出安全漏洞几近“裸奔”:运营商能借机收割一波红利吗?
作为大众生活中不可或缺的基础架构,也是智能生活普及的推动性力量,运营商的重要性毋庸置疑.但无奈的是,一直以来运营商都似乎是站在了大众的"对立面".看似光鲜亮丽,但在壮观的 ...
- SSL 3.0 POODLE攻击信息泄露漏洞_CVE-2014-3566
0x01 SSL3.0简介 我们知道最开始HTTP协议传输数据的时候,数据是不加密的,不安全的,网景公司针对此,推出了SSL(secure socket layer)安全套接层.SSL3.0时,IET ...
- Linux 曝出严重安全漏洞,受限用户亦可提权至 Root 身份运行任意命令!(内附解决方案)
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- OpenSSL再曝CCS注入漏洞-心伤未愈又成筛子
太戏剧了,昨晚看了佳片有约,还不错,2012版的<完美回顾>,像我这样的人依旧选择用电视或者去影院看电影,在没有中间插播广告的时候,体验憋尿得过程中,总是能突然有非常多的想法,这是用电脑或 ...
- PHPcms v9.6.0 文件上传漏洞
title: PHPcms v9.6.0 文件上传漏洞 date: 2021-4-5 tags: 渗透测试,CVE漏洞复现,文件上传 categories: 渗透测试 CVE漏洞复现 文件上传 PHP ...
- haproxy 关闭ssl 3.0 加密
global log 127.0.0.1 local3 maxconn 65535 chroot /usr/local/haproxy uid 500 gid 500 daemon ssl-defau ...
随机推荐
- USACO chapter1
几天时间就把USACO chapter1重新做了一遍,发现了自己以前许多的不足.蒽,现在的程序明显比以前干净很多,而且效率也提高了许多.继续努力吧,好好的提高自己.这一章主要还是基本功的训练,没多少的 ...
- cocos2d-x游戏开发(十六)帧动画
欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11775745 本来想写一下帧动画的,搜了一下网上好像有一大把,就懒得写了,直接贴代码. // ...
- [置顶] js模板方法的思路及实现
在js中如何实现设计模式中的模板方法? 思路的产生必然要求熟悉js,如何实现?就很简单了,都知道在js中如果定义两个相同名称的方法,前一个方法就会被后一个方法覆盖掉,使用此特点就可以实现模板方法. 例 ...
- poj 1961 Period(KMP训练指南例题)
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 11356 Accepted: 5279 Descripti ...
- ICE
一.Slice-to-C++映射 1.引言 其映射定义:怎样把Slice数据类型翻译成C++类型,客户怎样调用操作.传递参数.处理错误. C++映射完全是线程安全的.例如,类的引用机制针对并行访问机制 ...
- 【JS控制图片显示的大小(图片等比例缩放)】
效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Foundation 框架 NSString常用总结
iOS开发过程中,从始至终都会和NSString打交道,在此总结一下NSString的常用的方法,在以后的学习过程中用到的方法也会继续添加 NSString类是Foundation框架中得不可变字符串 ...
- 移动端纯原生JS不依赖ajax后台服务器实现省市县三级联动
最近好多天没有更新文章,是因为公司的项目忙的不行.今天有点时间,就突然想起在移动端项目中遇到三级联动的问题,网上查了很多资料,都是依赖各种插件,或者晦涩难于理解.于是,自己决定写一个出来. 当然,没有 ...
- JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性
27.01 反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...
- php内核一 一次请求与结束
php开始 到 结束 有两个阶段 请求开始之间的初始化阶段 请求之后的结束处理阶段 开始阶段: 模块初始化 模块激活 模块初始化: 在整个SAPI生命周期内,只执行一次(apache服务器启动的 ...