通俗易懂讲解,彻底弄懂 https 原理本质https 的过程
Posted 艾阳Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通俗易懂讲解,彻底弄懂 https 原理本质https 的过程相关的知识,希望对你有一定的参考价值。
一、数字证书的验证
小花👧收到了小明👦的数字证书,首先要验证此数字证书是不是CA颁发的。
因为我们电脑、手机的操作系统里面,都会内置CA机构的数字证书。
所以,小花👧就可以对数字证书进行验证。
知识回顾
摘要:单向加密算法,比如md5对证书整个内容加密的结果就叫摘要,也叫做证书的指纹;
签名:小明用私钥🔑对摘要进行加密出来签字串,就叫做签名。
验签:用公钥对签名进行解密出来的摘要和原来的对比,就叫做验签。
数字证书的验证流程,如下:
- 小花👧用内置的CA的数字证书,得到CA的公钥。
- 小明👦的数字证书 M 。小花用小明的公钥对证书M里面的签名进行解密,得到摘要D1。
- 小花👧根据证书M的摘要算法md5对证书整个内容计算得到摘要D2。
- 小花👧对比摘要D2和D1 是否相等。是则说明此证书就是CA颁发的;否则说明此证书不是CA颁发的,是有风险的,不安全的。
证书验证通过后,就说明此证书是CA颁发的。那么,小花就可以从数字证书中拿到小明的公钥了。因为小明在申请数字证书时,数字证书中所有者是小明,CA是会验证小明的身份的,所以数字证书中小明的公钥是真实的。
至此,小明终于把公钥安全的传输给了小花了。
这件事的成立 ,接下来我们的工作就好做多了,接下来,我们看一下具体的传输过程。
二、 完整的传输过程
通过前面所有的关卡后,我们最后梳理一下完整的传输过程。
- 小明把写完的信,附加上摘要算法MD5, 以及通过MD5算出来的摘要;
- 小明用私钥,对摘要进行加密得到签名;
- 小明把摘要算法、摘要、签名都附加到信件上,连同数字证书一起发送给小花;
- 小花收到信后,首先用CA数字证书拿到CA公钥对小明的数字证书进行验证;
- 小花发现验证通过后,会从证书中拿到了小明的公钥;
- 小花有了小明的公钥,接下来就对信件内容进行验证;
- 小花用小明的公钥对信件的签名解密,得到信件摘要D1;
- 小花用摘要算法对信件运算,得到信件摘要D2;
- 小花对比 D1 是否等于D2;
- 如果不相等,说明信件被人篡改过,不安全;
- 如果相等,说明,信件内容没有被篡改过;
- 相等的情况,小花就拿到了信件的内容。
以上所有的内容,是数字证书,加密解密,签名,验签的过程,还没有正式讲 https
的过程呢。
三、https
的过程
我们先看一张图。
我们以访问 www.helloworld.net 网站为例,讲解https的过程。
(1)网站申请证书阶段
- 网站向CA机构申请数字证书(需要提交一些材料,比如域名);
- CA向证书中写入摘要算法,域名,网站的公钥等重要信息;
- CA根据证书中写入的摘要算法,计算出证书的摘要;
- CA用自己的私钥对摘要进行加密,计算出签名;
- CA生成一张数字证书,颁发给了 www.helloworld.net;
- 网站的管理员,把证书放在自己的服务器上;
(2)浏览器验证证书阶段;
- 浏览器在地址栏中输入https://www.helloworld.net,并回车
- 服务器将数字证书发送给浏览器;
- 浏览器用操作系统内置的CA的数字证书,拿到CA的公钥;
- 浏览器用CA公钥对 www.helloworld.net 的数字证书进行验签;
- 具体就是,浏览器用CA公钥,对helloworld的数字证书中的签名进行解密,得到摘要D1;
- 浏览器根据helloworld数字证书中的摘要算法,计算出证书的摘要D2;
- 对比 D1和D2 是否相等。;
- 如果不相等,说明证书被掉包了;
- 如果相等,说明证书验证通过了;
(3)协商对称加密密钥阶段
- 浏览器验证数字证书通过以后;
- 浏览器拿到数字证书中的公钥,也就是 www.helloworld.net 网站的公钥;
- 浏览器就用网站的公钥对密钥S进行加密,加密以后的密文发送给服务器;
- 服务器收到密文后,用自己的私钥进行解密,得到密钥S;
- 此后浏览器,服务器双方就用密钥S进行对称加密的通信了;
至此,https过程结束。
过程那么多,抓住几个关键的问题去理解会更简单。其实本质上还是两个人如何安全高效的进行通信。
四、总结
最后,我们简单的总结一下。
question:小明和小花安全的通信,怎么做?
答:通过加密
question:通过哪种加密方式通信,更高效?
答:对称加密。因为,单向加密,没办法解密,不行。非对称加密,太慢,也不行。只有对称加密,速度快。
question:采用对称加密,密钥S 怎么安全传输?
答:小花使用小明的公钥,对密钥S进行加密,传给小明。小明用自己的私钥解密。
question:小明如何安全的把自己的公钥传输给小花?
答:使用数字证书。具体就是小明向CA申请一个自己的数字证书,把自己的公钥放在证书中,小明再将数字证书发送给小花。
question:小花如何验证数字证书的真实性?
答:小花用操作系统内置的CA的数字证书,拿到CA的公钥,用CA的公钥,对数字证书进行验签
验签通过,说明数字证书是真的。
系统文章,就写完了。解决的问题是双方通信如何采用安全高效的方式进行。
欢迎点赞关注。
最通俗易懂的短链接原理讲解
点击关注公众号,实用技术文章及时了解
来源:blog.csdn.net/codejas/article/details/106102452
看业务代码的时候,有些逻辑用到了短链接服务,感觉还蛮有意思的,这里简单的记录一下。
这种营销短信大家应该都收到过,短信有最大字符限制,而且为了更好的观感体验,短信里的链接一般都很短。现成的短链接生成服务也比较多,比如新浪、百度等,谷歌之前也有短链接服务,号称是最快的,但是在 2018 年关闭了。
一、短链接原理
我们点击短链接会发起一个 GET 方式的 HTTP 请求,当请求到对应的 API 后,会解析短链接里的标识获取到对应的长链接,然后重定向到长链接,这样整个流程就结束了。
比如我用新浪的短链接服务为 https://www.google.com/
生成了一个短链接:http://dwz.date/evn
,下面是请求短链接时对应的 HTTP 信息:
二、短链接生成算法
短链接标识一般是 [0-9, a-z, A-Z] 随机组合而成的字符串,字符一共有 62 个,因此短链接标识可以用 62 进制的字符串表示。
首先维护一个自增的 ID,当生成短链接时,将 10 进制的自增 ID 转换成 62 进制字符串,这个字符串就可以唯一标识一个长链接。由于 ID 是自增的,对应的 62 进制字符串是不同的,这样就不会出现一个短链接对应多个长链接的问题,62 个字符排列组合,可以保证短链接是用不完的,就算仅限于 6 位长度标识的短链接,也有 558 亿多种情况,这种算法在网上被称为自增序列算法。
维护自增 ID 主要有以下几种方式:
数据库主键自增
redis 自增
分布式自增主键 ID(雪花算法,存在 ID 浪费)
下面是 62 进制的 encode 与 decode 方法,来自 Base62。
private static String base62(Long b10) {
StringBuilder ret = new StringBuilder();
while (b10 > 0) {
ret.insert(0, characters.charAt((int) (b10 % 62)));
b10 /= 62;
}
return ret.toString();
}
private static long decodeBase62(String b62) {
long ret = 0;
b62 = new StringBuffer(b62).reverse().toString();
long count = 1;
for (char character : b62.toCharArray()) {
ret += characters.indexOf(character) * count;
count *= 62;
}
return ret;
}
三、一些细节
1、自增序列算法也存在一定的缺点,当自增主键很大时,生成的 62 进制字符串会变长,以 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
顺序的 62 进制为例,当主键大于 56800235583 时,会生成 7 位长度的 62 进制字符串。这个问题可以通过控制自增主键的增长速度来解决,而且要避免主键浪费。
2、62 进制的顺序并不一定严格按照 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
的顺序来表示,这个顺序可以是打乱的,这样生成的短链接标识更随机不易被破解。
3、长链接与短链接是否需要一对多关系,同一个长链接使用自增主键 ID 算法生成的短链接是不同的,因为自增主键 ID 不同,生成的 62 进制字符串自然也不同。如果我们有一个长链接唯一对应一个短链接需求,可以将长链接进行 md5 加密,将加密后的 md5 值存储在 DB 中,每次生成短链接前都根据长链接 md5 值查询 DB,如果存在,则直接返回短链接,当然也可以使用其他方式维护这种关系。
4、跳转用 301 还是 302,301 永久重定向,302 是临时重定向。短地址一经生成就不会变化,所以用 301 是符合 http 语义的。同时对服务器压力也会有一定减少。
但是如果使用了 301,我们就无法统计到短地址被点击的次数了。而这个点击次数是一个非常有意思的大数据分析数据源。能够分析出的东西非常非常多。所以选择 302 虽然会增加服务器压力,但是我想是一个更好的选择。from 短 URL 系统是怎么设计的?by iammutex
5、如果短链接请求频繁,可以借助 redis 做对应的缓存优化。
●【练手项目】基于SpringBoot的ERP系统,自带进销存+财务+生产功能
●分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
●能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
以上是关于通俗易懂讲解,彻底弄懂 https 原理本质https 的过程的主要内容,如果未能解决你的问题,请参考以下文章
通俗易懂讲解dpdk,使用场景,实现原理,dpdk的技术生态