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,分别是:

上面三个文件是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连接进行具体的协议分析。

My Github Page: https://github.com/liweinan

Powered by Jekyll and Theme by solid

If you have any question want to ask or find bugs regarding with my blog posts, please report it here:
https://github.com/liweinan/liweinan.github.io/issues