JAVAEE—HTTPS和ssl证书

0@[toc]

什么是HTTPS

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况而HTTPS则是新采用加密的方式进行传输

为什么需要HTTPS

为什么要使用HTTPS呢?这其实当然是因为我们在实际生活中由于我们的HTTP用的是明文传输这就导致我们自己的数据很容易泄露这就导致这些数据会被别有用心之人拿到做坏事比如说,移动,联通,电信这三大运营商。

在使用HTTPS之前有哪些不好的现象

在没有使用HTTPS之前,那时候运营商劫持事件非常的猖獗,比如说我们要下载一个软件,下载之后发现这并不是我们要下载的那一款软件,这就非常恶心了,因此为了防止这种现象发生,各大公司就开始自发的使用HTTPS进行传输数据了。

HTTPS安全性是如何做到的

他是使用加密的手段进行的,那么如何进行加密的呢这里就涉及到到了密钥的这个概念。那么什么是密钥呢?我们看看下图
在这里插入图片描述
在这里插入图片描述
下图中慈溪太后拿到了一封信,这封信上的内容大部分都是无关紧要的,只有另一张纸上的洞进行对比才能得到真正的内容,而这张破洞的纸其实就是密钥,而密钥又分为对称密钥和非对称密钥

什么是对称密钥

首先什么是对称密钥呢?我们还是以上面为列,慈溪太后在拿到这张内容的时候要用破洞的纸对信的内容做解密,那么传给他这封信的那个人,在写下这个内容的时候是不是也需要用这张破洞的纸把自己想要写的内容写在这个洞对应的位置下啊?那么是不是说这张纸即做了加密的工作也做了解密的工作,那么这张纸就是一个对称密钥,也就是说对于密钥来说,一个密钥同时做加密和解密那么这个密钥就是对称密钥。

什么是非对称密钥

那么什么是非对称密钥呢?非对称密钥以上面为列,也就是慈溪手上有两张纸一张纸用来加密一张纸用来解密,这里我们要注意,其实在现实生活中我们认为的钥匙和锁就是锁用来加密钥匙用来解密,但是在计算机中,这个密钥是既能用来加密也能用来解密。而非对称密钥则以加密和解密分为了公钥和私钥

公钥和私钥

什么是公钥呢?公钥就是用来让别人将自己的密文进行加密,加密之后发送而来然后自己解密用的密钥叫做私钥其实这里的公钥私钥的区别就是公钥加密私钥解密。

HTTPS如何保证的安全性

HTTPS中可能存在的危险情况

首先我们要先知道对称密钥加密和非对称密钥,以及对称非对称共同使用这几种状况中可能出现的漏洞。我们来逐一分析

对称密钥加密

在这里插入图片描述
此时我们如果直接使用对称进行加密的话那么我们的对称密钥也会被黑客接收到,这就 导致我们的消息在黑客眼里也是没有任何隐私可言的。

非对称加密

在这里插入图片描述
那么此时我们如果全部使用非对称加密是否可以呢?非对称加密他的效率是非常的低效的,而且不仅效率低,安全性其实也并不是很高。不信?我们来看看吧
在这里插入图片描述
因此这种方法不仅效率低下而且还不安全我们在实际开发中使用的是哪种方式呢?

非对称密钥与对称密钥互相配合的加密通信方式

在这里插入图片描述
此时用这种方式我们发现虽然我们的效率得到了一定的提升可是这也迎来了一种问题那就是如果黑客还是采取上面的那种方法的话我们的安全性问题还是没有得到保证啊那该怎么办呢?我们来看看最终 的解决办法

最终的解决办法

首先我们要知道为什么上面的方法不行?很明显是因为我门没有能力去分辨路由器给我们的公钥究竟是目标服务器发来的还是我们黑客发来的,那么这时候假如说能找到一个公证人就可以解决了,这时候也就引入了安全证书。

什么是安全证书

什么是安全证书呢?安全证书其实就是我们发送自己的公钥的时候这里面会有一个字段保留了一个字符串这个字符串表明自己是安全的,这个证书我们称之为ssl证书SSL证书是一种数字证书,由权威的证书颁发机构颁发。它包含了一个公钥和有关证书所有者的一些信息,如名称、组织、邮箱等。SSL证书的主要作用是实现数据加密和身份验证,确保数据在传输过程中的安全性和完整性。数据加密:SSL证书通过使用加密算法对数据进行加密,确保数据在传输过程中的安全性和完整性。即使数据在传输过程中被截获,攻击者也无法轻易地解密和篡改数据。
身份验证:SSL证书还包含了对网站所有者的身份验证。当用户访问一个使用SSL证书的网站时,浏览器会验证该证书是否由权威的证书颁发机构颁发,并验证网站所有者的身份信息。这可以防止中间人攻击和钓鱼网站等安全威胁。
防止数据篡改:通过使用SSL证书,HTTPS协议能够检测数据在传输过程中是否被篡改。如果数据被篡改,SSL证书将无法验证通过,从而保证了数据的完整性和可信度。
因此当一个正规的网站服务器给我们发送他的公钥的时候我们是可以通过检验对方的安全证书判断其是否安全。
但是这时候我们可能会有一个想法那就是,假如说黑客能够申请到安全证书并且将密钥上携带的安全证书更改为自己机构的安全证书呢?这里就涉及到了安全证书的检验

安全证书的检验

当我们收到了安全证书之后我们是要判断这个安全证书是否被修改的,那么如何判断呢?验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的。.

检验细节

这里我们上面说的可能会感觉有些抽象,假设我们的证书只是一个简单的字符串 zyfcl, 对这个字符串计算hash值(比如md5), 结果为BC4B2A76B9719D91
如果 hello 中有任意的字符被篡改了, 比如变成了 zyfcll, 那么计算的 md5 值就会变化很大. BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello 和 哈希值 BC4B2A76B9719D91 从服务器返回给客户端, 此时客户端如何验证 hello 是否是被篡改过? 那么就只要计算 hello 的哈希值, 看看是不是 BC4B2A76B9719D91 即可.并且这里面这个hello的哈希值也是加密传输的,他是服务器使用私钥加密我门的主机里面会存储这个证书机构的公钥然后我们用公钥解密就可以了。

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

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

相关文章

win c++使用lua环境配置 5.3.5版本

编译lua 下载lua源码,github仓库 使用vs编译源码,新建一个静态库项目(只会生成lib文件),想要dll的话就新建dll项目(有一个lib文件和dll文件) 把lua源码下面的文件夹都是,复制到vs项目中 lib目录是我手动…

4.25java项目小结

完成了头像的显示,能将头像设置圆形,从数据库传输头像,客户端接收并在界面上展示,并能从文件选择图片 、

Golang | Leetcode Golang题解之第49题字母异位词分组

题目: 题解: func groupAnagrams(strs []string) [][]string {mp : map[[26]int][]string{}for _, str : range strs {cnt : [26]int{}for _, b : range str {cnt[b-a]}mp[cnt] append(mp[cnt], str)}ans : make([][]string, 0, len(mp))for _, v : ra…

金融级国产化替代中间件有哪些?

过去,国内中间件市场一直由IBM、Oracle等国际大型企业所主导,这在一定程度上限制了对国内企业多样化和个性化需求的满足,尤其是在实现底层硬件与上层应用软件之间高效、精准匹配方面。面对日益复杂的国际局势,金融安全已成为国家整…

负载均衡集群——LVS

目录 1.LVS简介 2.LVS体系结构 3.LVS相关术语 4. LVS工作模式 5. LVS调度算法 6.LVS集群介绍 6.1 LVS-DR模式 6.2 LVS – NAT 模式 6.3 LVS – TUN 模式 7.LVS 集群构建 7.1 LVS/NAT 模式配置 实验操作步骤 步骤 1 Nginx1 和 Nginx2 配置 步骤 2 安装和配置 LVS …

【AIGC调研系列】Bunny-Llama-3-8B-V与其他多模态大模型相比的优劣

Bunny-Llama-3-8B-V作为基于Llama-3的多模态大模型,其优势主要体现在以下几个方面: 性能超越其他模型:根据我搜索到的资料,Bunny-Llama-3-8B-V在多个主流Benchmark上表现良好,超越了LLaVA-7B、LLaVA-13B、Mini-Gemini…

Navicat连接SQLSever报错:[08001] MicrosoftTCP Provider 远程主机强迫关闭了一个现有的连接

Navicat连接SQLSever报错:[08001] [Microsoft][SQL Server Native Client 10.0]TCP Provider: 远程主机强迫关闭了一个现有的连接 问题分析 旧版的MSSQL 如果不是最新版的,可以去这安装以下即可。 最新版的MSSQL 如果是安装最新版的MSSQL连接不上很正…

2024高级卫生职称考试报名时间汇总

20地报名时间汇总,其他时间安排见图 上海:4.23-5.24 黑龙江:4.23-5.24 陕西:4.23-5.24 重庆:4.23-5.24 浙江:4.23-5.24 20地报名时间汇总 甘肃:4.23-5.24 江西:4.28-5.10 河北&#…

【黑马点评Redis——004达人探店】

1.发布探店笔记 2.点赞 利用Redis中的Set集合来判断是否点赞过。 3.点赞排行榜 可以通过SortedSet来按点赞时间进行排序。 4.好友关注 4.1.关注和取关 4.2.共同关注 可以通过set实现交集的功能 4.3.关注推送 4.3.1 拉模式 拉模式(Pull)&#x…

linux 上 jps 列出一堆 jar,如何快速定位 jar 文件启动位置?

例如,在 /data下有一个 xxx.jar ,如果是通过 "java -jar /data/xxx.jar" 方式启动,则 jps会列出的名字中带 xxx.jar,这时再 "ps -ef | grep xxx.jar" 就会列出 更详细的信息,例如 "java -ja…

【VScode】VScode+如何从git上面拉取代码?

目录标题 1、打开VSCode。File>New Window。2、打开集成终端(Terminal > New Terminal 或使用快捷键Ctrl \)。3、在终端中,使用Git命令克隆仓库。4、打开项目。 1、打开VSCode。File>New Window。 2、打开集成终端(Terminal > …

Mongodb语法使用说明(含详细示例)

点击下载《Mongodb语法使用说明(含详细示例)》 1. 前言 MongoDB是一款高性能、开源、面向文档的NoSQL数据库,它使用类似JSON的BSON格式存储数据,提供了灵活的数据模型和强大的查询功能。本文将详细介绍MongoDB数据库的基本增删改…

vue快速入门(四十四)自定义组件

注释很详细,直接上代码 上一篇 新增内容 全局注册自定义组件并应用局部注册自定义组件并应用 此篇使用了axios模块没有安装导入的先看这一篇 axios模块下载与导入 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios impor…

HTTP与HTTPS 对比,区别详解(2024-04-25)

一、简介 HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。 HTTPS&#xf…

【自然语言处理】InstructGPT、GPT-4 概述

InstructGPT官方论文地址:https://arxiv.org/pdf/2203.02155.pdf GPT-4 Technical Report:https://arxiv.org/pdf/2303.08774.pdf GPT-4:GPT-4 目录 1 InstructGPT 2 GPT-4 1 InstructGPT 在了解ChatGPT之前,我们先看看Instr…

OpenHarmony开源软件供应链安全风险

慕冬亮,华中科技大学网络空间安全学院副教授,武汉英才,华中科技大学OpenHarmony技术俱乐部、开放原子开源社团指导教师。研究方向为软件与系统安全,在国际安全会议上发表十余篇论文,并获得ACM CCS 2018杰出论文奖。创立…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读:在产品创新过程中,市场调研的重要性不言而喻。它不仅是产品创新的起点,也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述:市场调研重要性 1、相关概…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积,替换YoloV8的常规卷积,轻量高效,即插即用!改进方法非常简单。 DO-Conv(Depthwise Over-parameterized Convolutional Layer)是一种深度过参数化的卷积层,用于提高卷积神经网络(CNN)的性能。它的核心思想是在训练阶段使用额外的深度卷积来增…

【C++题解】1037. 恐龙园买门票

问题:1037. 恐龙园买门票 类型:分支 题目描述: 恐龙园买门票,身高低于 1.3 米购儿童票( 60元 ),否则成人票 120 元。 试编写一个程序,输入身高,输出相应的门票价格。 输入: 一行…

OpenCV鼠标绘制线段

鼠标绘制线段 // 鼠标回调函数 void draw_circle(int event, int x, int y, int flags, void* param) {cv::Mat* img (cv::Mat*)param;if (event cv::EVENT_LBUTTONDBLCLK){cv::circle(*img, cv::Point(x, y), 100, cv::Scalar(0, 0, 255), -1);} }// 鼠标回调函数 void dra…