测试Apache使用Openssl及修改Openssl加密算法执行顺序

Posted IT运维世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试Apache使用Openssl及修改Openssl加密算法执行顺序相关的知识,希望对你有一定的参考价值。

测试背景说明:

HTTPsSSH等协议内部使用Openssl协议,Openssl在客户端和服务器做握手时,会协商一个双方都支持的算法。通过OpensslCiphers命令,可以看到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加密算法执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

Linux里面openss-devel是啥?

配置 Apache 服务器以使用特定的 OpenSSL 引擎

OpenSSL证书生成及Mac上Apache服务器配置HTTPS(也适用centos)

#yyds干货盘点#openssl

在 wamp 服务器上使用 openssl 修改 ssl 版本

Window下生成OpenSSL自签证书