1. 创建根证书

#创建根证书私钥:
openssl genrsa -out root.key 1024#创建根证书请求文件:
openssl req -new -out root.csr -key root.key
#创建根证书:
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
  • 证书的Common Name可填写为 root . 所有客户端和服务器端的证书这个字段需要填写域名或者ip,一定要注意的是,根证书的这个字段和客户端证书、服务器端证书不能一样
  • 其他所有字段的填写,根证书、服务器端证书、客户端证书需保持一致
  • 无用项可以选择直接回车跳过

最终得到:

  • root.crt : 签名有效期为10年的根证书
  • root.key: 根证书私钥文件
  • root.csr: 根证书请求文件

后面我们可以用这个根证书去颁发服务器证书和客户端证书

2. 根据根证书创建服务端证书

#生成服务器端证书私钥:
openssl genrsa -out server.key 1024#生成服务器证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out server.csr -key server.key#生成服务器端公钥证书
openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650

通过上面的三个命令,我们得到:

server.key:服务器端的秘钥文件
server.crt:有效期十年的服务器端公钥证书,使用根证书和服务器端私钥文件一起生成
root.srl: CA签发证书的序列号记录文件,全名是 root.Serial 。
server.csr : 服务端证书请求文件(请求证书时使用, 后续配置无用)

3. 根据根证书创建客户端证书

需要注意的是, 可以生成多个客户端证书, 只需安装下面1-4步重新生成即可

#生成客户端证书秘钥:
openssl genrsa -out client.key 1024#生成客户端证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out client.csr -key client.key#生客户端证书
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650#生客户端p12格式证书,需要输入一个密码,选一个好记的,比如123456
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

重复使用上面的三个命令,我们得到:

client.key:客户端的私钥文件
client.crt:有效期十年的客户端证书,使用根证书和客户端私钥一起生成
client.p12:客户端p12格式,这个证书文件包含客户端的公钥和私钥,主要用来给浏览器或postman访问使用
clinet.csr : 客户端证书请求文件(请求证书时使用, 后续配置无用)

4. nginx配置

server {listen       443 ssl;server_name  www.yourdomain.com;# 无域名可填写ipssl                  on;  ssl_certificate      /data/sslKey/server.crt;  #server公钥证书ssl_certificate_key  /data/sslKey/server.key;  #server私钥ssl_client_certificate /data/sslKey/root.crt;  #根证书,可以验证所有它颁发的客户端证书ssl_verify_client on;  #开启客户端证书验证  # 反向代理eg: 作用是通过https(443端口)访问, 则会直接去请求本机的8991端口location / {proxy_pass http://127.0.0.1:8991/;}#location / {#    root   html;#    index  index.html index.htm;# }}

注意:

配置的主要内容是配置了服务器端证书的公钥私钥以及根证书的公钥, 并且ssl_verify_client 参数设置为 on

如果客户端证书不是由根证书直接颁发的,配置中还需要加一个配置:ssl_verify_depth 1;

配置完成后,通过nginx -s reload 令配置文件重新加载, 无需重启

如果手里面只有通过正规途径申请下来的证书(而不是上面自签证做法), 得到的证书如下面所示, 这里只有服务端证书而没有服务端和根证书, 所以仍需要我们以自签证的方式生成根证书以及客户端证书

访问测试

访问方式1:curl带证书访问

   curl --cert ./client.crt --key ./client.key https://xxx.xxx.com -k

访问方式2:postman

1.在设置General中先把SSL certificate verification关掉

2.可以Certificates中配置p12文件,p12文件可以认为是一对公私钥的合体文件, 同时也要配置p12文件的密码。注意这里的地址和端口要与实际的一致,否则请求时会认证失败。

3.也可以在Certificates中配置客户端公私钥证书。无需配置密码

nginx实现双向认证相关推荐

  1. Nginx的双向认证

    Nginx的双向认证 一.前言 参考链接 OPENSSL加密DSA,RSA介绍 客户端默认是相信权威CA机构的,操作系统内置了CA证书. 说白了就是操作系统默认就有了CA证书的公钥,比如我们能访问ht ...

  2. nginx ssl 双向认证

    Nginx的浏览器/服务器双向SSL证书认证配置 文章分类:操作系统 最近的项目中需要安全性控制,而我又懒得改动后台的程序代码,故而想在反向代理层加入SSL证书验证. 一直在用Nginx做反向代理,但 ...

  3. Nginx Https 双向认证

    1 基础知识 1.1 单向认证 SSL 步骤 1.客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息 2.服务器向客户 ...

  4. firefox+linux+nginx搭建server与client通过证书双向认证环境

    项目中需要搭建一个server和client基于证书的双向认证环境.由我来做,我也不会. 经过一晚上的研究,基本摸清了(知其然不知其所以然).做下笔记. 基本环境: 1.安装nginx. 2.安装op ...

  5. windows 下 nginx 双向认证自签名证书配置

    1. 创建根证书密钥.服务器证书私钥.客户端证书私钥: openssl genrsa -out root.key 2048 openssl genrsa -out server.key 2048 op ...

  6. nginx 配置 https双向认证

    参考文章: https://blog.csdn.net/xiangguiwang/article/details/76400805 https://blog.csdn.net/qq_37049781/ ...

  7. SSL双向认证的实现

    2019独角兽企业重金招聘Python工程师标准>>> 环境 系统:archlinux/centOS nginx:nginx/1.12.2 浏览器:火狐firefox 前提:1.安装 ...

  8. 浅谈基于openssl的多级证书,Multi-level CA的签发和管理,以及双向认证

    最近在研究openssl签发证书,在网上搜索关于openssl的用法.资料等等,总觉得非常分散,而且讲得比较浅,文章虽然不少,但是缺少真正能给你讲的明白得,仅停留在"能用"上,感慨 ...

  9. CA双向认证完整实现步骤(附java客户端代码)

    一.基础概念 注:以下概念除专业名词外,均为个人理解,不具备权威性. 1.什么是系统安全管理 置于公网的系统,通常都需要一定的安全管理,据我个人理解,这里的安全管理主要分三个方面: 一是应用内的权限控 ...

最新文章

  1. 理解Java中的弱引用(Weak Reference)
  2. 面向对象数据库和关系数据库的区别
  3. Appointment在SPRO里的date profile配置
  4. 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
  5. 《深入理解分布式事务》第六章 最终一致性分布式事务解决方案
  6. java 并发框架源码_某网Java并发编程高阶技术-高性能并发框架源码解析与实战(云盘下载)...
  7. eclipse显示行号和Tab、空格、回车
  8. eclipse(Kepler Service Release 2)问题记录
  9. 软件著作权申请流程及模板
  10. win7注册表无法修改计算机名称,win7注册表无法修改怎么办 win7注册表不能更改怎么办...
  11. skype国际版android,Skype国际版
  12. 关于RN报Unrecognized font family ionicons
  13. 麒麟案例 | 南浔电商领头羊+麒麟计划,碰撞出了企业下一个10年增长之路!
  14. 单片机备用电池供电电路_单片机usb供电电路原理图详解
  15. 【TCP专题】TCP连接断开
  16. 将千克转换成磅 Exercise05_03
  17. c 语言token函数,科普 | Compound的cToken及相关核心函数
  18. matlab对exl数据分析,基于MATLAB的EXCEL数据计算与分析
  19. C++11 新特性。
  20. JMeter基础使用教程及使用技巧(快速入门)

热门文章

  1. ExcelApplication.WorkBook.SaveAs function
  2. 关于面试,我有大技巧
  3. LSP与tunnel关系
  4. 从framework角度看app保活问题
  5. 专家看台:阿里软件产品设计师成长之路
  6. 计算机审计兴趣小组工作小结,兴趣小组活动总结3篇
  7. Google Play 政策更新提醒与重点解读 | 2021 年 10 月
  8. InDesign 教程:如何在帧之间流动文本?
  9. canvas--满天星效果
  10. 手游《白话三国》挂机称霸 一统天下(设计思路整理)