您的位置:首页 > 运维架构 > Apache

win7(32bit)下完整的搭建apache(2.2.x)+openssl(0.9.6->1.0.1升级)过程

2014-05-07 20:29 615 查看
为了搭建用于测试heartbleed漏洞(CVE-2014-0160)的环境,于是乎做了这个博文里搭建的环境,不是太难,但由于不太懂,也耗了几天时间,下面开始。

环境:win7(32bit)+apache2.2.25+openssl1.0.1b

整体过程:先安装带ssl模块(httpd-2.2.25-win32-x86-openssl-0.9.8y.msi),然后将openssl升级到1.0.1b(直接安装openssl的win32版本,然后拷贝相关的文件到apache相关模块下),然后利用网上的python测试脚本进行测试。

第一部分:Apache的安装方面:

基本就是一路next,主要需要注意的就是正确设置Network Domain和Server Name这两项,如果想远程也能访问,这里就填你的ip地址,比如我填的就是自己的ip:115.156.x.x,如果只想本地测试,那么就填localhost就可以了。

p.s.关于这个的解释请参考:http://blog.sina.com.cn/s/blog_6013f66201019wj0.html

apache安装好后需要修改配置文件的相关设置

修改httpd.conf(在 [Apache安装目录]/conf下)三处:

1.DocumentRoot "D:/www"(这个蓝色的可以自己设置,就是http将要访问的文件的位置,可以根据自己的设置来修改,下面第2点一样)

2.<Directory "D:/www">

3.<IfModule dir_module>

DirectoryIndex index.html index.htm(这个是默认的访问文件,具体可google,不解释)

</IfModule>

第二部分:openssl的配置

ssl需要的文件在如下的位置:(安装了apache之后就会有)

[Apache安装目录]/modules/ mod_ssl.so

[Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll

[Apache安装目录]/conf/ openssl.cnf

----------

创建SSL证书(关于数字签名,证书相关的知识我在最后给出了相关的科普链接)

----------

1. 打开cmd, cd到apache安装目录的bin目录

2. 运行openssl

openssl req -config ..\conf\openssl.cnf -new -out my-server.csr
(注意, my-server是自己起的名字, 以下步骤中提到my-server的也是自己起的名字)

这一步需要设置一系列的问题, 包括密码(这个密码要记住, 以后要用) 和其他的问题. 全部完成之后会生成一个my-server.csr和 privkey.pem 文件在bin文件夹中.相关运行过程截图:



继续下面的输入:



(注意,其实我自己把ip搞错了的,应该是192.168.138.151我上面的这个是网络地址,搞错了,还要到后面配置文件去修改,这个大家注意下。)

好,下面还有要填写的:



3. 运行

openssl rsa -in privkey.pem -out my-server.key
此时要输入密码, 就是步骤2中设定的密码:





4. 运行

openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000

这将创建一个4000天后才过期的证书(注意一下,这里的my-server.cert最好改成my-server.crt,后来实验配置发现不换也可以,换了之后完成步骤5后就会有两个crt文件,但是最后在浏览器中导入的证书应该是5中生成的xxx.der.crt文件,而不是这里的my-server.crt,因为我实验了几次,我也被自己搞昏了,所以如果你发现你的https最后总是出现证书问题,不妨把这里重新运行一遍,改下这个,把cert改成crt,然后最后在浏览器中导入的时候把这个crt的也导入,注意,如果这里改了,那么第5步也要相应的改)





5. 运行

openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

(结果上面有,在dos下不会有任何回应,主要是产生文件的)

全部运行过后这些命令会在bin文件夹中生成6个文件:

.cnt(这个文件不知道怎么滴,没有)
privkey.pem
my-server.der.crt
my-server.csr
my-server.key
my-server.cert
将这些文件移到conf/ssl目录中(如果不存在这个目录就创建一个(这个步骤中放到其他的目录也可以 关键是记住文件的位置, 在接下来的设置中会用到,所以就不要瞎整,免得给自己找麻烦)

[关于网站如果ip改变后修改证书,就需要重新执行上述步骤,然后在ie的那个选项中重新导入证书,并将之前的证书删除掉,然后关闭httpd,并重启,再次访问https才会提示证书正确。]

----------

设置Apache支持SSL

----------

注意: 本设置步骤针对针对Apache 2.2.x版本, 如果正在使用的是Apache 2.0.x版本, 请摸索相似的设置.

在Apache的conf目录中用文本编辑器打开httpd.conf

1. 去掉下面设置行前面的#

LoadModule ssl_module modules/mod_ssl.so

2. 去掉下面设置行前面的# (在2.0.x版本中没有这一项)

Include conf/extra/httpd-ssl.conf

3.修改以下信息:(这是单独配置httpd-ssl.conf文件,在conf/extra目录下)

3.1. 修改这一段:

<VirtualHost _default_:443>

# General setup for the virtual host

DocumentRoot "D:/wwws" (主要是该这个目录,这个目录就是https要访问的目录,尽量与http要访问的目录区别开,可以自己设置)

ServerName 192.168.138.151:443

ServerAdmin a@a.com

p.s.参考了:http://forums.devside.net/index.php?topic=70.0)

3.2.增加:(使访问https有访问权限)

<Directory "D:/wwws">

Options +Indexes FollowSymLinks +ExecCGI

AllowOverride AuthConfig FileInfo

Order allow,deny

Allow from all

</Directory>

(位置的话,在配置文件中找到 </Directory>,然后最好就是把上面的代码放在这个的后面)

p.s.参考:http://www.cyberciti.biz/faq/apache-403-forbidden-error-and-solution/)

3.3. 更改如下设置.:([apache安装目录]是指Apache的安装目录, 比如c:/Apache; my-server的两个文件就是前一个步骤***的文件, 文件的位置就是这些文件在磁盘中的位置 (在2.0.x版本中这些设置仍然在 httpd.conf文件中进行)

找到以下相关代码并对应修改即可:

SSLMutex default

SSLCertificateFile "[Apache安装目录]/conf/ssl/my-server.der.crt"(最好也和前面的一样 改成my-server.crt)

SSLCertificateKeyFile "[Apache安装目录]/conf/ssl/my-server.key"

----------

测试

----------

1. 保存设置文件

2. 在开始菜单中运行Apache的Test Configuration工具, 检查设置文件是否正确

3. 重新启动Apache 2.2.x

4. 顺利启动之后, 在浏览器中输入 https://localhost 看看是否可以访问, 如果可以访问, 则设置成功!



(ip请无视,此处按照上面的应该是https://192.168.138.151)

当然,可以不会一下就成功,比如地址栏可以出现一片红色,然后那个右边钥匙那里提示证书不正确之类的:(比如下面这样)



那么就还要在浏览器中导入上面我们拷贝到ssl文件夹里面的crt文件,步骤如下:

1.打开ie浏览器,然后打开那个internet选项:



2.点击证书,然后进入这个:



在上面圈出的两个地方都要在下面的“导入”按钮中导入前面我们生成的my-server.der.crt文件,完成后确定,然后关闭浏览器,再次用https://192.168.138.151访问,就发现地址栏是白色的,没有什么提示了,表示证书已经被浏览器信任了,这样就OK了。

----------

升级openssl

----------

以上就是apache2.2.25在win32(32bit)下配置openssl-0.9.8y的全部过程,接下来我们还要将openssl升级到1.0.1b,因为只要1.0.1a-f才有heartbleed漏洞,其实很简单,两步:

1.安装Win32_OpenSSL_v1.0.1b.exe

2.把openssl的bin目录下的libeay32.dll,ssleay32.dll,openssl.exe拷贝到[apache安装目录]/bin/下(注意,直接不能覆盖,要先去关掉apache的服务才能覆盖)

完成后再用cmd进入[apache安装目录]/bin/下,输入命令:openssl version,查看openssl版本,发现已经更新:



至于那句warning,我也不知道是咋回事,但是这是在win下运行,查看linux下的配置也没用,而且我们apache自己有openssl的配置,在[apache安装目录]/conf/extra/http-ssl.conf,所以应该没有什么影响(主要是后面的攻击可以正常进行)

----------

利用python重现heartbleed漏洞

----------

利用网上的python来重新攻击,拷贝ssltest.py至d盘下,然后运行:

进入d盘运行 (ip继续无视,按照上面的设置应该是192.168.138.151)

python ssltest.py 115.156.236.202
即可看到结果:(中间内容太多,仅截取最后的提示)





开始部分因为DOS下无法拉到最上面,来看一下在linux下的一个截图,基本一样:



能到3ff0表示基本已经能获取到内存中客户端请求后的大片内存区数据了(64kb),攻击成功。

好,到此基本就结束了,环境搭建也基本完成,我将相关的资料上传到了这里,包括上面用的文件,httpd-2.2.25-win32-x86-openssl-0.9.8y.msi是从官方网站上下载的,后面的那个openssl是网上下载的(地址:https://code.google.com/p/cntc2/downloads/detail?name=Win32_OpenSSL_v1.0.1b.exe&can=2&q=),官网已经没有1.0.1a-f的win版下载了(见:http://slproweb.com/products/Win32OpenSSL.html)

----------

后续

----------

后面如果还有更新的进展,比如如何利用openssl官方给的tar.gz包来编译生成lib文件等我会继续跟进,但是搭建环境的这个过程基本就是上面的了,希望对有需要的人有帮助。

本文主要参考了:

1.http://www.cnblogs.com/rockin/articles/943668.html

(基本是按照这个来做的,但是还有一些细节需要注意,里面提到的一个连接(windows安装基于Apache的SVN服务器(包括SSL配置)):http://www.uml.org.cn/pzgl/200804038.asp

2.http://www.sunzhenghua.com/wamp-config-ssl-https(但是按这个来没有成功,没去找原因,毕竟是个套件,所以后来单独安装apache后再做的)

3.http://blog.wangzhan.360.cn/?p=165 比想象中更恐怖!OpenSSL“心血”漏洞深入分析(这个主要是关于漏洞的分析以及上面的python文件的一个解释)

4.关于本实验中数字签名,证书的一些命令的解释可参考:

http://dufei.blog.51cto.com/382644/90532

http://www.360doc.com/content/11/0813/16/3837165_140113234.shtml

以及电子工业出版社的 密码学原理与实践(第三版)的P92页,P353页中相关的解释(不过感觉我上面的命令好像没有涉及到ca相关东西,现在还没弄太明白)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: