PKI Lab
证书生成任务在ubuntu中进行,web server运行在容器中
在本次实验中,我们使用www.bank32.com为例介绍如何设置https web server。
我们将这个名字和容器的ip绑定,这一步在hosts中进行。
拉取镜像,创建实验环境
Task1成为CA
CA是用于签发数字证书的可信实体
一些商业CA被称作根CA(root CA),VeriSign是最大的CA
根CA是自签名的self-signed。根CA证书通常预先加载到大多数操作系统、浏览器、已经其他依赖PKI的软件中。根CA是被无条件信任的。
为了使用openssl创建证书,需要有配置文件。配置文件通常以.cnf为后缀,使用openssl的三个命令:ca,req,x508。
默认情况下,openssl使用的配置文件来自/usb/lib/ssl/openssl.cnf。由于我们要改变这个文件,所以复制一份到我们自己的路径下,并指示openssl使用这一份。
[CA_default]是配置文件中,我们需要准备的默认设置部分。我们需要创建一些子目录。去掉unique_subject的注释,允许创建证书。
Index.txt创建一个空文件即可。对于serial文件,以字符串格式写入一个数字就行,比如1000.一旦准备好了配置文件openssl.cnf,就可以开始创建并签发证书了。
使用下列命令为CA生成一个自签名的证书
此时将要求我们输入一个口令,不要丢失这个口令,因为以后我们要使用这个CA味其他证书签名时都需要输入这个口令
执行完成后将会输出ca.key和ca.crt
Ca.key有CA的私钥,ca.crt有公钥证书。
当然也可以在命令行中直接指定要填写的信息,比如使用-subj指定subject信息等
这里指定的密码是dees
可以使用下列命令查看X509证书解码后的内容是什么,以及RSA密钥
Task2 为web sever生成证书
一个公司叫bank32.com想要从我们的CA获得公钥证书。首先需要生成CSR(certificated signing request),其中包括公司公钥以及身份信息。CSR发给CA后,CA会校验身份信息并生成证书
生成CSR的命令和创建自签名的CA证书的命令类似,唯一区别就是加上了-x509选项
下列命令就是生成CSR
会生成一对公私钥对,然后从公钥创建一个证书签名请求。可以使用下列命令查看CSR的解码后内容以及私钥文件
一些网页可能会有不同的url,比如www.example.com,example.com.example.net,example.org等,他们指向相同的web server.由于浏览器执行的hostname匹配策略,证书中的common name必须和server的hostname匹配,否则浏览器会拒绝与server通信。
为了允许一个整数有多个name,X.509标准定义了证书的扩展。该扩展被称为Subject Alternative Name(SAN)。使用SAN扩展,可以在证书的subjectAltName域中指定一些hostname
我们可以添加下列的选项到openssl req命令中。
为你的server生成证书
CSR文件需要有CA签名来组成证书。CSR文件通常被发送给被信任的CA用来请求他们的签名。
下列的命令将证书签名请求server.csr转到x509证书server.crt(通过使用ca.crt,ca.key)
在基于apache的https 网页上部署证书
我们需要配置apache服务器,这样它才能知道从哪里获取私钥和证书。在我们的容器中,我们已经为bank32.com设置了一个https页面。
网页文件在/etc/apache2/sites-available目录中。
在中间那个文件中可以看到:
可以看到,https网页在https://www.bank32.com
servername指定了网页的name,documentroot指定了这个网页文件的位置
Serveralias允许网页有不同的name。
还告诉了apache server,证书和密钥文件在哪。
为了生效,我们需要apache ssl模块生效然后enable这个页面。
使用下面的命令即可完成
apache服务器在容器中不会被自动启动,因为需要口令解锁私钥。进入容器后运行下列命令来启动
apache启动时,需要为每个https页面加载私钥。我们的私钥被加密了,所以apache将要要求我们输入口令来解密。在容器中,口令是dees
上图看到浏览器和server的流量都是走https了
将证书加载进firefox中
这里看到
可以看到一系列被firefox接受的证书。我们在此导入自己的证书。
中间人攻击