DAY 23- HTTPS、TLS/ SSL

「我们的连结够安全吗。」


HTTP(HyperText Transfer Protocol)

超文本传输协定,是传输双方都必须遵守的一组「约定」,
他可以用来发布和接收 html 档、图片、文字 等超文本。

而这些约定并没有加密这个动作。
也就是说,所有的资料都是未加密的,如果有骇客可以中途拦截你的讯息,
那他就可以直接看到所有资料。

HTTPS(HyperText Transfer Protocol Secure)

多了一个Secure,代表他比较安全。
其实就是运用了TLS/SSL 的HTTP。
如果你还不知道我在讲什麽的话,请看到这个网页的左上角,
不管你用的是Chrome 还是 Edge ,网址旁边都应该要有一个图形。
如果他是一个锁上的锁,那就代表这个网页使用 HTTPS 。

TLS(传输层安全性协定)/SSL(安全通讯协定)

SSL 和 TLS 不是两个东西,他其实就是同一个东西,
只是 TLS 是 SSL 的更新版。
(以下通称TLS)

SSL 总共有三个版本,SSL1.0, SSL2.0, SSL3.0,
而SSL1.0因为漏洞太多所以没有公开。
在2014年时SSL3.0被发现缺陷,因此在2015年时被弃用了,
之後皆使用SSL的下一版,TLS。

TLS总共有四个版本,
TLS1.0、TLS1.1、TLS1.2、TLS1.3,

从中文名称上可以看到,TLS是传输层安全性协定,
也就是双方在进行通讯时(或是造访网站等广义的通讯)所共同遵守的规范,更精确来说步骤。

我们前面学过那麽多的加密方式,
这个协定就是来决定我们要使用哪些加密方式,
以及怎麽使用。

TLS1.2 HANDSHAKE

当客户造访一个网站,需要和该网站的服务器进行「握手」的动作。

首先客户端会先传送一个讯息,称为ClientHello。
内容包含该客户可使用的最高TLS版本,以及一清单的密码套件(cipher suites),和一个乱数。

单个密码套件形如这样 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,

须包含密钥交换演算法(如DHKE、ECDH)、对称式加密演算法、MAC演算法(如SHA-256)
客户要提供一个密码套件清单表示他所能提供的加密方式。

接着服务器会根据客户的讯息回传 ServerHello,
内容包括这次通讯要使用的加密方式。

OK,
双方都协议好要使用哪种加密方式了。
接着是加密的准备。

服务器会传来他的证书(我们在昨天讲过由CA颁发的那个)让客户端确认身分。
接着会传来 DHKE 的公开参数,
以及以上所有资料的数位签章(当然经过杂凑)。
最後,补上一句ServerHelloDone,代表他传完了。
接着就靠你(的浏览器)了,

有了他的证书,你可以确认他就是你要连的网站,
有他的数位签章,你确认讯息是由他传送过来的。
有了DHKE的公开参数,你可以和他进行秘密讯息传递。

但还没完,
你有了共用的密钥,但是服务器端还没有,
你必须将你的公钥传给他,才算完成一次DHKE。

另外,你还要传一个"Change cipher spec",
告知服务器,你接下来都会传送经过加密後的讯息。
接着将以上所有的通讯结果摘要加密後传送给服务器,
这个步骤可以用来防范MITM。
最後服务器端回传一个Change cipher spec。

以上这些步骤都在1秒之内完成,
也就是你一点开网站的那瞬间就完成了。
而TLS1.3花的时间又更少了,他只需要一次来回就完成所有事情。


今天的内容可以算是囊括了过去所有的东西,
我自己也查了蛮多的资料想要用简单的方式解释 TLS 协定。
不过还是得要说声抱歉,用了许许多多的简写,

对於不熟悉英文简写的人来看这篇应该会蛮痛苦的,
而且如果不熟悉每个演算法的作用的话可能看不太懂。
如果你是这样的话,记得回去复习哦!

参考资料:
https://www.digicert.com/faq/ssl-cryptography.htm
https://www.digicert.com/what-is-an-ssl-certificate
https://www.websecurity.digicert.com/zh/hk/security-topics/what-is-ssl-tls-https
https://www.youtube.com/watch?v=0TLDTodL7Lc
https://www.youtube.com/watch?v=86cQJ0MMses

图片来源:
https://www.meme-arsenal.com/en/create/meme/1424433
https://www.researchgate.net/figure/A-SSL-TLS-handshake_fig2_300402166
https://me.me/i/tls-handshake-timeout-11488620


<<:  Day 23【Tokens' Owner】FUN SIDE PROJECT

>>:  DAY 23 『 客制化按钮 Custom Button 』

Day21 atomic, memory barrier

前言 昨天讲完了最後一天的记忆体管理方法,了解了如何管理匿名分页 anonymous page,也知...

JS ES6 let 与 const DAY72

这里先附上之前所介绍的 JS ES6 let 与 const 的基本介绍 https://ithel...

DAY28-如何与人协同工作与好好沟通-外国人篇

笔者本人的英文程度可以说是台湾教育典型的英文程度,可是说是好又很不好。 所谓的好又很不好听起来是一种...

生存法则一:在快速变动的环境下生存

承认我们都有一些资讯焦虑 我们生活在快速变动的时代,无时无刻都有新的产业跟名词冒出,数据驱动决策、区...