Advertisement

Public Key Infrastructure Laboratory实验测试Ubuntu 20.04

阅读量:

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

配置文件
系统默认的openssl配置文件位于usr/lib/ssl/openssl.cnf,为满足自定义CA的创建需求,需对这一文件进行相应调整。建议先将其复制至个人目录中再进行编辑操作。
请取消下图中被标注行的注释状态:

在这里插入图片描述

【该部分内容归属于CA_default,主要用于配置CA的相关参数信息,通过取消注释可实现多证书的生成功能。在当前目录中建立名为demoCA的子目录,并在其中生成上述所需文件。

关于index.txt文件,只需创建一个空文件即可。至于serial文件,则需在其中输入一个字符串格式的单一数字(例如:1000)。完成openssl.cnf配置文件的设置后,即可进行证书的生成与签发操作。

在这里插入图片描述

证书认证
通过使用以下语句,我们能够为自身的CA生成一个证书,并在此过程中将密码设定为dees

在这里插入图片描述

提问

• 证书中哪一部分能够表明这是证书颁发机构的证书?
• 证书中哪一部分能够表明这是一份自签名证书?
• 在RSA算法中,我们拥有一个公钥指数e、一个私钥指数d、一个模数n,以及两个保密数值p和q,其中n = pq。请在你的证书和密钥文件中识别出这些元素的对应数值。

借助openssl进行解密操作,可以对上述问题作出解答:

复制代码
    openssl x509 -in ca.crt -text -noout
    openssl rsa -in ca.key -text -noout
    
    
      
      
    

通过x509生成公钥证书,其中包含CA:TRUE标识用于明确该证书属于证书颁发机构类型。

在这里插入图片描述

从图中可以观察到,证书的签发机构与持有者信息完全吻合,由此可判断该证书属于自签名类型。

在这里插入图片描述

RSA算法由e,d,n,p,q这五个组成部分构成,其中在ca.crtca.key文件中均作出了清晰的定义,此处仅对e,即RSA公钥部分进行展示:

在这里插入图片描述

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

通过执行下列指令即可生成相应证书:

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

同样可借助命令行工具查阅证书内容,其中所标记的网站相关数据已准确无误地进行添加:

在这里插入图片描述

拓展域名(SAN)配置与实现

在生成证书的指令之后,直接追加以下内容:

复制代码
    -addext "subjectAltName=DNS : www.sun2022.com, DNS : www.sun2020.com, DNS : www.sun2022.net "
    
    
      
    

如图所示,可为其余两个域名分配相应的证书:

在这里插入图片描述

3. 为服务器创建证书

借助前一节所述的证书申请流程以及前前节所提及的CA证书,为服务器生成对应的证书

复制代码
    openssl ca -config myCA_openssl.cnf -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.com即可访问`地址。

在这里插入图片描述

在操作过程中遇到浏览器提示无法访问的情况,原因在于证书发布者未获得合法认证,若执意继续访问则可突破限制。若未采用https协议进行访问,系统将默认连接至80端口的http服务,此时页面背景会呈现红色。

在这里插入图片描述

浏览器CA证书添加方法

从实际观察可知,当使用https协议访问特定网站时,地址栏通常会显示证书存在安全隐患的警告信息。这主要是由于为该网站颁发数字证书的认证机构(CA)尚未被纳入浏览器默认的安全信任列表所致。
为将先前创建的CA证书纳入系统认证范围,可按照以下操作步骤进行添加:

在这里插入图片描述
在这里插入图片描述

在后续再次访问该网站时,其认证状态将被确认为成功,具体示例如下图所示:

在这里插入图片描述

5. 发起攻击!!!

计划对目标网站实施中间人攻击
我们打算针对自身的网站首页实施攻击行为。假设我们刚刚建立的www.sun2022.com被设定为一个广受欢迎的网站登录页面,然而依据我们在实验环境搭建阶段的操作,已经将本机对该网站的访问引导至我们自行设定的IP地址(模拟对路由器中IP配置的修改)。因此,当用户尝试访问该网站时,系统将自动跳转至我们所搭建的服务器端页面。
我们将seu的ehall登录界面保存至虚拟机中(露出坏笑),并将其作为www.sun2022.com的登录页面进行模拟,此时可以观察到该页面已成功加载:

在这里插入图片描述

然而,由于所仿冒的服务器并未具备与真实网站进行通信连接的功能,因此无法正常访问原始网站的服务器,进而无法加载外部图片。不过,客户端层面的中间人攻击已基本实现,成功模拟了目标网站的伪装行为。

6. 冒充CA发放证书

事实上,本阶段的内容已在前四个步骤中得以实现,其结论也与之前所述一致。然而,倘若我们尚未为网站生成合法的证书,又将如何应对?在此情形下,可通过执行以下指令来阻止虚假证书的正常颁发,从而模拟网站缺乏有效证书的状态:

复制代码
    a2dissite sun2022_apache_ssl 
    service apache2 reload
    
    
      
      
    

观察可知,当再次尝试进入该网站时,浏览器系统已自动拦截了此次访问请求:

在这里插入图片描述

总结

本次实验通过生成一个符合规范的数字证书,使测试网站能够实现正常访问。这一现象也警示我们,在浏览配备非正规证书的网页时需提高警惕,因为此类访问行为存在较高的风险,可能已被不法分子实施中间人攻击,从而导致信息泄露或操作被操控。

全部评论 (0)

还没有任何评论哟~