1、创建Root CA私钥

openssl genrsa -out root-ca.key 1024

2、创建Root CA证书请求

openssl req -new -out root-ca.csr -key root-ca.key

3、签发Root CA根证书

openssl x509 -req -in root-ca.csr -out root-ca.crt -signkey root-ca.key -CAcreateserial -days 3650

5、生成服务器私钥

openssl genrsa -out server.key 2048

6、生成服务器证书签名请求

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

Common Name注意使用服务器的域名

7、使用Root CA签发服务器证书(Root CA证书、Root CA私钥、服务器CSR)

openssl x509 -req -in server.csr -out server.crt -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -days 3650

8、生成客户端私钥

openssl genrsa -out client.key 2048

9、生成客户端证书签名请求

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

10、签发客户端证书(Root CA证书、Root CA私钥、服务器CSRc)

openssl x509 -req -in client.csr -out client.crt -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -days 3650

11、客户端证书转为p12格式(p12格式才能导入浏览器)

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

全过程:

Nginx验证客户端证书(使用OpenSSL生成自签名证书)

然后配置Nginx:

server

{

listen 11111;

server_name *.*.com;

ssl on;

ssl_certificate /root/ssl-cert/server.crt;

ssl_certificate_key /root/ssl-cert/server.key;

ssl_verify_client on;

ssl_client_certificate /root/ssl-cert/root-ca.crt;

location / {

client_max_body_size 10M;

proxy_set_header X-Forwarded-Host $host;

proxy_set_header X-Forwarded-Server $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

proxy_ssl_verify off;

proxy_pass http://172.*.*.*:8080/;

proxy_redirect default;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

server

{

listen11111;

server_name  *.*.com;

sslon;

ssl_certificate/root/ssl-cert/server.crt;

ssl_certificate_key/root/ssl-cert/server.key;

ssl_verify_clienton;

ssl_client_certificate/root/ssl-cert/root-ca.crt;

location/{

client_max_body_size10M;

proxy_set_headerX-Forwarded-Host$host;

proxy_set_headerX-Forwarded-Server$host;

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

proxy_set_headerX-Real-IP$remote_addr;

proxy_ssl_verifyoff;

proxy_passhttp://172.*.*.*:8080/;

proxy_redirectdefault;

}

}

此时若不设置客户端证书访问会报错“No required SSL certificate was sent”,我们可以先使用curl进行验证(–insecure标识忽略服务器端证书校验,否则自签名证书会报错):

curl使用客户端证书

如果是通过Chrome访问则是:

No required SSL certificate was sent

此时我们在Chrome中导入客户端证书,设置-高级-管理证书:

Chrome导入客户端证书0

然后将其导入“个人”:

Chrome导入客户端证书1

并在“高级”中勾选“客户端身份验证”的用途:

Chrome导入客户端证书2

然后重启Chrome,再次访问时将被提示选择证书:

Chrome选择客户端证书

nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)相关推荐

  1. java ocsp校验_Nginx使用OCSP验证客户端证书

    此前,Nginx只支持OSCP验证服务器证书. 目前,Nginx 1.19.0+已经支持使用OSCP验证客户端证书:https://trac.nginx.org/nginx/ticket/1534 有 ...

  2. java https 验证客户端证书_Java HTTPS客户端证书认证

    小编典典 终于设法解决了所有问题,所以我会回答我自己的问题.这些是我用来解决特定问题的设置/文件: 该客户端的密钥库是一个PKCS#12格式文件包含 客户端的公共证书(在这种情况下,由自签名CA签名) ...

  3. 本地ca,以及根证书的生成,服务器证书生成,nginx https配置等

    环境: centos7.6 参考: https://blog.51cto.com/liuzhengwei521/2120535?utm_source=oschina-app 工具: 和openssl是 ...

  4. nginx双向认证配置及验证-脚本实现制作证书过程及浏览器验证遇到的一些问题解决

    目录 证书制作 nginx配置 curl命令验证客户端证书 主要几个浏览器添加客户端p12证书的方式 firefox浏览器添加p12证书方式 Chrome浏览器导入客户端p12证书方式 safari浏 ...

  5. nginx配置反向代理验证ssl证书 双向认证

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

  6. 什么是SSL双向认证,与单向认证证书有什么区别?

    SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...

  7. RFC8705-OAuth 2.0双向TLS客户端身份验证和证书绑定访问令牌

    RFC8705-OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens 目录 摘要 1. 简介(I ...

  8. openssl私有CA证书签发与单双向认证

    什么是CA? CA是数字认证中心的简称.指的是发放.管理.废除数字证书的机构. CA的作用: 检查证书持有者身份的合法性.签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理. 建 ...

  9. 如何解决实际错误:配置IIS使其支持SSL加密的HTTPS,并且要求浏览器客户端证书

    原文:http://www.cnblogs.com/dosboy/archive/2013/02/18/2915269.html 在配置IIS的HTTPS和IE客户端的证书时,我们经常出错,本文就是通 ...

最新文章

  1. 文件描述符fd是什么?
  2. [云炬创业基础笔记]第七张创业团队测试2
  3. 体验 Orbeon form PE 版本提供的 JavaScript Embedding API
  4. leetcode213. 打家劫舍 II
  5. 《c语言深度剖析》读书笔记
  6. Jsoup获取所有链接
  7. 迄今为止我所见过的将BP算法最好的PPT
  8. JavaWeb之分页代码
  9. Mysql:实战2000W条数据实现全文检索
  10. 手机微信如何打开html文件,手机上怎么找微信里的电子文件
  11. RT-Thread Studio配置连接WIFI模块
  12. 提高计算机软件速度的方法,提高电脑速度的10个有效方法
  13. 如何查看域名所对应的证书有效期?
  14. nodejs优雅的使用es6语法
  15. 夏天水果店怎么打理,如何打理好一个水果店
  16. 关于win10笔记本电脑设置账号密码,但是关闭盖子打开后不进入输入密码界面的解决方法
  17. 在线HTML文本提取URL链接工具
  18. 华为路由器DCHP服务配置实验
  19. SF30 | 双均线交易模型的震荡过滤
  20. Python 实现图片隐写术

热门文章

  1. android 获取webView高度,设置webView高度
  2. docker 报错 Container is not running
  3. .Net DES加密解密(不带向量)
  4. java错误switch找不到符号,Java使用StringBuilder时--找不到符号
  5. 动态规划之力扣股票类问题
  6. Android自定义RadioButton
  7. link引入html5,CSS引入方式 | link和@import的区别 — 生僻的前端考点
  8. 英语----专业单词
  9. [Swift]LeetCode482. 密钥格式化 | License Key Formatting
  10. 基于51的串行通讯原理及协议详解(uart)