测试背景说明:
HTTPs和SSH等协议内部使用Openssl协议,Openssl在客户端和服务器做握手时,会协商一个双方都支持的算法。通过Openssl的Ciphers命令,可以看到Openssl支持的算法列表。原理上Ciphers列表中的算法在协商时是有优先级的。例如客户端在发送Hello握手消息时,会传送client支持的SSL协议的版本号、随机数、加密算法列表,以及所需的其他信息。服务器收到客户端建立SSL连接的请求后,会发送Server Hello消息向客户端传送SSL协议的版本号、随机数、会话ID、加密算法的种类等信息。之后,进入认证阶段。认证阶段我们这里测试时不关注。我们测试关注的是Client和服务端在协商加密算法时,是否通过Ciphers中算法列表顺序做优先级来匹配第一个双方都匹配的算法。以下是测试过程。
搭建环境:
1.生成证书
2.将生成的证书和私钥拷贝到/usr/local/apache2/conf/下
3.修改Apache配置文件,打开SSL模块
4.修改extra/ssl.conf文件
5.修改extra/httpd-vhosts.conf
6.重启apache,环境搭建完成。
测试:
1.通过IE打开:https://192.168.44.25:8443,按F12查看页面执行情况,可以看到使用了TLS1.2协议,使用ECDH_RSAwith P-256密钥交换算法,使用AES_256_GCM为分组加密算法。
2.修改配置文件extra/ssl.conf,相当于修改服务端的Ciphers列表顺序
3.重启apache
4.关闭页面,清理缓存,再打开googlechrome检测:https://192.168.44.20,发现使用的加密算法没有改变。
5.修改服务端的CipherOrder并没有引起加密算法的改变,我们来修改客户端的加密算法测试一下。
6.命令行输入“gpedit.msc”打开组策略,点击“管理模板”->“网络”->“SSL配置”,找到“SSL密码套件顺序”。默认未配置。将配置改为已启用。点击“应用”
7.关闭goolechrome,重新打开google浏览器。
8.发现使用的算法没有改变。
9.再次修改“SSL密码套件顺序”,将“TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256”复制到密码套件的最后,去掉了几个排名靠后的算法。
10.重新打开google Chrome浏览器,还是一样的算法。来点小插曲,测试过程中,正好在播放时界杯,阿根廷对法国,Google浏览器播放世界杯正常。
11.修改算法之后半小时,电脑上看世界杯显示如下界面:
13.再次,使用google浏览器打开页面测试。算法还是没有变化。
14.恢复“SSL密码套件顺序”为默认配置,世界杯播放正常,说明修改“SSL密码套件算法”还是影响了SSL传输和认证。
测试结论:
本次测试从结果上看应该是失败的,跟原理上Ciphers顺序会引起协商的加密算法的改变不一致。可能是我对这一块设置及算法的理解还不透彻造成的。先记录下来,以后,再理解清楚了,再做测试。
领取专属 10元无门槛券
私享最新 技术干货