双向认证配置

news2025/1/10 23:48:18

1.Linux准备环境

  • openssl

使用openssl version查看openssl版本,如果没有安转openssl,可以执行 yum install openssl 安装

  • nginx

我们使用nginx来进行https的双向认证,首先我们需要安装nginx并附带SSL 模块
详细的安装过程可以查看 Linux安装nginx ssl

2.证书扩展名

在开发和测试阶段,使用的是自签的证书。在找自签CA证书操作流程的时候,会有很多的文件扩展名,如pem,der,csr.cer.crt.p12,pfx,jks等,刚开始接触的话很容易混淆,因此先来看下证书的扩展名。

  • DER: .DER = DER扩展用于二进制DER编码证书。这些文件也可能承载CER或CRT扩展。
  • PEM:使⽤Base64 ASCII进⾏编码的纯⽂本格式,是以“ - BEGIN …”前缀的ASCII(Base64)数据。
  • KEY:.KEY 扩展名用于公钥和私钥,常见使用于私钥。也可以被编码为二进制DER或ASCII PEM。
  • CSR:证书签名请求。CSR文件是申请SSL证书时所需要的一个数据文件。
  • CRT:CRT扩展用于证书。 证书可以被编码为二进制DER或ASCII PEM。 CER和CRT扩展几乎是同义词。 最常见的于Unix 或类Unix系统。通俗来讲,.CRT文件常在Linux系统使用,包含公钥和主体信息。
  • CER:.CRT的替代形式,您可以在微软系统环境下将.CRT转换为.CER(.both DER编码的.CER,或base64 [PEM]编码的.cer)。通俗来讲,就是.CER扩展文件是DER编码,并且.CER文件常在Windows系统使用。
  • P12:P12证书全称是PKCS#12。是一种交换数字证书的加密标准,用来描述个人身份信息。p12证书包含了私钥、公钥并且有口令保护,在证书泄露后还有最后一道保障——证书口令,不知道正确的证书口令无法提取秘钥(文件的扩展名能够为pfx或p12)​
  • PFX:PFX也是由PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx做为证书文件后缀名(文件的扩展名能够为pfx或p12)
  • JKS:JKS是JAVA的keytools证书工具支持的证书私钥格式

3.自签CA证书

3.1 生成根证书


         生成根证书私钥

openssl genrsa -out ca.key 2048 

        可以将ca.key转为pem文件

openssl rsa -in ca.key -out ca-key.pem

        再查看一下ca-key.pem文件,内容和ca.key是相同的

        生成根证书

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


        -days设置证书有效时间,这里我们设置100年
        生成证书时要输入一些个体信息,证书生成后,可以查看ca.crt的内容

        也可以将ca.crt转为pem文件

openssl x509 -in ca.crt -out ca-crt.pem

        再查看一下ca-crt.pem文件,内容和ca.crt是相同的

        编码类型转换
        PEM编码转为DER编码 

openssl x509 -in ca-crt.pem -outform der -out ca-crt.der


        DER转为PEM 

openssl x509 -in ca-crt.der -inform der -outform pem -out ca-crt.pem


        (提示:要转换KEY文件也类似)
        der二进制编码的文件不能直接查看,可以使用命令查看.der文件

openssl x509 -in ca-crt.der -inform der -text -noout

3.2 生成服务端证书

        为了便于理解和操作,这里统一使用pem编码,并统一生成pem格式扩展文件

        生成服务端私钥
        生成pem扩展名的私钥

         2048表示生成的私钥为2048位,一般使用2048位相对比较安全

openssl genrsa -out server-key.pem 2048

        将.pem扩展名私钥转为.key

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

        再查看server.key 和server.pem 私钥内容是相同的

        生成服务端证书签名请求文件
        注意这⾥的common name必须是需要访问的域名,其他的内容可以和根证书填写的⼀样

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

        可以将server-csr.pem转为.csr扩展名,或直接修改扩展名 .pem为.csr

openssl req -in server-csr.pem -out server.csr 

        根据签发请求⽣成服务端证书

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

        可以将server-crt.pem转为.crt扩展名

openssl x509 -outform pem -in server-crt.pem -out server.crt

        生成服务端pfx或p12证书

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

注:在将.pem扩展文件转为key,csr,crt文件的时候,先查看文件内容
包含 -----BEGIN RSA PRIVETE KEY ----- 的内容可以导出转换.key扩展名的文件
包含 -----BEGIN CERTIFICATE REQUEST ----- 的内容可以导出转换.csr扩展名的文件
包含 -----BEGIN CERTIFICATE ----- 的内容可以导出转换.crt扩展名的文件

3.3 生成客户端证书

        客户端证书⽣成步骤和服务端基本⼀样,需要注意的就是在⽣成签发请求的时候填写的信息中,comm name也要是访问的域名。

        生成客户端私钥

openssl genrsa -out client.key 2048

        生成客户端证书签名请求文件

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

        根据签发请求和⽣成客户端证书

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

        生成客户端pfx或p12证书

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

3.4 生成证书链

       证书链,一般是服务端证书在上,中间签发证书或者根证书在下

cp server.crt server-two.crt

cat ca.crt >> server-two.crt

4.开启https,并校验客户端(双向认证)

4.1配置nginx,开启https

  • 开启https请求

进入nginx目录,编辑nginx.conf 
找到HTTPS server
ssl_certificate 服务端crt证书路径
ssl_certificatie_key 服务端私钥路径


配置完以后 启动或者容器一下nginx
在浏览器访问是成功的,因为我们是自签证书,因此显示不安全

4.2开启客户端认证

继续编辑nginx.conf
ssl_client_certificate 指定客户端认证时使⽤的根证书路径,⽤来验证客户端证书的正确性,我们使用的自签ca证书签发的客户端证书,因此使用ca.crt
ssl_verify_client on 为开启客户端校验


配置完成后重启
为了方便测试。我们直接使用curl 命令进行测试

curl https://ip -k -v


ip为访问的具体ip地址
-k编码忽略服务端证书的校验,因为我们这里服务端证书也是自签的,所以要加上-k
不加-k,会有异常提示

-v为显示具体的信息,也可以不加
使用上述命令访问后出现400报错

提示需要携带客户端的证书,说明我们配置的客户端认证已经生效了

curl --cert client.crt --key client.key https://ip -k


可以看到携带证书后访问是成功的,说明客户端已经认证成功了,因此https双向认证完成了

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

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

相关文章

Arrays的用法(常见方法的使用)

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 常见算法的API(Arrays&#xff…

Cookie和Session的作用

最近学习Session和Cookie的总结,我发现好多做测试的朋友对这个的理解不是那么透彻;如果理解了Cookie和session的原理和使用,在我们的测试工作中,有很大的帮助;尤其是在接口测试,性能测试中。。。 目录 一、…

报错注入

1.原理 2.注入手法

tomcat线程模型

NioEndpoint组件 Tomcat的NioEndpoint实现了I/O多路复用模型。 工作流程 Java的多路复用器的使用: 创建一个Selector,在其上注册感兴趣的事件,然后调用select方法,等待感兴趣的事情发生感兴趣的事情发生了,比如可读…

java Spring Boot日志输出格式配置方法

前面 我们文章中 我们已经能把日志控制住了 但前面这些信息 又是什么呢? 如果不了解日志 看起来是挺痛苦的 其实 我们可以将日志分为 一下几个部分去读它 首先是这个日志的输出时间 是在什么时候发生的 然后是 日志的基本 之前我们也讲过 有信息 报错 警告等 然后…

适用于初学者,毕业设计的5个c语言项目,代码已开源

C语言项目集 项目介绍 该项目适用于初学者学习c语言,也适用于高校学生课程设计,毕业设计参考。 项目并不能满足所有人的需求,可进行项目指导,定制开发。 开源地址 c语言项目代码地址 项目列表 该项目包含如下5个管理系统&am…

ESP8266使用记录(三)

通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…

【视频处理】通过调用图像来重建新影片及计算颜色通道的平均灰度值,并检测帧与前一帧之间的差异(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

网易云信4K 8K RTC助力远程医疗的技术实践

// 编者按:随着近年来国家关于缓解医疗资源分配不均的一系列政策出台,远程医疗作为平衡医疗资源分配的有力手段,目前正处于强劲发展阶段。网易云信运用超高清RTC视频技术助力医疗行业实现了远程高清视频病理分析和手术示教等能力。LiveVide…

Beyond Compare 4对比工具注册

Beyond Compare是一款文件及文件夹(目录)的对比工具。 Beyond Compare不仅可以快速比较出两个目录的不同,还可以比较每个文件的内容,而且可以任意显示比较结果。 Beyond Compare程序内建了文件浏览器,方便您对文件、…

NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061

今天发现,有两个处理器,启动以后,数据流不过去,后来,锁定问题在,queue队列上面,因为别的队列都可以通过,右键,empty queue清空,就是 这个队列不行,这个队列无法被删除,至于为什么导致这样的, 猜测是因为之前,流程设计好以后,队列没有设置背压,也没有设置队列中的内容大小和fl…

基于人脸5个关键点的人脸对齐(人脸纠正)

摘要:人脸检测模型输出人脸目标框坐标和5个人脸关键点,在进行人脸比对前,需要对检测得到的人脸框进行对齐(纠正),本文将通过5个人脸关键点信息对人脸就行对齐(纠正)。 一、输入图像…

nginx实现反向代理实例

1 前言 1.1 演示内容 在服务器上访问nginx端口然后跳转到tomcat服务器 1.2 前提条件 前提条件:利用docker安装好nginx、tomcat、jdk8(tomcat运行需要jdk环境) 只演示docker安装tomcat: 默认拉取最新版tomcat docker pull t…

学习 OpenStack 的新指南和教程的六个建议

云基础设施是一个非常需要的技能。如果你正在为你的云基础架构需求寻找开源解决方案,那么 OpenStack 就是其中之一。OpenStack 是一个巨大的项目集合,为云服务的几乎每一个部分都提供了解决方案和集成。虽然这个巨大范围使得它成为一个强大的工具&#x…

若依前后端分离版搭建记录

一、如果是mysql8,得修改一下参数allowPublicKeyRetrieval为true,不然会报Public Key Retrieval is not allowed错误: 二、导入第二张表的数据库的时候,需要增加“--default-character-setutf8”参数才不会报错:

爱心助力口腔健康——三金西瓜霜全国“爱牙公益行”活动启动

在第35个“全国爱牙日”来临之际,三金西瓜霜牙膏联合中国善网公益平台共同发起的第四届三金西瓜霜“爱牙公益行”活动于近日启动。 今年“爱牙日”主题是“口腔健康 全身健康”,副主题是“关爱老年口腔乐享健康生活”。口腔健康是人体健康的重要组成部分…

两种常见矩形框旋转方法推导及其C++实现

在已知矩形中心点、长宽和旋转角度(定义为矩形最长边与X轴正方向的夹角),如何确定矩形四个顶点的坐标,通常有以下两种处理方法。 法一:直接对顶点进行旋转 比如下图虚线框矩形是实线框矩形绕矩形中心点旋转后得到。在…

贴片电容耐压值选取和特性(包含实际电路和PCB)

一、一般电容的特性 ①容值大的电容,一般通低频率;  ②容值小的电容,一般通高频率。   注:详细请看这位博主的篇文章: 大电容为什么虑低频小电容为什么又虑高频?(个人整理) 二、贴片电容的耐压选取 ①贴片电容有2…

“构建完善的用户认证与数据交互系统“

目录 引言1.ElementUI完成登录注册1. 登录页面设计与实现2. 注册页面设计与实现 2.axios之get请求3.axios之post请求4.跨域问题的解决方案5.总结 引言 在现代Web应用程序开发中,用户认证和数据交互是至关重要的功能。本文将介绍如何使用ElementUI、axios和解决跨域…