公钥加密是当今安全通信的基础,但当通信的一方向另一方发送其公钥时,它会受到中间人的攻击。根本的问题是,没有简单的方法来验证公钥的所有权,即,给定公钥及其声明的所有者信息,如何确保该公钥确实属于声明的所有者?公钥基础设施(PKI)是解决这一问题的一种切实可行的方法。
通过这个实验,我们应该能够更好地了解PKI是如何工作的,PKI是如何用来保护网络,以及PKI如何打败中间人攻击。此外,我们将能够了解在公钥基础设施中信任的根源,以及如果这种根源信任被破坏会出现什么问题。本实验所涵盖的主题如下:
• Public-key encryption
• Public-Key Infrastructure (PKI)
• Certificate Authority (CA) and root CA
• X.509 certificate and self-signed certificate
• Apache, HTTP, and HTTPS
• Man-in-the-middle attacks
Lab Environment这个实验在我kali VM和Ubuntu 16.04 VM上进行了测试.在这个实验中,我们将使用openssl命令和库。
Lab TasksTask1: Becoming a Certificate Authority(CA)
证书颁发机构(CA)是发布数字证书的受信任实体。数字证书通过证书的命名主体来验证公钥的所有权。一些商业性的CAs被视为根类CAs;在撰写本文时,VeriSign是最大的CA。想要获得商业核证机关发出的数字证书的用户需要向这些核证机关支付费用。
在这个实验室,我们需要创建数字证书,但是我们不会支付任何商业CA,我们自己会成为一个根CA,然后用这个CA为其他人(比如服务器)颁发证书。在这个任务中,我们将使自己成为一个根CA,并为这个CA生成一个证书。RootCA的认证通常预装在大多数操作系统、web浏览器和其他依赖于PKI的软件中。根CA的证书是无条件信任的。
The Configuration File openssl.conf
为了使用OpenSSL创建证书,必须有一个配置文件。配置文件通常有一个extension.cnf。它由三个OpenSSL命令使用:ca、req和x509。可以使用谷歌搜索找到openssl.conf的手册页。还可以从/usr/lib/ssl/openssl.cnf获得配置文件的副本。将此文件复制到当前目录后,需要按照配置文件中指定的方式创建子目录(查看[CA default]部分):