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

为了搭建用于测试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文件夹中.相关运行过程截图:
win7(32bit)下完整的搭建apache(2.2.x)+openssl(0.9.6->1.0.1升级)过程_第1张图片
继续下面的输入:

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

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

好,下面还有要填写的:

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


 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 [email protected]
      (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
当然,可以不会一下就成功,比如地址栏可以出现一片红色,然后那个右边钥匙那里提示证书不正确之类的:(比如下面这样)

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

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

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

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


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
即可看到结果:(中间内容太多,仅截取最后的提示)


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

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

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

能到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相关东西,现在还没弄太明白)


你可能感兴趣的:(apache,漏洞,win7,OpenSSL)