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服务,看一下访问的过程。

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