共计 2745 个字符,预计需要花费 7 分钟才能阅读完成。
需求:管理后台登录限制,只允许在职人员登录,离职人员无法登录。
解决方案: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 http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/122303.htm