Nginx配置SSL双向验证(后台登录限制)

需求:管理后台登录限制,只允许在职人员登录,离职人员无法登录。

解决方案:Nginx配置SSL双向验证

环境          :  Ubuntu 14.04

openssl位置  :  /etc/ssl/openssl.conf

nginx版本    :  1.8.0

nginx ssl目录 :  /etc/nginx/admin

-------------------------------------------

1、使用openssl实现证书中心

(1)编辑证书中心配置文件(/etc/ssl/openssl.conf)

dir            = /etc/ssl

(2)创建newcerts 目录       

mkdir -p /etc/ssl/newcerts

(3)创建证书私钥

cd /etc/ssl

## 写入初始证书序号,为4个HEX字符

echo 12A8 > serial

## 生成证书数据库

touch index.txt

## 生成crlnumber 为了注销用户 ##

echo 12A8 > crlnumber

cd /etc/ssl/private

openssl genrsa -out cakey.pem 2048

(4)生成自签证书

cd /etc/ssl/       

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

2、创建服务器证书

mkdir -p /etc/nginx/admin

cd /etc/nginx/admin     

openssl genrsa -out nginx.key 1024

openssl req -new -key nginx.key -out nginx.csr

openssl ca -in nginx.csr -out nginx.crt -days 3650

openssl ca -gencrl -crldays 7 -out ca.crl    # 产生crl文件,供吊销证书使用

3、创建客户端浏览器证书(例如创建用户:李雷)

mkdir -p /etc/nginx/admin/user/lilei        #创建李雷证书存放目录   

cd /etc/nginx/admin/user/lilei

openssl genrsa -out lilei.key 1024

openssl req -new -key lilei.key -out lilei.csr

openssl ca -in lilei.csr -out lilei.crt -days 3650

# 将文本格式的证书转换成可以导入浏览器的证书

openssl pkcs12 -export -clcerts -in lilei.crt -inkey lilei.key -out lilei.p12

4、配置Nginx服务器验证

ssl                  on;

ssl_certificate        /etc/nginx/admin/nginx.crt;

ssl_certificate_key    /etc/nginx/admin/nginx.key;

ssl_client_certificate  /etc/ssl/cacert.pem;

ssl_session_timeout  5m;

ssl_verify_client on; #开户客户端证书验证

ssl_protocols  SSLv2 SSLv3 TLSv1;

ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers  on;

ssl_crl /etc/nginx/admin/ca.crl;  #启用吊销证书检查

5、撤销用户证书

cd /etc/ssl/

grep "lilei" index.txt    类似如下

V      250817084430Z          12AC    unknown /C=CN/ST=FUJIAN/O=xxx/OU=xxxx/CN=xxxxx/emailAddress=xxxxx

可得 值为12AC

cd  /etc/ssl/newcerts

openssl ca -revoke 12AC.pem                ##完成注销

然后查看index.txt  可以看到V变成R

必须注意的一点是,必须更新此文件,不然撤销证书后依然能通过验证。另外我们设置crl文件过期时间为7天,如果7天后,我们未更新crl文件,nginx服务器将拒绝所有证书匹配。故我们还应开启crontab,定期更新crl文件

定时任务脚本如下:

#!/bin/sh

NGINX_SSL_PATH=/etc/nginx/admin

cd $NGINX_SSL_PATH

openssl ca -gencrl -crldays 7 -out ca.crl

DATE_NOW1=$(/bin/date +%Y-%m-%d\ %H:%M:%S)

echo "$DATE_NOW1 has success updata" >> /home/cron/updata_cakey.log

/etc/init.d/nginx reload

更多Nginx相关教程见以下内容

CentOS 6.2实战部署Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程

CentOS 6.3下Nginx性能调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配置Nginx+Pcre+php-fpm

Nginx安装配置使用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

Nginx 的详细介绍请点这里
Nginx 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ec940dee6d4594b4a52a9a45a6cdfa45.html