HTTPS的双向认证(五)
在前面的系列文章中,我们学习了「https双向认证」的架构,并学习了证书的创建与签名。到上一篇文章为止,我们完成了「服务端证书」、「CA证书」、「客户端证书」的创建过程。同时,我们使用「CA证书」对「客户端证书」进行了签名,也就是从未签名的client.csr
证书文件经过ca.crt
的签名,得到了签名后的文件client.crt
。
这篇文章介绍如何把「CA证书」和「服务端证书」配置进nginx
。
nginx的配置
下面是nginx
和「ssl双向认证」相关的配置内容:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /cert/server.crt;
ssl_certificate_key /cert/server.key;
ssl_verify_client on;
ssl_client_certificate /cert/ca.crt;
root /etc/nginx/html/localhost;
location / {
index index.html;
}
}
上面是nginx
当中对于https
服务的一个配置。其中有三部分和「https服务」有关。首先是这部分:
listen 443 ssl;
上面的配置告诉nginx
要侦听443
端口,接受访问请求,并且要使用ssl
对通信进行加密。接下来是这段:
ssl_certificate /cert/server.crt;
ssl_certificate_key /cert/server.key;
上面的配置是制定nginx
提供服务所出示的「服务端」证书。这样,当「客户端」访问nginx
服务的时候,nginx
会使用配置的证书出示给「客户端」。注意我们还把server.key
这个私钥文件配置进了nginx
,是因为在进行「数据解密」的时候要用到。所以私钥是要在「服务端」保存好,在「ssl通信」是会用到。
最后一段配置是这样:
ssl_verify_client on;
ssl_client_certificate /cert/ca.crt;
上面的配置是让nginx
在提供服务的时候,要验证访问服务的「客户端」身份。验证的方法是使用ca.crt
这张证书进行验证。也就是说,只要是「客户端」访问服务的时候,如果它提供的「客户端证书」是「CA证书」签名过的,那么就认为这个客户的身份是可信的。
注意上面并没有把「CA证书」的「密钥文件」配置进去,因为nginx
只需要验证「客户端证书」是否是「CA证书」签名的,不需要使用「CA证书」的「私钥」进行「签名」或者「数据解密」等操作。
以上就是nginx
的配置说明。下一篇文章中,将使用一个已经配置好的容器作为demo,启动nginx
服务,并使用使用curl
作为「客户端」访问nginx
服务,看一下访问的过程。
- 上一篇 Bash里的那些坑・pipe的坑
- 下一篇 HTTPS的双向认证(六)