SEEDLab Crypto_PKI 实验报告

实验过程

Task1 Becoming a Certificate Authority (CA)

正规的CA证书需要付费购买,为了进行实验,我们可以自己搭建一个root CA,首先需要进行文件配置,openssl会使用一个默认配置文件(/usr/lib/ssl/openssl.cnf)文件,由用户生成证书请求文件(certificates signature request .csr文件),将此文件复制到实验文件夹lab_pki文件夹中,同时为根CA配置相关文件:

随后使用如下命令生成root CA证书文件.crt:

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

需要输入相关身份信息:


进行生成root CA的密钥文件ca.key和证书文件ca.crt

ask 2: 为SEEDPKILab2020.com创建证书

配置一个SEEDPKILab2020.com 的证书总共需要三步:

  1. 生成公钥私钥对
openssl genrsa -aes128 -out server.key 1024

将输入的密钥存储到server.key文件中

  1. 生成证书签字请求.csr文件
openssl req -new -key server.key -out server.csr -config openssl.cnf

相关配置信息如下:

  1. 与root CA进行验证与签名
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 
-config openssl.cnf

将SEEDPKILab2020.com提交的server.csr文件给CA,CA验证完csr文件后,会给SEEDPKILab2020.com签发一个X509版本的证书,本实验忽略验证这一步,上面命令直接将server.csr,ca.crt 以及ca.key文件生成一个证书server.crt,注意openssl默认使用SHA256算法了,与课本上所说默认算法不同,不同openssl版本,可以使用如下命令查看:

openssl x509 -in server.crt -text 

发现签名算法为:

task 3: 使用openssl自带服务器进行配置

使用openssl自带服务器可以进行配置HTTPS,但是首先需要将SEEDPKILab2020.com的私钥文件与公钥文件合并到一个文件*.pem中,使用如下命令(注意使用顺序,即文件的合并顺序需要注意) :

cp server.key server.pem
cat server.crt >> server.pem

随后,使用openssl s_server命令启动服务器,服务器默认监听4433端口,注意需要一直开着:
在这里插入图片描述

才能进行访问指定网站,会得到如下失败的结果:

这是因为root CA为我们自己创建的,浏览器不会信任,所以需要手动添加之前任务创建的ca.crt文件到浏览器CA列表中:


随后进行测试,可以正常运行:
在这里插入图片描述

Q1:

  1. 修改一个位于subject域的Common Name字节信息:

    保存后继续运行得到结果如下:

    仍然可以正常运行.

  2. 修改一个位于Private Key的字节:

    保存后继续运行得到结果如下:


    浏览器不可以访问:

    结果分析:CA拥有私钥,可以进行验证server_copy.pem文件是否合法,但是为什么修改subject域信息可以通过??
    这个原因我也不太清楚…
    可能是在此过程中SSL验证证书的合法性但是浏览器没有验证证书Commoon Name与域名的是否匹配问题,TLS有这个使用上的问题…
    不太确定…

Q2

由于浏览器会检查URL中名称域证书中Subject域信息中域名条目Common Name是否一致,此时并不一致所以失败,浏览器给出了原因,与分析基本一致:

task 4: 使用Apache配置HTTPS服务器

在task3中,我们使用openssl的s_server命令设置HTTPS服务器,主要用于调试和演示目的。
在这个实验中,我们基于Apache服务器建立一个真正的HTTPS web服务器。Apache服务器(已经安装在我们的VM中)且支持HTTPS协议。
要创建一个HTTPS网站,我们只需要配置Apache服务器,这样它就知道从哪里获得私钥和证书。

  • 对000-default.conf使用如下配置:

    需要进行此配置, 不设置也没有影响,因为会显示默认网站,也就是我们设置的网页界面,但是在task5任务中,网站不同,必须进行配置.
  • 对default-ssl.conf文件使用如下配置:

其中ServerName条目指定网站的名称,而DocumentRoot条目指定网站文件存储的位置。同时我们需要告诉Apache服务器证书和私钥存储在哪里,后两行为task2中证书和私钥文件的位置.
随后运行一系列命令得到如下:

此时可以正常访问:

Task 5: Launching a Man-In-The-Middle Attack

本次实验中,我们进行伪造一个pass.sdu.edu.cn网站,真实网站信息:

首先下载网站信息,将网站相关文件该名称(为了方便操作,修改成英文名称),移动到网页指定存储位置,一般为/var/www/目录,创建一个SDU目录,将网站相关信息移动到此目录中:

为了可以在本地访问到,在/etc/hosts配置静态映射:

随后需要到apache2服务器位置进行配置文件配置,文件位置:/etc/apache2/sites-available/:
文件000-default.conf:
要添加一个HTTP网站,我们需要在文件000-default.conf中添加一个虚拟主机条目:

否则显示的网站仍然会是默认配置,显示如下结果:

就不会显示我们自己配置的网站页面了.
文件default-ssl.conf:而要添加一个HTTPS网站,我们则需要在同一个文件夹的default-ssl.conf文件中添加一个VirtualHost条目:

使用10.0.2.5主机进行测试,访问(https://)pass.sdu.edu.cn

在10.0.2.5主机,首先配置/etc/hosts静态映射:

访问pass.sdu.edu.cn得到如下结果:

而访问https://pass.sdu.edu.cn 时,会得到如下结果:
在这里插入图片描述

原因分析:
经查阅资料:我们找到浏览器会验证通用名称域,在SSL握手期间,会进行两个重要的验证:

  1. 核对接收到的证书是否有效,即确保证书中的公钥属于Subject域描述的主体,但不能说明证书域正在访问的网站是否匹配.SSL库执行
  2. 浏览器验证证书通用名称是否与访问的网站名称匹配.浏览器等应用程序执行.
    在上面的实验中:,验证过程:
  • 第一条,由于测试主机的浏览器未配置ca.crt,浏览器不会信任此ca发布的证书,不会通过验证.
  • 第二条,由于Common Name与访问的pass.sdu.edu.cn不匹配,也不会通过,所以出现警告信息.

为了进一步验证上面两条SSL握手规则,我们回到配置Apache服务器主机(10.0.2.4)进行访问pass.sdu.edu.cn,可以正常访问,当时访问https://pass.sdu.edu.cn 时,会失败,得到如下结果:

即第一条通过SSL验证证书成功,但是第二条不通过,浏览器检查发现证书Common Name域访问域名不匹配,出现上面的警告信息.

实验过程中小Tips

在使用10.0.2.5主机进行测试,访问apache文件信息时,我们发现网络断开

  • 用wireshark抓包,就发现会出现许多ARP请求报文,最后导致超时错误发生.
  • 无法进行ping www.baidu.com , 出现unknown host错误警告信息
  • ping 8.8.8.8有回应.
    所以应该是DNS服务器配置错误,不是网络问题,配置dns,由于使用的是DHCP分配协议,所以配置dns的nameserver需要进入/etc/resolvconf/resolv.conf.d/head文件,修改nameserver 127.0.1.1为nameserver 8.8.8.8

再运行sudo resolvconf -u即可上网.
但是为什么127.0.1.1不行?可是这个在其他虚拟机是可以上网的,不知道原因.???,欢迎解答

Task 6: Launching a Man-In-The-Middle Attack with a Compromised CA

服务器主机:10.0.2.4
测试用户主机:10.0.2.5

此实验中,我们假设攻击者已经知道根CA的私钥,所以攻击者可以通过CA的私钥伪造一个pass.sdu.edu.cn网站的证书,具体过程如下:

在CA验证与签名过程中,我们需要输入CA的密钥:

需要注意的是,我们在生成证书过程中对Common Name字段要填写pass.sdu.edu.cn,这样才可以通过task5中写到的浏览器验证阶段.
得到证书文件sdu.crt和私钥文件sdu.key,随后我们需要在apache服务器文件中进行配置相关文件,需要将域名与证书文件进行一一对应处理:

随后,我们更换主机,使用另一台主机即10.0.2.5,首先需要在此主机的浏览器中添加CA证书:

同时,在task5中已经设置了etc/hosts中静态IP地址主机名映射关系:

此时,我们就可以进行实验测试了,在task5中访问https://pass.sdu.edu.cn 会出现访问警告问题,由于访问的URL域名与证书中subject域中的Common Name不匹配,而修改了Apache中证书后,可以匹配,所以会成功访问,不会出现安全警告问题:

实验总结

  1. 本次实验是在期末考试临近期间完成的,时间有些紧迫,写的仓促.虽然任务不太复杂,但由于对Apache服务器了解不是很深,在配置Apache过程遇到了一些问题,呃…其实按照步骤走也没出现问题,主要不理解过程,所以进行了修改部分文件测试,才一步一步地搞明白一点Apache各个文件配置的作用与文件存储位置等信息.
  2. 两个配置文件/etc/apache2/sites-available/:
    000-default.conf:HTTP网站默认位置,当访问不带https的网站地址时,apache会到这个文件寻找域名以及对应的网站文件根目录DocumentRoot /var/www/**(一般为此位置),然后到网站文件根目录寻找网站页面等相关文件,返回到发送请求的浏览器器中.
    一个网站如果没有对应配置信息,则会显示默认界面,即:

    (罗嗦了,前面已经写过这个了…自己摸索好久才搞明白的,就再写一次吧…)
    default-ssl.conf:HTTPS网站配置文件,当访问带有https的网站时,到此文件寻找相关域名,以及这个网站的证书,网页显示相关文件的存储位置根目录DocumentRoot等信息,并返回给发送请求的主机的浏览器中,浏览器再进行验证证书,域名等信息…
  • 如果一个网站配置了default-ssl.conf但没有配置000-default.conf,则访问https可以,访问非https则会显示默认网页,不显示指定网页,这也很符合逻辑.

  • 配置了000-default却没有配置default-ssl.conf,则访问不带https可以正常显示,带https则会出现安全警告:

    显示证书验证失败信息,其实压根没有配置证书文件,也符合逻辑.

  • 一个小小实验,使用了快2天时间,还是了解的东西太少,太慢,特别时Web相关信息,不过总算搞明白了apache文件工作机理的一点头绪…

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值