测试Apache使用Openssl及修改Openssl加密算法执行顺序
Posted IT运维世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试Apache使用Openssl及修改Openssl加密算法执行顺序相关的知识,希望对你有一定的参考价值。
测试背景说明:
HTTPs和SSH等协议内部使用Openssl协议,Openssl在客户端和服务器做握手时,会协商一个双方都支持的算法。通过Openssl的Ciphers命令,可以看到Openssl支持的算法列表。原理上Ciphers列表中的算法在协商时是有优先级的。例如客户端在发送Hello握手消息时,会传送client支持的SSL协议的版本号、随机数、加密算法列表,以及所需的其他信息。服务器收到客户端建立SSL连接的请求后,会发送Server Hello消息向客户端传送SSL协议的版本号、随机数、会话ID、加密算法的种类等信息。之后,进入认证阶段。认证阶段我们这里测试时不关注。我们测试关注的是Client和服务端在协商加密算法时,是否通过Ciphers中算法列表顺序做优先级来匹配第一个双方都匹配的算法。以下是测试过程。
搭建环境:
1. 生成证书
#建立服务器密钥 [root@PRCIST1ECMS2Z10 tmp]# openssl genrsa -des3 2048 > server.key Generating RSA private key, 2048 bit long modulus ......................................+++ .....................................................................................+++ e is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase: #从密钥中删除密码(以避免系统启动后询问密码) [root@PRCIST1ECMS2Z10 tmp]# openssl rsa -in server.key >server2.key Enter pass phrase for server.key: writing RSA key [root@PRCIST1ECMS2Z10 tmp]# mv server2.key server.key #建立服务器密钥请求文件 [root@PRCIST1ECMS2Z10 tmp]# openssl req -new -key server.key -out server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GD Locality Name (eg, city) [Default City]:SZ Organization Name (eg, company) [Default Company Ltd]:OC Organizational Unit Name (eg, section) []:ITD Common Name (eg, your name or your server's hostname) []:PRCIST1ECMS2Z10
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: #生成服务器证书: [root@PRCIST1ECMS2Z10 tmp]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 Signature ok subject=/C=CN/ST=GD/L=SZ/O=OC/OU=ITD/CN=PRCIST1ECMS2Z10 Getting Private key |
2. 将生成的证书和私钥拷贝到/usr/local/apache2/conf/下
[root@PRCIST1ECMS2Z10 tmp]# mv server.crt /usr/local/apache2/conf/ [root@PRCIST1ECMS2Z10 tmp]# mv server.key /usr/local/apache2/conf/ |
3. 修改Apache配置文件,打开SSL模块
修改httpd.conf 将#LoadModule ssl_module modules/mod_ssl.so 的注释去掉 将#Include conf/extra/httpd-ssl.conf 的注释去掉 将#Include conf/extra/httpd-vhosts.conf的注释去掉 |
4. 修改extra/ssl.conf文件
Listen 8443 SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES SSLHonorCipherOrder on SSLProtocol all -SSLv3 SSLProxyProtocol all -SSLv3 SSLPassPhraseDialog builtin 虚拟主机配置: <VirtualHost _default_:8443> DocumentRoot "/usr/local/apache2/htdocs/" ServerName 192.168.44.20:8443 ServerAdmin you@example.com ErrorLog "/usr/local/apache2/logs/ssl_error_log" TransferLog "/usr/local/apache2/logs/ssl_access_log" LogLevel debug SSLEngine on SSLCertificateFile "/usr/local/apache2/conf/server.crt" SSLCertificateKeyFile "/usr/local/apache2/conf/server.key" <Directory "/usr/local/apache2/htdocs"> SSLOptions +StdEnvVars </Directory> </VirtualHost> |
5. 修改extra/httpd-vhosts.conf
<VirtualHost *:8443> SSLEngine on SSLCertificateFile /usr/local/apache2/conf/server.crt SSLCertificateKeyFile /usr/local/apache2/conf/server.key ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2/htdocs/" ServerName 192.168.44.20:8443 ErrorLog "logs/ssl-error_log" CustomLog "logs/ssl-access_log" common <Directory /usr/local/apache2/htdocs> AllowOverride All </Directory> </VirtualHost> |
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 列表顺序
将 SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES 修改为: SSLCipherSuite MEDIUM: HIGH:!MD5:!RC4:!3DES |
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顺序会引起协商的加密算法的改变不一致。可能是我对这一块设置及算法的理解还不透彻造成的。先记录下来,以后,再理解清楚了,再做测试。
以上是关于测试Apache使用Openssl及修改Openssl加密算法执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
配置 Apache 服务器以使用特定的 OpenSSL 引擎
OpenSSL证书生成及Mac上Apache服务器配置HTTPS(也适用centos)