赞
踩
- import java.io.UnsupportedEncodingException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
-
- public static String getDigest(String msg) throws NoSuchAlgorithmException, UnsupportedEncodingException
- {
- final MessageDigest md5 = MessageDigest.getInstance("MD5");
- final byte[] byteArray = msg.getBytes("UTF-8");
- final byte[] md5Bytes = md5.digest(byteArray);
-
- //将生成的md5Bytes转成16进制形式
- final StringBuffer hexValue = new StringBuffer();
- for (int i = 0; i < md5Bytes.length; i++)
- {
- int val = ((int) md5Bytes[i]) & 0xff;
- if (val < 16)
- hexValue.append("0");
- hexValue.append(Integer.toHexString(val));
- }
- return hexValue.toString();
-
- }

在当前世界中,网络已成为不可或缺的元素。它将原来遥不可及的事物,方便快捷的联系到一起。为了充分利用网络所带来的便捷,越来越多的企业选择将信息发布在网络上。电子商务、物联网、云计算与服务,也都在计划与实施中。与此同时,网络的普及,也给信息安全带来了挑战。如何保证信息在不可靠网络中的安全传输,成为企业 IT 实施优先考虑的问题。
SSL 是指安全套接字(Secure Socket Layer),是应用最为广泛的安全协议。它在 TCP/IP 协议之上提供了一条安全通道,可以保证在不安全网络环境下的数据安全。它支持各种加密算法、数字签名、数字证书,可以防御常见的网络攻击。WebSphere MQ 对 SSL 具有很好的支持,从而保证消息在网络中安全的传送。本文在介绍 SSL 的基础上,以实例方式详细描述了如何在 MQ 中实现基于 SSL 的安全传输。文章中的实例,主要基于 MQ 7.0.1.9,同时也会介绍新版本 MQ 7.1 及 MQ 7.5 的变化。
网络攻击类型及应对策略
网络将数以千万计的机器连接在一起,环境复杂多变,所以网络攻击也是花样百出。这里,根据攻击对消息产生的影响,主要可以划分为三类:窃听、篡改、仿冒。这三种攻击方式,分别会破坏消息的私密性、完整性和通信双方的互信。针对这些攻击的特点,SSL 提供了可靠的防御策略。
1)窃听与加密
窃听,即偷听别人的谈话,在网络中意味着拦截消息并偷看其中的内容。那么,为了避免消息被别人窃听,就需要对消息进行加密。这样,即使消息被攻击者截获,他们也无法轻松获知其中的内容。
加密即按照一定的规则(加密算法)将原消息(明文)转化为对窃听者不可读的密文。通信双方共享加密的规则,所以消息接收者可以将密文再转回可读的明文。密钥是一个随机字符串,是加密及解密不可或缺的元素。发送者使用密钥对明文加密,接收者使用密钥对密文解密。
通信双方可以共享一个相同的密钥,用于加密和解密。这称为对称加密或者秘密密钥加密。这种方法的优势是速度快,劣势是难以安全的传递密钥,特别是有很多通信对象时。要安全的将密钥交到通信方,你需要和每一个人见面。为了解决这个问题,就出现了不对称加密或者公共密钥加密。使用这种方法,每一个通信对象都有一个密钥对:公钥和私钥。发送者使用对方的公钥加密,接收者使用自己的私钥解密。因为公钥是公开的,这就解决了密钥传递的问题。但是,也造成了一些性能的损失。在实际的应用中,为了避免密钥传递问题同时保证性能,通常使用不对称加密来交换密钥,然后使用对称加密传输数据。
加密是一个非常重要,也非常活跃的研究领域,有非常多的加密算法。例如,数据加密标准(DES),三重 DES,RC2 和 RC4 等。
2)篡改与消息摘要
篡改是指攻击者拦截并修改消息的内容。加密不能避免消息被修改,接收者也无法判断消息是否被修改过。这里,就需要用到消息摘要(Message Digest)技术。消息摘要是一个表示消息特征的定长字符串。它有两个重要的特征:不可逆性和抗冲突性。不可逆性是指从消息可以计算出消息概要,但是从消息摘要基本不可能得到消息;抗冲突性是指要想产生具有相同摘要值的两条消息是相当困难的。这两个特性,使消息摘要可以用来验证消息的完整性。发送者使用摘要算法计算出消息摘要,并随同消息发送给对方;接收者收到消息以后,同样会根据消息计算出消息摘要 , 并和收到的摘要对比。如果两者相同,则表示消息没有被篡改。
在实际应用中,消息摘要很少被单独使用,通常用于数字签名和消息认证码(MAC)。消息认证码是基于消息和密钥生成的消息摘要。它在验证完整性同时,可以在一定程度上完成用户验证功能。数字签名是经过加密的消息摘要。
(PS:似乎就是消息被篡改了我必须知道,从而发现并处理这个篡改事件)
3)仿冒与数字证书
仿冒即假冒别人进行通信。消息认证码可以用来验证消息的发送者。数字签名则更进一步,具有不可抵赖性。因为数字签名是使用发送者私钥加密的消息摘要,只有发送者才能产生。这一切似乎都很完美,使用加密防止窃听,使用摘要防止篡改,使用数字签名防止仿冒,似乎不要什么数字证书。
事实当然不是这样,下面的攻击方式将瓦解以上所有的防线。这就是中间人攻击(man-in-the-middle attack)。在通信双方交换公钥的过程中,攻击者拦截双方的公钥,并将自己的密钥发送给通信双方。这样,通信双方就会使用攻击者的密钥加密。在这样情况下,所有的加密、签名都失效了。中间人攻击细节如下图所示:
图 1.中间人攻击
从上图可以看出,第 1, 2, 3, 4 步是公钥交换过程。在此过程中,攻击者获得了发送方和接收方的公钥,而将自己的公钥发送给通信双方。第 5, 6, 7, 8 步是发送消息的过程。在此过程中,发送方和接收方都是用攻击者公钥加密,而攻击者截获数据后重新使用通信双方公钥加密,这就使双方难以察觉攻击者的存在。
要防范中间人攻击,就需要使用数字证书,这里,数字证书主要指由专门的证书颁发机构(CA)授权的证书,称为 CA 证书。CA 证书将证书属主信息和公钥绑定到一起。证书颁发机构负责验证证书申请者的身份信息。通过可信的第三方(CA),通信方可以向任何人证明其拥有的公钥,其他人也可以通过 CA 验证其证书真伪,这就阻止了中间人攻击。CA 证书一般包含所有者的公钥 , 所有者的专有名称 , 签发证书的 CA 的专有名称 , 证书开始生效的日期 , 证书过期日期等信息。
与 CA 证书相对应的,还有自签署证书。
自签署证书一般用在测试环境中。在后面的章节中,会使用自签署证书实现基于 SSL 的安全连接。
SSL 握手
SSL 连接实现主要分为两部分:SSL 握手和数据传输。前者使用 SSL 握手协议建立连接,后者使用记录协议传输数据。这里,主要介绍 SSL 握手流程。握手是 SSL 客户端和 SSL 服务器端完成认证,并确定用于数据传输的加密密钥的过程。这里,SSL 客户端是指主动发起连接的一端,不要和 MQ 客户端混淆。SSL 握手具体流程如下:
在 SSL 连接建立后,将开始遵循记录协议对数据进行传输。
WebSphere MQ SSL 配置与管理
WebSphere MQ 支持安全套接字协议(SSL)和传输层安全协议(TLS,是 SSL 的后续版本)。在本章中,主要介绍 GSKit,以及与 SSL/TLS 相关的队列管理器属性及通道属性。用户可以使用 MQ 资源管理器设置这些属性,也可以使用 MQSC 命令设置。
MQ 与 GSKit
MQ 对 SSL 的支持,是通过 GSKit(Global Security Kit)实现的。GSkit 提供实现 SSL 所必须的函数库及工具,被应用于很多 IBM 产品。
在 MQ 7.0 及以前的版本中,GSKit 是单独安装的,版本是 GSKit V7.0。从 MQ 7.0.1 开始,引入 GSKit V8.0 作为可选版本。在 MQ 后续版本 MQ 7.1 和 MQ 7.5 中 GSKit V8.0 完全取代 GSKit 7.0,成为默认版本并集成到 MQ 安装包中。
与 GSKit V7.0 相比,GSKit V8.0 支持新的更安全的散列算法 SHA-2,支持所有 Java 环境中的密钥重置,支持更严格的 FIPS 认证以及多语言的错误输出。具体的细节,请参考 MQ 信息中心文档。
GSKit V7.0 和 GSKit V8.0 可以共存于同一系统中,不同的队列管理器可以选择使用不用的 GSKit 版本。
此外,GSKit V8.0 还集成了 GSKCapiCmd 命令,用于管理密钥、证书请求及证书。同时,用户也可 iKeyman (IBM Key Management)工具实现同样的功能。一般来说,iKeyman 可以随 MQ 一起安装,并且具有 GUI 界面,使用比较方便。
其中SSL握手就是使用的HMAC-MD5,俗称challenge协议,回来再详细介绍
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。