admin管理员组

文章数量:1627743

PKI Lab(Public-Key Infrastructure Lab)

实验准备

本实验基于当前最新seed2.0实验,使用Ubuntu2004版本虚机。安装教程略过。
须有以下文件,均从官网下载(或由老师提供/doge):

Labsetup.zip
OpenSSL Command-Line HOWTO.mht.zip

配置环境

labsetup.zip放入虚机中,并执行:

dcbuild
dcup
dcdown

其已经分别由alias进行指定,具体内容可以查看~/.bashrc

实际执行过程可能很久,视机器运行效率决定。如图所示docker已经开始运行。

按照实验要求,需将docker的ip与dns的对应关系写入/etc/hosts,如图:

实验任务

1. 成为一个CA

  1. 配置文件
    默认的openssl文件在usr/lib/ssl/opensslf,我们需要对其进行修改以便创建我们自己的CA。将其备份到自己的目录下进行修改。
    将下图中标色的一行取消注释:

    这部分属于CA_default,用于CA的配置信息设置,取消注释以允许创建多个证书。在当前路径下创建demoCA子路径,并创建以上文件。

    For the index.txt file, simply create an empty file. For the serial file, put a single number in string format (e.g. 1000) in the file. Once you have set up the configuration file opensslf, you can
    create and issue certificates.

  2. 证书认证
    利用以下语句用于为我们的CA自行创建一个证书,我们可以将密码设置为dees

提问

• What part of the certificate indicates this is a CA’s certificate?
• What part of the certificate indicates this is a self-signed certificate?
• In the RSA algorithm, we have a public exponent e, a private exponent d, a modulus n, and two secret
numbers p and q, such that n = pq. Please identify the values for these elements in your certificate
and key files.

通过openssl解密,可以回答以上问题:

openssl x509 -in ca.crt -text -noout
openssl rsa -in ca.key -text -noout

使用x509创建公钥证书,标识含有CA:TRUE表明这是一个CA证书

如图发现,证书的发行者与拥有者信息一致,因此这个证书是自签名的

RSA算法中包含有 e , d , n , p , q e,d,n,p,q e,d,n,p,q五个元素,在ca.crtca.key中均有明确说明,此处仅展示 e e e即RSA公钥:

2. 为你的网页服务器创建一个证书申请

使用以下命令生成证书:

openssl req -newkey rsa:2048 -sha256 \
			-keyout server.key out server.csr \
			-subj "/CN-www.sun2022/O=Sun2022 Inc./C=CN" \
			-passout pass:dees

同样可以通过命令查看证书内容,所标注的网站相关信息正确添加:

添加拓展域名(SAN)

直接在生成证书的命令后添加:

-addext "subjectAltName=DNS : www.sun2022, DNS : www.sun2020, DNS : www.sun2022 "

可以为另外两个域名赋予证书,如图所示:

3. 为服务器创建证书

使用上一节的证书申请与上上节的CA证书为服务器创建证书

openssl ca -config myCA_opensslf -policy policy_anything \
		-md sha256 -days 3650 \
		-in server.csr -out server.crt \
		-batch \
		-cert ./ca.crt -keyfile ./ca.key 


创建之后CA内部临时创建的文件夹出现了以下变化:

但是这样生成的服务器证书并没有将我们之前所说的SAN复制过来,如图:

通过修改CA的配置信息,我们可以允许这种复制
将cnf文件中的这条信息取消注释,之后重新生成证书:

# Extension copying option: use with caution.
copy_ extensions = copy

发现附加信息已经复制过来了:

4. 打开我们的网站

实验已经为我们提供了名为bank32的网站,我们需要按照其文件为模板创建我们自己的网站。这里选择将所有bank32相关的文件与信息都改为我们刚刚创建的。

  • 打开Apache2服务
    使用以下命令启动ssl服务:
    a2enmod ssl
    a2ensite sun2022_apache_ssl
    

之后我们通过虚机上的浏览器打开https://www.sun2022即可访问

  • 过程中发现浏览器提示拒绝访问,是因为不合法的证书发布者,坚持访问即可继续访问
  • 如果不加https进行访问,则容易访问80端口的http,底色为红色
向浏览器添加CA证书

我们可以发现,当通过https访问网站时,网址边会提示证书不安全,这是因为给我们发放证书的CA并未被添加到浏览器确认安全的列表中。
通过以下几步将我们之前生成的CA证书放入认证名单:


之后再进行访问时这个网站就是被认证成功的了,如图:

5. 发起攻击!!!

准备向网站发起中间人攻击
我们准备将我们的网站首页发起攻击。假设我们刚刚创建的www.sun2022是一个十分流行的网站的登录界面,但是根据我们在实验配置环境阶段的准备,已经在本机上将该网站导向我们自定义的IP地址(模拟修改路由器上的IP地址)。因此,当我们访问该网站时,就会默认导向我们自行创建的服务器网站。
我们将seu的ehall登录界面保存放入虚机中(坏笑),模拟作为www.sun2022的登录界面,可以看到已经可以加载出来了:

但是由于我们冒充的服务器并未添加与真正的网站实现通信建立连接的能力,因此无法正常访问原网站服务器,也就无法加载外置图片。但是基本实现客户端的中间人攻击,模拟了目标网站的冒充。

6. 冒充CA发放证书

实际上本环节已经通过前4个环节完成,其结果也就是之前所述。但是如果我们并没有生成一个合法证书给我们的网站呢?
这里我们可以使用以下命令停止冒充网站的证书正常发放以模拟没有证书的情况:

a2dissite sun2022_apache_ssl 
service apache2 reload

可以发现,我们再次登录该网站时,访问请求被浏览器自动屏蔽了:

总结

本实验通过模拟发放一个合法证书,使我们的网站得到一个正常的访问。这也提醒了我们,当我们访问一个拥有非法证书的网站时应当加强戒备,因为我们的浏览过程很有可能已经被黑客入侵并执行了中间人攻击。

本文标签: publicKeyPKILabInfrastructure