博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx中配置ssl双向认证详解
阅读量:2437 次
发布时间:2019-05-10

本文共 3033 字,大约阅读时间需要 10 分钟。

nginx中配置ssl双向认证详解

[转自]
(https://blog.csdn.net/yuanlin65/article/details/53187710)

需求说明:公司内部一些业务系统对安全性要求比较高,例如mis、bi等,这些业务系统只允许公司内部人员访问,而且要求浏览器要安装证书登录,对公司入职有需求的人员开通证书,流失的人员注销证书。

修改openssl配置的参数

没安装openssl需要先安装

vim  /etc/pki/tls/openssl.cnf

下面只列出配置文件中和自建CA有关的几个关键指令

dir=/etc/pki/CA      #CA的工作目录database=$dir/index.txt    #签署证书的数据记录文件,下面会生成index这个文件new_certs_dir=$dir/newcerts   #存放新签署证书的目录serial=$dir/serial     #新证书签署号记录文件下,下面会生成serial这个文件certificate=$dir/ca.crt    #CA的证书路径,下面会对应生成ca.crt这个证书private_key=$dir/private/cakey.pem   #CA的私钥路径,下面会生成这个密钥crlnumber       = $dir/crlnumber        # 吊销证书用,下面会生成这个文件crl             = $dir/ca.crl        # 当前证书列表,与下面生成的吊销证书文件名一致

使用openssl制作CA的自签名证书

切换到CA的工作目录

cd /etc/pki/CA

制作CA私钥

umask077    ###确保证书只有拥有者才可以访问openssl genrsa -out private/cakey.pem 2048

制作自签名证书

openssl req -new -x509 -key private/cakey.pem -out ca.crt

生成数据记录文件,生成签署号记录文件,给文件一个初始号。

注意 commonName = aaa.com(对应域名) ###这个填域名,这个是后面证书的颁发者

touch index.txttouch serialtouch crlnumber   ###注销证书用echo '01' > serialecho '01' > crlnumberopenssl ca -gencrl -crldays3650 -out ca.crl    # 产生crl文件,供吊销证书使用

自建CA完成

准备服务器端证书

建立存放服务器证书文件夹

cd /etc/pki/CA;mkdir server;cd server

制作服务器端私钥

umask077openssl genrsa -out server.key 1024

制作服务器端证书申请指定使用sha512算法签名(默认使用sha1算法)

openssl req -new -key server.key -sha512 -out server.csr

签署证书,3650是指证书有效期为10年

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

服务器证书准备完成

准备客户端证书

建立存放客服端证书的文件夹

cd /etc/pki/CA;mkdir client;cd client

制作客户端私钥

umask077openssl genrsa -out client.key 1024

制作客户端证书申请

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

签署证书,有效期为10年

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

注意事项:

  1. 制作证书时会提示输入密码,设置密码可选,服务器证书和客户端证书密码可以不相同。
  2. 服务器证书和客户端证书制作时提示输入省份、城市、域名信息等,需保持一致,commonName这个需要不同。

nginx的配置

注意:

nginx编译的时候要带上–with-http_ssl_module选项

server{        listen 443;        server_name localhost;        ssi on;        ssi_silent_errors on;        ssi_types text/shtml;        ssl on;        ssl_certificate /etc/pki/CA/server/server.crt;        ssl_certificate_key /etc/pki/CA/server/server.key;        ssl_client_certificate /etc/pki/CA/ca.crt;        ssl_verify_client on;        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;        ssl_prefer_server_ciphers On;        ssl_crl /etc/pki/CA/server/ca.crl;  #检查吊销的证书        location / {                proxy_pass   http://localhost:8080; ##反向代理到tomcat 8080 端口                proxy_redirect default;        }}

客户端证书格式转换

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

cd /etc/pki/CA/clientopenssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

#sz client.p12到windows,然后把client.p12导入到浏览器的个人证书里,重启浏览器,导入正常就能正常访问,否则返回400没有证书被发送错误。

撤销用户证书

例如要注销名字为ceshi的证书

cat index.txt | grep ceshi 类似如下

V 261106092713  04   unknown /C=CN/ST=GD/O=CKY/OU=YW/CN=ceshi/emailAddress=1234567@qq.com

可得 值为04

cd  /etc/ssl/newcertsopenssl ca -revoke 04.pem                ##完成注销,证书的V会变为Ropenssl ca -gencrl -crldays 3650 -out ca.crl ###更新ca.crl文件/usr/local/nginx/sbin/nginx -s reload   ####重启nginx ,吊销证书生效
你可能感兴趣的文章
mysql唯一索引的一个小常识--Duplicate entry 'XXX' for key 'XXX'
查看>>
故障处理--mongos count不准
查看>>
大量短连接导致haproxy服务器端口耗尽
查看>>
mongo3.0.9库命名的一个S级bug
查看>>
跨版本导入数据导致mysqld崩溃
查看>>
xtrabackup对于flush tables with read lock操作的设置
查看>>
Gone away故障原因排查
查看>>
Server has authorization schema version 3,but found a schema version 1 user
查看>>
WebSphere的池设置——线程池、连接池
查看>>
caffe-ssd调试问题总结
查看>>
用户态调测工具(二):perror和man
查看>>
机器学习&深度学习入门历程
查看>>
LTP(Linux Test Project)学习(一)——LTP介绍
查看>>
LTP(Linux Test Project)学习(二)——LTP下载编译执行
查看>>
LTP(Linux Test Project)学习(三)——LTP目录介绍
查看>>
DirtyCow CVE-2016-5195分析
查看>>
caffe编译报错解决记录
查看>>
LTP(Linux Test Project)学习(七)——LTP提交补丁
查看>>
Linux 4.0亮点特性
查看>>
LTP(Linux Test Project)学习(六)—— 问题分析:chattr命令的限制
查看>>