zoukankan      html  css  js  c++  java
  • 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 中公密的顺序没有讲究
    • 公密之间可以用 # 添加注释说明
  • 相关阅读:
    好题Islands
    DB2的安装
    MariaDB存在的问题
    MariaDB 脚本
    SQL 执行顺序
    Maria数据库
    3 ignite windows 上安装
    Cassandra 学习七 cassandra研究
    Cassandra学习六 一些知识点
    Cassandra学习五 使用Key的正确姿势
  • 原文地址:https://www.cnblogs.com/snadn/p/7049354.html
Copyright © 2011-2022 走看看