nginx ssl 客户端认证配置调研

nginx ssl 客户端认证配置调研

最近在思考安全相关的一些问题的时候,想到了 ssl 的客户端认证,于是便着手尝试着在 nginx 进行一下相关的配置

操作步骤

首先Google了一下,找到一篇 blog,步骤描述还算清晰,照着操作基本就能完成配置

操作说明

其实操作步骤可以分为两部分:

  • 使用 openssl 生成相关的证书
  • 在 nginx 进行配置

认证原理

  1. 服务端有根证书 ca,用 ca 签发一个客户端证书 a,即形成证书链 ca -> a
  2. 客户端请求的时候使用证书 a,服务端用证书 ca 对其进行校验即可完成验证

证书生成

证书的生成是使用的 openssl,我操作的时候参考了文章 http://www.178linux.com/48764

个人的使用心得:

  • centos 系统下,证书的配置路径为 /etc/pki,我们这里相当于创建一套自己的证书链,所以我的证书路径为 /etc/pki/test
  • 因为是用 openssl 生成证书,所以对 /etc/pki/tls/openssl.cnf 即 openssl 的配置文件进行了修改,该文件的内容即使用 openssl 时的一些默认配置
  • 使用 openssl 的各个命令时,若参数是默认配置,可以不用指定;若想替换默认配置,指定对应参数即可;具体就看个人的使用喜好了。
    例如,我在 openssl.cnf 中添加了 [ CA_test ] 相关的默认配置,所以使用 openssl ca -name CA_test 即可免掉一下默认参数的指定

nginx 配置

nginx 的配置很简单,添加如下配置即可

ssl_verify_client on;
ssl_client_certificate cacert.pem;

其中 ssl_client_certificate 值得说明一下,其指定的文件中,存放的是签发验证客户端证书的相关证书的公密信息,格式为 pem 格式,可以罗列多个

什么是'签发验证客户端证书的相关证书'呢?举例说明:

c1、c2 是客户端证书

  1. 对于证书链 ca -> c1、c2; cacert.pem 中就要放 ca 的公密信息
  2. 对于证书链 ca -> a -> c1、c2; cacert.pem 中就要放 ca 和 a 的公密信息
  3. 对于证书链 ca1 -> a -> c1 和 ca2 -> c2; cacert.pem 中就要放 ca1、ca2、a 的公密信息

另外:

  • 针对用例2、3,还得修改 nginx 的配置 ssl_verify_depth
  • cacert.pem 中公密的顺序没有讲究
  • 公密之间可以用 # 添加注释说明
posted @ 2017-06-19 16:33  snadn  阅读(312)  评论(0编辑  收藏  举报