ssl单向证书和双向证书校验测试及搭建流程

零、前提准备

首先了解下HTTP和HTTPS的区别:

HTTPS与HTTP有什么不同?

HTTP是过去很长一段时间我们经常用到的一种传输协议。HTTP协议传输的数据都是未加密的,这就意味着用户填写的密码、账号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,从而被黑客加以利用,因此使用HTTP协议传输隐私信息非常不安全。
HTTPS是一种基于SSL协议的网站加密传输协议,网站安装SSL证书后,使用HTTPS加密协议访问,可激活客户端浏览器到网站服务器之间的SSL加密通道(SSL协议),实现高强度双向加密传输,防止传输数据被泄露或篡改。简单讲,HTTPS=HTTP+SSL,即HTTPS是HTTP的安全版

本次测试相关说明:
50.50.1.118作为服务端,系统是 linux,openssl版本是:OpenSSL 1.1.1f 31 Mar 2020。
50.50.1.116是客户端,系统是Windows10-64 bit。

1、CA机构之根证书的生成

# 生成CA私钥
openssl genrsa -out CA.key 2048
# 生成CA证书签名请求
openssl req -new -key CA.key -out CA.csr
# 生成CA的自签名证书, 即根证书
openssl x509 -req -in CA.csr -extensions v3_ca -signkey CA.key -out CA.crt

2、服务端准备

# 生成私钥key
openssl genrsa -des3 -out server.key
# 生成证书签名请求
openssl req -new -key server.key -out server.csr
# 向CA申请证书,生成带有CA签名的证书
openssl x509 -days 365 -req -in server.csr -extensions v3_req -CAkey ../CA/CA.key -CA ../CA/CA.crt -CAcreateserial -out server.crt

3、 客户端准备

openssl genrsa -des3 -out client.key
openssl req -new -key client.key -out client.csr
openssl x509 -days 365 -req -in client.csr -extensions v3_req -CAkey ../CA/CA.key -CA ../CA/CA.crt -CAcreateserial -out client.crt
# 客户端证书转为p12格式(p12格式才能导入浏览器);
# 后续双向认证时,客户端发起请求时,要携带自己的证书到服务器;
# 怎么携带?将p12格式的证书导入浏览器即可;
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12


4、生成的证书

在这里插入图片描述

一、单向证书校验

更多关于单向认证/双向认证的理论性知识,请猛戳:SSL单向认证和双向认证分析。

关于nginx的配置,可以大概参考下阿里的这篇文章:
阿里-在Nginx或Tengine服务器安装SSL证书

验证步骤:

1、修改nginx配置文件,将服务端证书和服务私钥进行指定,并重启nginx;
2、客户端将根证书添加到受信任的颁发机构中(可有可无);
3、打开浏览器,访问 https://50.50.1.118,可以看到服务器响应的结果(nginx欢迎页面);
4、可以通过wireshark进行抓包分析。


修改nginx.conf配置文件

在这里插入图片描述


将根证书添加到受信任的机构中

在这里插入图片描述



直接双击CA.crt进行安装即可。

请添加图片描述

在这里插入图片描述


开始抓包

请添加图片描述

在这里插入图片描述


抓包分析

可见,整个握手过程当中,只有服务器将自己的证书响应给客户端;
不存在客户端将自己的证书响应给服务器的情况;
此即为单向认证。下面再给出一个示例图。

在这里插入图片描述

二、双向证书校验

对于一般的https网站来说,实际上https所使用的证书是属于单向验证,即客户端单向验证服务器的安全性,而服务器端是没有对客户端的身份进行验证的。如果自己部署了一些安全性较高的网站不希望被其他人随意访问,就可以尝试部署https的双向认证,对客户端也添加证书认证。

1、修改nginx配置文件,添加对客户端的证书校验,并重启nginx;

在这里插入图片描述

2、打开谷歌浏览器,导入客户端证书;

请添加图片描述

ps:也可以直接在Windows证书管理器中添加添加,如下所示:

请添加图片描述

3、抓包验证

最后重启浏览器(一定要重启, 如果打开多个同类型浏览器,则需全部关闭后再重启),输入 https://50.50.1.118进行访问, 会弹出证书选择框。。。

请添加图片描述
在这里插入图片描述

可以看到,服务端和客户端分别给对方响应了各自的证书,此即为双向认证。


4、另一种验证方法 (使用curl作为客户端调用验证)
上述我们通过浏览器中导入客户端的p12证书来完成双向验证,,
实际我们也可以直接利用curl命令来完成验证。。无需做上述中的p12证书的导入。。
我们的客户端windows,首先安装crul工具。
Windows下载curl

直接解压即可,解压后,将bin添加至系统环境变量中。。。

# --cert指定客户端公钥证书的路径
# --key指定客户端私钥文件的路径
# -k不校验证书的合法性,因为我们用的是自签名证书,所以需要加这个参数,否则无法建立连接
# 可以使用-v来观察具体的SSL握手过程

curl -k --cert .\client.crt --key .\client.key https://50.50.1.118 -v

在这里插入图片描述

在这里插入图片描述

更多关于curl命令的使用,请参考以下文章:
(1)https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
(2)https://blog.csdn.net/angle_chen123/article/details/120675472

三、参考文章

1、https://zhuanlan.zhihu.com/p/377622199
2、http://www.meilongkui.com/archives/1670
3、https://www.cnblogs.com/simono/p/16629480.html
4、https://blog.csdn.net/qq_37997682/article/details/125472654

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)

初衷 💢初衷💢 因为一遍遍修改并重启项目觉得很麻烦,所以刚开始就自己给项目配置了热加载,但奈何代码更新还是慢,还不如我重启一遍项目的速度,所以放弃了自己上网找到的热加载配置。直到我debugger前端代码…

ELFK——ELK结合filebeat日志分析系统(2)

目录 一、filebeat 二、ELFK 1.原理简介 2.在ELK基础上部署filebeat 一、filebeat Filebeat,轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并…

个人中心 - 实现修改用户头像、用户名或密码

目录 1. 修改用户头像 1.1 获取原来的用户头像和用户名 1.2 实现保存头像 2. 修改用户名或密码 1. 修改用户头像 本文是针对之前的一篇项目博客 - 博客系统 做的一个扩展功能. 1.1 获取原来的用户头像和用户名 想要修改头像, 那么就得先获取数据库中原来的头像, 此处顺便…

Redis的安装

Redis的安装 1、Windows下的安装 1.1 下载 下载地址: https://github.com/MicrosoftArchive/redis/releases https://github.com/tporadowski/redis/releases Redis支持 32 位和 64 位,这个需要根据你系统平台的实际情况选择,这里我们下…

Prometheus实现系统监控报警邮件

Prometheus实现系统监控报警邮件 简介 Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上, 然后发送报警信息到AlertManger,然后我们的AlertManager就来管理这些报警信息,聚合报警信息过后通过email、PagerDu…

Java并发编程之顺序一致性

如果程序是正确同步的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 同步,即排队。 同一时刻,只能有一个线程和内存交互!&a…

21.Netty源码之编码器

highlight: arduino-light Netty如何实现自定义通信协议 在学习完如何设计协议之后,我们又该如何在 Netty 中实现自定义的通信协议呢?其实 Netty 作为一个非常优秀的网络通信框架,已经为我们提供了非常丰富的编解码抽象基类,帮助我…

【Mybatis】XML映射文件

目录 11.3XML映射文件 1.select 2.insert、update、delete 3.Sql 4.parameters(参数) 5.resultMap 6.resultMap 使用示例 (1)在先前创建的数据库stu中创建表student 2,并插入若干条数据,代码如下: (2)创建工程mybatis_ResultMap_demo。 (…

【Lua学习笔记】Lua进阶——垃圾回收

按照唐老师的课程本来要讲自带库的,但是想想这东西能看文档,ctrl左键还能看注解,并且最重要的许多自带库的方法基本大部分语言都有,其实看看就能懂了。所以还是重点讲讲垃圾回收 文章目录 GC辅助垃圾回收collectgarbage增量模式分…

【雕爷学编程】MicroPython动手做(32)——物联网之MQTT

MQTT (Message Queuing Telemetry Transport)消息队列遥测传输协议,是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。M…

2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测

1. 引言 1.1 激光笔在黑色区域目标检测的背景介绍 在许多应用领域,如机器人导航、智能家居和自动驾驶等,目标检测技术的需求日益增加。本博客将聚焦于使用K210芯片实现激光笔在黑色区域的目标检测。 激光笔在黑色区域目标检测是一个有趣且具有挑战性的…

cpolar内网穿透外网远程访问本地网站

cpolar内网穿透外网远程访问本地网站 文章目录 cpolar内网穿透外网远程访问本地网站 在现代人的生活中,电脑是离不开的重要设备,大家看到用到的各种物品都离不开电脑的支持。尽管移动电子设备发展十分迅速,由于其自身存在的短板,使…

css, resize 拖拉宽度

效果如下&#xff1a; 可直接复制预览查看属性值: 关键样式属性&#xff1a; resize: horizontal; overflow-x: auto; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…

Qt应用开发(基础篇)——数值微调输入框QAbstractSpinBox、QSpinBox、QDoubleSpinBox

目录 一、前言 二、QAbstractSpinBox类 1、accelerated 2、acceptableInput 3、alignment 4、buttonSymbols 5、correctionMode 6、frame 7、keyboardTracking 8、readOnly 9、showGroupSeparator 10、specialValueText 11、text 12、wrapping 13、信号 二、Q…

pytorch实战-图像分类(一)(数据预处理)

目录 1.导入各种库 2.数据预处理 2.1数据读取 2.2图像增强 3.构建数据网络 3.1网络构建 3.2读取标签对应的名字 4.展示数据 4.1数据转换 4.2画图 5.模型训练 1.导入各种库 上代码&#xff1a; import os import matplotlib.pyplot as plt %matplotlib inline import nu…

一台电脑给另外一台电脑共享网络

这里写自定义目录标题 有网的电脑上操作一根网线连接两台电脑没网的电脑上 有网的电脑上操作 右键->属性->共享 如同选择以太网&#xff0c;勾选。确认。 一根网线连接两台电脑 没网的电脑上 没网的电脑为mips&麒麟V10 新增个网络配置ww&#xff0c;设置如下。 …

2.05 购物车后台刷新并显示

一.用户登录添加商品使用cookie存入购物车&#xff0c;并把购物车商品传入到后台 步骤1&#xff1a;创建购物车BO对象 public class ShopcartBO {private String itemId;private String itemImgUrl;private String itemName;private String specId;private String specName;p…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转&#xff0c; 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用&#xff0c;使用递归互斥信号量&#xff0c;但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间&#xff0c;data_in将保持不变&#xff0c;data_en为高至少保持3个B时钟周期。表明&#xff0c;当data_en为高时&#xff0c;可将数据进行同步。本题中data_in端数据变化频率很低&#xff0c;相邻两个数据间的变化&…

【计算机视觉|人脸建模】SOFA:基于风格、由单一示例的2D关键点驱动的3D面部动画

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks 链接&#xff1a;SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks | Proceedings of …