HTTPS协议
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道, HTTPS传输的是密文、端口443,HTTPS是 HTTP下加入SSL层,HTTPS的安全基础是SSL。
l 为Tomcat配置SSL功能的实验步骤
1.使用keytool创建或导入Web服务器所需要的证书。
1)Keytool工具介绍(是JDK自带的产生证书的工具)
相关命令介绍
在DOS命令窗口下用keytool – 各种命令
exportcert:输出证书(想带一个证书出去)
genkeypair:产生一个证书(mykey的密码可以和箱子密码 )
genseckey:产生一个密钥(-alias别名)
importcert:将外面的证书放进来
importcertkeystore:将很多证书
list:列出箱子所有证书
printcert:打印证书
storepasswd:改变箱子密码(默认changeit)
注:证书都放在当前登陆用户的主目录下面
2.修改server.xml文件,为Tomat增加一个支持SSL功能的连接器。取消其中对SSL连接器的注释,并根据安装的数字证书信息对一些参数进行调整即可。
注:一个Service元素代表一种服务,譬如,卖火车票是一个服务,而卖飞机票又是另一个服务,connector相当于某种服务下的一种售票方式,可以在火车站售票,也可以在售票点售票,engine用于处理买票的内部工作,不管通过哪种方式接收进来的卖票请求,内部卖票处理工作始终一样,即都是用这个engine。这个机制的好处在于有非常好的扩展性,如果想增加网上买票,只要再加上一个网上卖票的Connector即可,engine还是原来的。
3.编写一个用于检查访问协议是否是https的jsp程序,如果不是,则将请求重定向为https协议。
l 配置SSL网站
1).创建请求证书文件
完成了证书服务的安装后,就可以为要使用SSL安全机制的网站创建请求证书文件。点击“控制面板→管理工具”,运行“Internet 信息服务-IIS 管理器”,在管理器窗口中展开“网站”目录,右键点击要使用SSL的网站,选择“属性”选项,在网站属性对话框中切换到“目录安全性”标签页(图1),然后点击“服务器证书”按钮。在“IIS证书向导”对话框中选择“新建证书”,点击“下一步”按钮,选择“现在准备证书请求,但稍后发送”。在“名称”输入框中为该证书取名,然后在“位长”下拉列表中选择密钥的位长。接着设置证书的单位、部门、站点公用名称和地理信息,最后指定请求证书文件的保存位置。这样就完成了请求证书文件的创建。
2).申请服务器证书
完成上述设置后,还要把创建的请求证书文件提交给证书服务器。在服务器端的IE浏览器地址栏中输入“http://localhost/CertSrv/default.asp”。在“Microsoft 证书服务”欢迎窗口中点击“申请一个证书”链接,接下来在证书申请类型中点击“高级证书申请”链接,然后在高级证书申请窗口中点击“使用BASE64编码的CMC或PKCS#10....”链接,再打开刚刚生成的“certreq.txt”文件,将其中的内容复制到“保存的申请”输入框后点击“提交”按钮即可。
3).颁发服务器证书
点击“控制面板→管理工具”,运行“证书颁发机构”。在主窗口中展开树状目录,点击“挂起的申请”项(图2),找到刚才申请的证书,然后右键点击该项,选择“所有任务→颁发”。颁发成功后,点击树状目录中的“颁发的证书”项,双击刚才颁发的证书,在弹出的“证书”对话框的“详细信息”标签页中,点击“复制到文件”按钮,弹出证书导出向导,连续点击“下一步”按钮,并在“要导出的文件”对话框中指定文件名,最后点击“完成”。
4).安装服务器证书
重新进入IIS管理器的“目录安全性”标签页,点击“服务器证书”按钮,弹出“挂起的证书请求”对话框,选择“处理挂起的请求并安装证书”选项,点击“下一步”按钮,指定刚才导出的服务器证书文件的位置,接着设置SSL端口,使用默认的“443”即可,最后点击“完成”按钮。
在“目录安全性”标签页,点击安全通信栏的“编辑”按钮,勾选“要求安全通道(SSL)”选项,最后点击“确定”按钮即可启用SSL。
在完成了对SSL网站的配置后,用户只要在IE浏览器中输入“https://网站域名”就能访问该网站。
网络安全相关知识
HTTPS协议是一个安全通信通道,所以先详细介绍HTTPS协议,再介绍一些有关网络安全相关知识。
1.数字摘要与MD5/SHA算法
1)数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。
2)MD5(message-digest algorithm 5,信息-摘要算法),它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。其中MD5的典型应用是对一段信息(message)产生信息摘要(message-digest),以防止被篡改。
3)利用MD5算法得到一个信息摘要
import java.security.MessageDigest; public class MD5Test { public static void main(String[] args) throws Exception{ MessageDigest md = MessageDigest.getInstance("MD5"); byte[] digest = md.digest("slx".getBytes()); System.out.println(toHex(digest)); } private static String toHex(byte[] buf){ StringBuilder sBuilder = new StringBuilder(); for(int i=0;i<buf.length;i++){ byte hi = (byte)((buf[i]>>4) & 0x0f); byte lo = (byte)(buf[i] & 0x0f); sBuilder.append(Character.forDigit(hi,16)).append(Character.forDigit(lo, 16)); } return sBuilder.toString(); }}
小应用:很多网站需要通过邮箱对注册进行激活,其激活账号大多是通过MD5算法得到的
4)SHA (Secure Hash Algorithm,安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。其中 SHA-0 和 SHA-1 会从一个最大 2^64 位元的讯息中产生一串 160 位元的摘要然后以设计 MD4 及 MD5 讯息摘要算法的 MIT 教授 Ronald L. Rivest 类似的原理为基础来加密。
2.对称加密与非对称加密
对称算法是说,加密过程和解密过程是对称的,用一个密钥加密,可以用同一个密钥解密。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。
非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用非对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。非对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的非对称加密算法有RSA算法和美国国家标准局提出的DSA。
举例说明:我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友Bob用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。
小知识:公钥私钥的原则
l 一个公钥对应一个私钥。
l 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
l 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密