HTTPS的双向认证(九)
在上一篇文章,讲解了如何使用docker-compose
来启停配置好的容器。这一篇文章在这个基础上,介绍如何在host端访问容器的https服务。
首先是按照上一篇文章介绍的方法把容器启动:
容器启动以后,此时查看容器的运行状态:
可以看到容器已经运行了,并且容器的443
端口映射到了host的443
端口。此时我们在host这边使用curl
命令访问容器映射出来的443
服务:
$ curl https://localhost
以下是命令的执行情况:
可以看到,host这边的curl
能够访问容器的https服务,并且到验证「服务端证书」失败了。因此,在host这边访问服务,和在上一篇文章中讲解的在容器内部访问服务一样,也需要在curl
命令访问的时候挂上所需要的证书。
为了在host端可以使用容器内的各种证书,我们可以把容器内的证书拷贝到host这边。可以在host下面执行docker
命令进行文件的拷贝。首先用docker ps
命令查看容器的名称:
可以看到经由docker-compose
启动的容器名字是固定的,叫做nginx-ssl-bidirection_nginx_1
,因此我们使用这个容器名称进行所需要的证书的文件拷贝:
$ docker cp nginx-ssl-bidirection_nginx_1:/cert/client.crt .
$ docker cp nginx-ssl-bidirection_nginx_1:/cert/client.key .
$ docker cp nginx-ssl-bidirection_nginx_1:/cert/server.crt .
如上所示,我们从容器里面拷贝了三个文件到host,分别是:
client.crt
client.key
server.crt
上面三个文件是curl
连接nginx
的https服务所需要的。此时可以看看host目录下拷贝出来的文件:
可以看到文件已经从容器里面拷贝出来了,此时我们使用前面文章讲解的curl
命令访问容器的https服务:
$ curl --cacert ./server.crt \
--cert ./client.crt \
--key ./client.key \
https://localhost
上面是在host这边访问容器映射出来的https服务,并且使用从容器里面拷贝出来的证书文件和私钥文件建立一个「双向认证」的https服务。下面是命令的执行结果:
可以看到,我们从host成功访问了容器里的https服务。
这篇文章就讲到这里,下一篇文章,我们学习使用wireshark对这个https连接进行具体的协议分析。