About this blog

MENU

Nginx下部署SSL客户端验证(双向验证)

2017 年 12 月 29 日 • 阅读: 177 • 技术,教程

SSL客户端是一种部署简单,使用方便且平台兼容性非常强的加密方式,它不需要设置复杂的密码就可以验证用户是否可信

环境准备

yum install openssl
cd /usr/local/nginx/conf/ssl
mkdir authssl
cd authssl

创建根证书(CA证书)

含密码

openssl genrsa -des3 -out authca.key 4096

不含密码

openssl genrsa -out authca.key 4096

为CA密钥签发证书

openssl req -new -x509 -days 365 -key authca.key -out authca.crt

输入相关信息

至此服务端的相关证书已经创建完成

创建客户端验证证书

openssl genrsa -out authclient.key 4096
openssl req -new -key authclient.key -out authclient.csr
openssl x509 -req -days 3650 -in authclient.csr -CA authca.crt -CAkey authca.key -set_serial 01 -out authclient.crt
openssl pkcs12 -export -clcerts -in authclient.crt -inkey authclient.key -out authclient.p12

部署到Nginx

首先部署一个h5ai来最方便地展示效果

/data/wwwroot/resource.irain.in目录下创建如下目录树
resource.irain.in
├─ _h5ai
├─ public_resource
└─ private_resouce
如字面意思一般我们希望给private_resource这个目录添加加密

设置Nginx文件

vi /usr/local/nginx/conf/vhost/resource.irain.in.conf

添加内容

ssl_client_certificate /usr/local/nginx/conf/ssl/authssl/authca.crt;
ssl_verify_client on;

此时访问全站就会进入加密状态,如果没有加载客户端证书则会出现下面的Nginx验证失败页面
验证失败

关于ssl_verify_client on;这一条中
如果把on修改为opitional则验证SSL证书这一过程会变成可选项,可选的结果可以会在$ssl_client_verify这一变量中表现出来

而利用这一方式也就可以使我们达到加密某一目录的目的

ssl_client_certificate /usr/local/nginx/conf/ssl/authssl/authca.crt;
ssl_verify_client optional;
location /private_resource {
        if ($ssl_client_verify != SUCCESS) {
            return 401;
        }
    }

此时,private_resouce则已经被加密,在已经安装了authclient证书的设备下就可以直接访问了

PS: 其实客户端服务端一起只用一个CA证书也可以验证的

参考内容

SSL双向认证(高清版)
Module ngx_http_ssl_module
Certificate Authority

返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码