适用于公司内部一些业务系统对安全性要求比较高,业务系统只允许公司内部人员访问,而且要求浏览器要安装证书登录,对公司入职有需求的人员开通证书,流失的人员注销证书。

修改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私钥

umask 0077    ##建立文件时预设权限掩码为0077 确保证书只有拥有者才可以访问
openssl genrsa -out private/cakey.pem 2048    ##制作RSA算法,长度为2048的ca私钥

制作自签名证书,建议制作好了后备份一下ca.crt证书

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

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

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

touch index.txt serial crlnumber
echo '01' > serial
echo '01' > crlnumber
openssl ca -gencrl -crldays 3650 -out ca.crl    # 产生crl文件,供吊销证书使用

自建CA完成

注意事项:

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

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

cd /etc/pki/CA && umask 0022 && mkdir server && cd server

制作服务器端私钥

umask 0077 && openssl genrsa -out server.key 2048

制作服务器端证书申请指定使用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 && umask 0022 && mkdir client && cd client

制作客户端私钥

umask 0077 && openssl genrsa -out client.key 2048

制作客户端证书申请

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

签署证书,有效期为1年

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

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

vim /etc/nginx/conf.d/ssl.conf
server{listen 443 ssl;  #SSL 访问端口号为 443ssl_certificate /etc/pki/CA/server/server.crt;  #当前虚拟主机使用使用的公钥文件,一般是crt文件ssl_certificate_key /etc/pki/CA/server/server.key; #当前虚拟主机使用的私钥文件,一般是key文件ssl_client_certificate /etc/pki/CA/ca.crt; #当前虚拟主机的用来签发客户端证书的ca证书,验证客户端证书ssl_verify_client on;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #支持ssl协议版本ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;  #配置加密套件,写法遵循 openssl 标准ssl_prefer_server_ciphers on;ssl_crl /etc/pki/CA/ca.crl;   #检查吊销的证书location / {proxy_pass   http://192.168.190.178:8080;proxy_redirect default;        }
}

检查 nginx 配置

nginx -t

重新加载配置文件

nginx -s reload

没导入证书访问

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

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

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

sz client.p12

导入证书后在访问

撤销用户证书
例如要注销名字为ceshi的证书,得到ceshi这张证书对应的值为03

cat /etc/pki/CA/index.txt | grep ceshi

cd  /etc/pki/CA/newcerts/
openssl ca -revoke 03.pem                ##完成注销,证书的V会变为R
openssl ca -gencrl -crldays 3650 -out /etc/pki/CA/ca.crl  ###更新ca.crl文件,注意要和nginx配置的吊销路径一致
/usr/local/nginx/sbin/nginx -s reload   ####重启nginx ,吊销证书生效


查看吊销列表ca.crl文件

openssl crl -in /etc/pki/CA/ca.crl -noout -text

被吊销的客户端证书访问报错,证书过期也会报以下错

如果后端应用本来就是https应用,而且应用本来就需要双向认证,这时就需要加上代理证书了,比如应用服务端需要验证的客户端证书名为 tomcatclient.pfx
先提取 tomcatclient.pfx 的私钥和证书

openssl pkcs12 -in tomcatclient.pfx -nodes -out tomcatclient.pem

此时证书和私钥就放在了 tomcatclient.pem 文件中,需要自己手动拷贝


nginx的配置

server{listen 444 ssl;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 ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;ssl_crl /etc/pki/CA/ca.crl;proxy_ssl_certificate /etc/pki/CA/client/tomcatclient.cer;proxy_ssl_certificate_key /etc/pki/CA/client/tomcatclient.key;location / {proxy_pass   https://192.168.190.178:8444;proxy_redirect default;}
}



如果不加 proxy_ssl_certificate proxy_ssl_certificate_key,则报错502

nginx配置反向代理验证ssl证书 双向认证相关推荐

  1. Nginx配置反向代理访问内部服务

    Nginx可以提供高性能的反向代理服务,将客户机请求转发给内部网络中隐藏在幕后的真正的服务器,并将从服务器上得到的结果数据返回给Internet上请求的客户端,在用户看来,Nginx扮演的就是真实服务 ...

  2. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  3. nginx配置反向代理和负载均衡完结篇

    具体安装配置参考之前的文章 https://blog.csdn.net/weixin_44001965/article/details/102723855 文章目录 一,nginx操作的常用命令 ng ...

  4. nginx配置反向代理浏览器输入地址后点击登陆URL发生变化的处理

    今天项目上需要再用NGINX配置反向代理需求如下: 现在有A服务器只做为nginx服务器,B服务器作为代码服务器,用户访问A要实际上访问的是B的程序. 处理方式就是用nginx的方向代理处理即可: 打 ...

  5. nginx配置反向代理过程中遇到的坑 配置好之后报404问题

    项目场景: nginx配置反向代理路径 问题描述 在配置nginx反向代理的过程中,路径可以匹配上但是一直报404,找不到路径.nginx配置如下: location /business {add_h ...

  6. Nginx配置反向代理,一篇搞定!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/zxd1435513775/article/ details/102508463 一.引言 其他话 ...

  7. windows版 nginx配置反向代理实例教程 跳转tomcat和php网站

    抄自 https://www.cnblogs.com/j-star/p/8785334.html 个人理解 nginx端口设置为80,简称n tomcat端口设置为其他,例如8080,简称t php网 ...

  8. Nginx配置——反向代理

    文章目录 0. 引言 1.何为反向代理? 2. Nginx配置文件 2.1 第一部分:全局块 2.2 第二部分:events 块 2.3 第三部分:http 块 2.3.1 全局 server 块 2 ...

  9. ci框架 反向代理配置_《网站建设》Nginx配置反向代理

    [网站克隆] nginx反向代理镜像站点做贼站谈Nginx,实力是反向代理,因为研究肉鸡刷Adsense使用,花了1-2天来弥补Nginx的知识,发现有搜索. [网站克隆] nginx反向代理镜像站点 ...

最新文章

  1. 网站盈利模式分析总结十条(转载)
  2. deepin关机卡桌面_喜大普奔:发现一个惊艳的电脑操作系统Deepin
  3. [数据结构] - 串
  4. Mysql——Innodb和Myisam概念与数据恢复
  5. Linux -- 进程或线程独占CPU
  6. 串口通讯编程一日通2(Overlapped IO模型)
  7. Java静态变量的初始化
  8. 【http协议2】 深入理解HTTP协议
  9. debug工具_Hackintool for【黑】mac V3.4.4中文版 黑苹果必装工具箱
  10. 更换tomcat 地址栏图标
  11. java商城系统设计-----积分商城系统
  12. 舞伴配对问题c语言实训报告,数据结构-舞伴配对实训.docx
  13. mysql删除多表视图数据,【杂谈】怎样删除mysql数据表视图中数据
  14. 2021年web前端基础面试题
  15. 南科大学生对网络授课的反馈
  16. virt-viewer的简单使用
  17. 数学分析第二型曲线积分2021.6.2
  18. 用python实现植物大战僵尸(游戏截图+动态演示+源码分享)
  19. python中日期的数据类型_强制日期时间转换,强制日期时间数据类型,在pandas中使用read_表...
  20. 解决swagger几种报错问题

热门文章

  1. hiho 满减优惠(暴力)
  2. 今日新闻快讯摘要十条
  3. mysql如何存入汉字_[MYSQL]如何导入汉字单字到数据库
  4. 电子签约存证及印章管理整体化解决方案
  5. 第一篇Blog,随便写一点吧:)
  6. php自学难_php难吗?自学要多久?需要报培训班吗?
  7. 天上的街市Unity游戏场景制作案例(一)
  8. JavaScript 获取当前周数
  9. Java集合移除某个元素
  10. 不可思议有氧机器人_不思议迷宫奇怪的机器人怎么得?不思议迷宫奇怪的机器人获取一览...