本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级

目录

1、背景

2、运行环境

3、工具下载

3.1、OpenSSL下载

3.2、nginx下载

4、制作https证书:

4.1、CA与自签名:

4.2、制作CA根证书(公钥)

4.3、制作服务端证书:

4.4、制作客户端证书:

4.5、制作PFX证书

5、进行https认证配置:

5.1、单向认证

5.1.1、nginx.conf配置

5.1.2、验证配置文件

5.1.3、域名指向配置

5.1.3、浏览器客户端验证

5.2、双向配置

5.2.1、nginx.conf配置

5.2.2、验证配置文件

5.2.3、浏览器客户端验证-1

5.2.4、浏览器客户端配置

5.2.4、浏览器客户端验证-2


1、背景

公司有个项目需要做相关的https接口的检测,需要用到客户端证书认证,也就是需要客户端发起请求的时候携带客户端证书的那种,中间也看了一些网上材料说的不是很全,特地编写此文记录并帮助有需要的朋友,同时基于此基础上再POSTMAN工具上做了上传证书和接口验证。

2、运行环境

本次环境为win10+jdk1.8;准备使用openssl3.3.2制作证书、nginx1.27.1代理和证书配置,以下会介绍openssl3.3.2和nginx1.27.1的下载

3、工具下载

3.1、OpenSSL下载

https://slproweb.com/products/Win32OpenSSL.html

下载地址:https://slproweb.com/download/Win64OpenSSL-3_3_2.exeicon-default.png?t=O83Ahttps://slproweb.com/download/Win64OpenSSL-3_3_2.exe

选择Win64 OpenSSL v3.3.2

安装成功后将openssl的bin文件夹目录配置到系统环境变量Path中,目的是为了后续使用openssl的命令在cmd窗口的任何路径都可以使用;系统变量Path配置如下所示:

在cmd窗口中使用命令openssl -v,出现openssl的版本信息即表示安装成功。

E:\software\nginx-1.27.1>openssl -v
OpenSSL 3.3.2 3 Sep 2024 (Library: OpenSSL 3.3.2 3 Sep 2024)

3.2、nginx下载

https://nginx.org/en/download.html

下载地址:https://nginx.org/download/nginx-1.27.1.zipicon-default.png?t=O83Ahttps://nginx.org/download/nginx-1.27.1.zip

安装成功后的路径在E:\software\nginx-1.27.1,鼠标双击nginx.exe即可启动nginx,可在谷歌浏览器访问http://localhost/出现如下界面表示成功:

4、制作https证书:

nginx安装目录E:\software\nginx-1.27.1\conf下新建证书文件夹SSL,进入该文件夹SSL开始制作证书

4.1、CA与自签名:

制作CA私钥

openssl genrsa -out ca.key 2048

4.2、制作CA根证书(公钥)

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

制作证书的时候需要填写相关信息,以下信息可以参考下填写 

EMAILADDRESS=11@qq.com, CN=root, OU=rz, O=rz, L=changsha, ST=hunan, C=zh

4.3、制作服务端证书:

制作服务端私钥

openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key

生成签发请求

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

用CA签发

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

制作证书的时候需要填写相关信息,以下信息可以参考下填写,其中CN是填写的HTTPS需访问域名apitest.local.cn,这个并不是一个外部购买域名,是本地虚拟的,等全部证书配置完后会把此域名配置到hosts文件进行本地映射。

EMAILADDRESS=11@qq.com, CN=apitest.local.cn, OU=rz, O=rz, L=changsha, ST=hunan, C=zh

4.4、制作客户端证书:

制作客户端私钥

openssl genrsa -out client.pem 1024
openssl rsa -in client.pem -out client.key

生成签发请求

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

用CA签发

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

制作证书的时候需要填写相关信息,以下信息可以参考下填写,其中CN是填写的HTTPS需访问域名apitest.local.cn(此CN与服务器证书保持一致),这个并不是一个外部购买域名,是本地虚拟的,等全部证书配置完后会把此域名配置到hosts文件进行本地映射。

EMAILADDRESS=11@qq.com, CN=apitest.local.cn, OU=rz, O=rz, L=changsha, ST=hunan, C=zh

4.5、制作PFX证书

windows上安装的证书需要pfx格式,也叫p12格式,生成方式如下:

openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx

执行以上命令的时候需要输入一个密码,可简单设置自己容易记住的,后续导入证书到浏览器会用到此密码。

5、进行https认证配置:

先将本地nginx.conf文件做以下复制备份

5.1、单向认证

5.1.1、nginx.conf配置

单向认证只需在服务端Nginx的配置文件nginx.conf里面做配置即可:

    # HTTPS server#server {listen       443 ssl;listen       [::]:443 ssl;server_name  apitest.local.cn;#单向认证#配置服务端证书,所有证书文件建议放在Nginx文件夹下,避免SELINUX导致的证书文件读取错误ssl_certificate SSL/server.crt;#配置服务端秘钥ssl_certificate_key SSL/server.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;#ssl_ciphers HIGH:!aNULL:!MD5;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法#安全链接可选的加密协议ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    ssl_prefer_server_ciphers on;location / {root   html;index  index.html index.htm;}location /ubase-admin {proxy_pass http://127.0.0.1:8088;proxy_set_header Host $Host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;proxy_set_header X-Host $host:$server_port;proxy_set_header X-Scheme $scheme;proxy_connect_timeout 30s;proxy_read_timeout 86400s;proxy_send_timeout 30s;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# HTTP反向代理相关配置结束 <<<access_log  /temp-ubase-admin.log;error_log  /temp-ubase.error.log;}

5.1.2、验证配置文件

配置Nginx,测试Nginx配置文件是否有语法错误命令nginx -t:

验证配置文件失败示例:

以下表示找不到相应的文件,可能是路径配置错误了

E:\software\nginx-1.27.1>nginx -t
nginx: [emerg] cannot load certificate "E:\software\nginx-1.27.1/conf/SSL2/server.crt": BIO_new_file() failed (SSL: error:80000003:system library::No such process:calling fopen(E:\software\nginx-1.27.1/conf/SSL2/server.crt, r) error:10000080:BIO routines::no such file)
nginx: configuration file E:\software\nginx-1.27.1/conf/nginx.conf test failed

重新加载Nginx配置文件,然后以优雅的方式重启Nginx:nginx -s reload

验证配置文件成功示例:

E:\software\nginx-1.27.1>nginx -t
nginx: the configuration file E:\software\nginx-1.27.1/conf/nginx.conf syntax is ok
nginx: configuration file E:\software\nginx-1.27.1/conf/nginx.conf test is successful

5.1.3、域名指向配置

先在window hosts文件后追加以下代码,一般hosts文件在

C:\Windows\System32\drivers\etc

127.0.0.1 apitest.local.cn

追加完后保存文件即可。 

5.1.3、浏览器客户端验证

在客户端谷歌浏览器进行验证,在谷歌浏览器url地址栏中输入:https://apitest.local.cn/ubase-admin/captchaImage,按enter进行访问弹出不安全连接的警告,点击忽略继续访问,成功访问到资源即单向配置成功了。 

以上访问地址中apitest.local.cn域名就是证书中配置的CN值,同时在hosts文件中做了配置指向本地服务器,其中的/ubase-admin是nginx.conf配置的代码服务路径,指向本地启动的一个测试应用服务其中有一个GET API接口captchalmage,出现以下截图示例表示单向认证成功了。

5.2、双向配置

5.2.1、nginx.conf配置

在单向配置的基础之上只需将根认证证书(公钥配置在nginx里面),并打开https双向认证的设置:ssl_verify_client on

    # HTTPS server#server {listen       443 ssl;listen       [::]:443 ssl;server_name  apitest.local.cn;#单向认证#配置服务端证书,所有证书文件建议放在Nginx文件夹下,避免SELINUX导致的证书文件读取错误ssl_certificate SSL/server.crt;#配置服务端秘钥ssl_certificate_key SSL/server.key;#双向认证#开启客户端证书校验ssl_verify_client on;#配置客户端证书用于验证客户端合法性ssl_client_certificate SSL/ca.crt;ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;#ssl_ciphers HIGH:!aNULL:!MD5;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法#安全链接可选的加密协议ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    ssl_prefer_server_ciphers on;location / {root   html;index  index.html index.htm;}# 本地测试应用服务ubase-adminlocation /ubase-admin {proxy_pass http://127.0.0.1:8088;proxy_set_header Host $Host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;proxy_set_header X-Host $host:$server_port;proxy_set_header X-Scheme $scheme;proxy_connect_timeout 30s;proxy_read_timeout 86400s;proxy_send_timeout 30s;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}# HTTP反向代理相关配置结束 <<<access_log  /temp-ubase-admin.log;error_log  /temp-ubase.error.log;}

5.2.2、验证配置文件

重新配置Nginx,测试Nginx配置文件是否有语法错误:nginx -t,重新加载Nginx配置文件,然后以优雅的方式重启Nginx:nginx -s reload

E:\software\nginx-1.27.1>nginx -t
nginx: the configuration file E:\software\nginx-1.27.1/conf/nginx.conf syntax is ok
nginx: configuration file E:\software\nginx-1.27.1/conf/nginx.conf test is successfulE:\software\nginx-1.27.1>nginx -s reload

5.2.3、浏览器客户端验证-1

在验证之前先参考5.1.3、域名指向配置

在客户端谷歌浏览器进行验证,在浏览器url地址栏中输入:https://apitest.local.cn/ubase-admin/captchaImage,按enter进行访问会弹出以下拦截提示:

5.2.4、浏览器客户端配置

因为是双向认证,在发起客户端是需要做相关配置的,所以我们需要将之前做的客户端证书导入到谷歌浏览器中才能访问。

打开谷歌浏览器(版本 123.0.6312.106(正式版本) 64 位),找到:设置->隐私设置和安全性->安全->管理证书:

点击安全,然后再点击管理证书

点击导入,再点击下一步。

选择之前做的client.pfx证书

5.2.4、浏览器客户端验证-2

然后将准备好的证书client.pfx导入到浏览器中,导入成功后关闭浏览器然后再重启(一定要重启谷歌浏览器),重新访问刚才的的https://apitest.local.cn/ubase-admin/captchaImage,就会提示:

浏览器会自动弹出此证书选择框提示,点击你选中你刚才导入的证书然后就可以正常访问了
 

6、结语

以上配置和验证写完了,有不明白或者不够细致的地方可以在评论区留言。

原创不易,希望各位客官点赞+评论+收藏,一键三连! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542194.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ&#xff1a;Zynq-7000 All Programmable SoC&#xff08;APSoC&#xff09;&#xff0c;赛灵思公司&#xff08;AMD Xilinx&#xff09;推出的新一代全可编程片上系统 PS&#xff1a;Processing System&#xff0c;处理系统 PL&#xff1a;Program Logic&…

828华为云征文 | 构建高效搜索解决方案,Elasticsearch Kibana的完美结合

前言 构建高效搜索解决方案&#xff0c;FlexusX服务器与Elasticsearch & Kibana的完美结合&#xff0c;为企业带来云端搜索新体验。FlexusX实例以其卓越性能与灵活扩展性&#xff0c;确保高并发搜索的流畅运行。部署Elasticsearch&#xff0c;享受分布式搜索的精准与快速&a…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

9.22今日错题解析(软考)

前言 这是用来记录我每天备考软考设计师的错题的&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&#xff0c;最后希望各位报考软考的小伙伴都能上岸&#xff01;&#xff01;&…

掌上高考爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuZ2Fva2FvLmNuL3NjaG9vbC9zZWFyY2g/cmVjb21zY2hwcm9wPSVFNSU4QyVCQiVFOCU4RCVBRg 一、抓包分析 二、逆向分析 搜索定位加密参数 本地生成代码 var CryptoJS require(crypto-js) var crypto require(crypto);f "D23ABC#56"function v(t…

Redis数据结构之set

一.set集合特性 集合类型也是保存多个字符串类型的元素的&#xff0c;但和list列表不一样&#xff0c;集合中的元素是无序的&#xff0c;而且元素不能够重复&#xff0c;不仅支持增删查改&#xff0c;还支持交集并集等操作 二.相关命令 1.sadd sadd key members…… 咱们把…

华为HarmonyOS地图服务 9 - 如何在地图上绘制多边形?

场景介绍 本章节将向您介绍如何在地图上绘制多边形。 接口说明 添加多边形功能主要由MapPolygonOptions、addPolygon和MapPolygon提供&#xff0c;更多接口及使用方法请参见接口文档。 接口名 描述 MapPolygonOptions 用于描述MapPolygon属性。 addPolygon(options: mapC…

SOMEIP_ETS_122: SD_Interface_Version

测试目的&#xff1a; 验证DUT能够以正确的格式响应接口版本获取请求。 描述 本测试用例旨在确保DUT能够正确地返回其接口版本信息&#xff0c;这是SOME/IP协议中用于确定服务兼容性的关键信息。 测试拓扑&#xff1a; 具体步骤&#xff1a; TESTER&#xff1a;触发接口版…

高密原型验证系统解决方案(上篇)

0 引言 随着当今 SoC 设计规模的快速膨胀&#xff0c;仅仅靠几 颗当代最先进的 FPGA 已经无法满足原型验证的需求。简单的增加系统的容量&#xff0c;会遇到系统时钟复位同 步&#xff0c;设计分割以及高速接口和先进 Memory控制器 IP 验证等多重困难。此时&#xff0c;一个商用…

Contact Form 7最新5.9.8版错误修复方案

最近有多位用户反应Contact Form 7最新5.9.8版的管理页面有错误如下图所示 具体错误文件的路径为wp-content\plugins\contact-form-7\admin\includes\welcome-panel.php on line 153 找到welcome-panel.php这个文件编辑它&#xff0c;将如下图选中的部分删除 删除以后&#xf…

AUTOSAR入门篇

AUTOSAR简介 AUTomotive Open System ARchitecture 汽车开放系统结构 AUTOSAR背景 随着车载控制系统日益先进和复杂化,每辆汽车投入的软件开发工数(时间及人力)2010年将达到2002年的5-10倍。汽车电子系统设计复杂化造成的可靠性隐患导致汽车因安全隐患被“招回”的现象频繁…

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo 洪涝洪水滑坡灾害数据集 数据集描述 该数据集是一个专门用于检测和识别洪涝、洪水和滑坡等自然灾害的数据集&#xff0c;旨在帮助研究人员和开发者训练和评估基于深度学习的目标检测模型。数据集涵盖了两种常见的自然灾害…

Java—SPI 机制详解

参考文章 Java常用机制 - SPI机制详解 | Java 全栈知识体系包含: Java 基础, Java 部分源码, JVM, Spring, Spring Boot, Spring Cloud, 数据库原理, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, 分布式, 中间件, 开发工具, Git, IDE, 源码阅读&a…

力扣之183.从不订购的客户

1. 183.从不订购的客户 1.1 题干 Customers 表&#xff1a; -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | -------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都表示客户的 ID 和名称。 Ord…

有关shell指令练习2

写一个shell脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件&#xff0c;dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …

MATLAB基于传统方法的车道线检测实现

MATLAB基于传统方法的车道线检测实现 本文实现的是基于传统方法的车道线检测&#xff0c;所谓传统方法就是没有涉及到深度学习算法&#xff0c;基于直观的手段和数学知识来实现&#xff0c;后期会实现基于深度学习的车道线检测方法。 实现步骤&#xff1a; Canny边缘检测手动…

html 几行的空间分成3个区域

1.代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>三个区域示例</title> …

SpringBoot+Vue考试系统免费分享

源码说明&#xff1a; 这是一个开源的SpringBoot与Vue开发的在线考试系统。经过站长测试&#xff0c;系统稳定可用&#xff0c;允许重复考试。 环境&#xff1a; 需要安装的环境包括Node.js v14.21.3、JDK8、Maven以及MySQL 5.7。 前端部署教程&#xff1a; 执行 npm inst…

掌控历史:如何通过Git版本管理工具提升你的开发效率

先一览全局: git目录 一.打开git二.git bash的基础命令三.配置git四.仓库搭建五.文件操作和状态六.忽略文件七.gitee的使用1.添加公钥2.创建仓库 八.vs中使用git九.git分支常用命令十.文件差异比较十一.文件回溯和推进十二.合并冲突和消除十三.合并/压缩提交十四.远程仓库推拉十…

新160个crackme - 062-syllogism-crackme1

运行分析 需要破解Name和Serial PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找到成功弹窗字符串&#xff0c;双击进入函数 分析关键函数&#xff0c;还需要分析sub_401368函数 分析sub_401368函数&#xff0c;发现是将Name第一位替换为空格&#…