为什么需要给网站加上HTTPS
HTTPS(Hypertext Transfer Protocol Secure ):超文本传输安全协议
给网站加上 HTTPS有以下几个主要的原因:
数据安全:HTTPS 使用 SSL/TLS 协议对数据进行加密,可以保护数据在传输过程中的安全,防止数据被窃取或篡改。这对于处理敏感信息(如信用卡信息、用户密码等)的网站来说尤其重要。
身份验证:HTTPS 协议需要网站使用一个经过认证的 SSL 证书。这个证书可以证明网站的身份,防止用户被钓鱼网站欺骗。
SEO 优化:搜索引擎(如 Google)倾向于将使用 HTTPS 的网站排在更高的位置,因此使用 HTTPS 可以提高网站的 SEO 排名。
提高用户信任:现代浏览器会在地址栏显示使用 HTTPS 的网站的安全状态,这可以提高用户对网站的信任度。
满足某些功能的要求:某些 Web 功能(如 HTTP/2、Service Workers 等)需要网站使用 HTTPS。
因此,无论是出于安全考虑,还是出于提高用户体验和搜索排名的考虑,给网站加上 HTTPS 都是非常推荐的做法。
为什么HTTPS会比HTTP要安全
HTTP不安全的原因:
明文传输:HTTP协议中的数据是以明文形式传输的,这意味着如果有人能够截获这些数据(例如,通过网络嗅探或中间人攻击),他们就能直接读取和理解这些数据。这可能包括敏感信息,如密码、信用卡号等。
无身份验证:HTTP协议不提供服务端或客户端的身份验证。这意味着用户可能会与假冒的服务器进行通信,或者服务器可能会接收到假冒的客户端的数据。
HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)都是用于传输网页和其他数据的协议。它们的主要区别在于HTTPS使用了SSL/TLS协议来提供数据的加密和身份验证,而HTTP没有。
尤其在中间人攻击中,HTTP的脆弱性远比HTTPS拉垮。
为什么HTTPS安全
为了去了解为什么HTTPS相比HTTP安全,我们先来了解HTTPS的部署过程。
1. SSL证书的申请
我们先去找到全球上权威的CA(证书颁发机构),我们拿到我们的域名,去他那里申请一个SSL证书。
具体步骤如下:
SSL证书的申请过程需要提供一些关于你和你的网站的信息。具体需要的信息可能会根据证书颁发机构(CA)和证书类型的不同而不同,但通常会包括以下内容:
公钥:你需要生成一对公钥和私钥,并将公钥提交给CA。私钥需要你自己安全地存储,不能泄露给任何人。
域名:你需要提供你想要为其获取SSL证书的域名。CA会验证你对这个域名的所有权。
公司信息:如果你申请的是组织验证(OV)或扩展验证(EV)证书,你需要提供你的公司的详细信息,包括公司名称、地址、电话等。CA会验证这些信息的准确性。
联系信息:你需要提供一个联系人的信息,包括姓名、电子邮件、电话等。这个联系人应该能够回答CA关于证书申请的问题。
证书签名请求(CSR):CSR是一个包含了你的公钥和一些标识信息(如域名、组织名称等)的文件,你需要生成一个CSR并提交给CA。
以上是申请SSL证书通常需要的信息。在你提交这些信息后,CA会进行验证。如果验证成功,CA会签发一个SSL证书给你。这个证书包含了你的公钥和一些标识信息,以及CA的数字签名。你可以将这个证书安装到你的服务器上,以启用HTTPS。
2. 将SSL证书部署到服务器上
部署成功之后,我们就可以开启HTTPS协议了。 之后每次通信,都建立在HTTPS协议之上。
3. 安全的传输内容。
需要了解为什么内容安全,我们需要了解下握手的步骤,

以下是详细步骤:
发起请求:客户端(例如,浏览器)向服务器发起HTTPS请求。
开始握手:客户端发送一个”Client Hello”消息给服务器,这个消息包含了客户端支持的SSL/TLS版本,加密套件列表(包含各种加密算法和哈希函数),以及一个随机生成的客户端随机数。
服务器响应:服务器回复一个”Server Hello”消息,选择一个客户端和服务器都支持的加密套件,以及一个随机生成的服务器随机数。服务器还会发送其SSL证书,该证书包含服务器的公钥。
验证证书:客户端接收到服务器的SSL证书后,会验证证书的有效性。这包括检查证书是否由受信任的证书颁发机构(CA)签发,证书是否在有效期内,以及证书的主题是否匹配服务器的地址。
生成预主密钥:如果证书有效,客户端会生成一个新的随机数,称为“预主密钥”。然后,客户端使用服务器的公钥对预主密钥进行加密,生成一个“Client Key Exchange”消息,并将其发送给服务器。
解密预主密钥:服务器接收到“Client Key Exchange”消息后,使用其私钥解密消息,得到预主密钥。
生成会话密钥:然后,客户端和服务器都使用客户端随机数,服务器随机数,和预主密钥来生成同样的会话密钥。这个会话密钥用于接下来的数据加密和解密。
加密通信:之后的所有通信都使用这个会话密钥进行加密和解密。因为只有客户端和服务器知道会话密钥,所以即使数据在传输过程中被拦截,攻击者也无法解密数据。并且SSL还提供了消息完整性检查的功能。每个消息都会附带一个由消息内容计算出的摘要(通过一个叫做 HMAC 的算法)。接收方可以通过这个摘要检查消息在传输过程中是否被篡改。
这就是HTTPS的加密和解密过程。需要注意的是,这个过程中的关键部分是使用服务器的公钥对预主密钥进行加密,这样只有服务器才能解密并得到预主密钥。这就保证了通信的安全性。
CA证书的验证
为什么要讲这个,因为从上图中我们可以看见服务器和客户端只有两个人在进行通信,那么客户端怎么会知道CA证书的合法性呢?这个就是为什么要求CA机构是世界级权威机构了。
我们来看客户端是如何验证CA证书的合法性:
在HTTPS握手过程中,客户端如何知道验证服务器的证书颁发机构(CA)是合法的,主要依赖于客户端(通常是浏览器)内置的受信任的根证书列表。
以下是详细步骤:
当客户端(例如,浏览器)接收到服务器的SSL/TLS证书时,证书中会包含签发该证书的证书颁发机构(CA)的信息。
客户端会在其内置的受信任的根证书列表中查找这个CA的根证书。这个列表包含了许多公认的、受信任的CA的根证书,例如VeriSign,DigiCert,Let’s Encrypt等。
如果客户端在其受信任的根证书列表中找到了对应的CA根证书,那么客户端就会认为这个CA是合法的。然后,客户端会使用这个根证书的公钥来验证服务器证书的数字签名。
如果数字签名验证通过,那么客户端就会认为服务器的证书是有效的,然后继续SSL/TLS握手过程。如果数字签名验证失败,或者客户端在其受信任的根证书列表中找不到对应的CA根证书,那么客户端就会认为服务器的证书是无效的,然后中断SSL/TLS握手过程,并通常会显示一个警告给用户。
需要注意的是,这个过程依赖于客户端的受信任的根证书列表,这个列表是由客户端(通常是浏览器厂商)维护的,并且会随着软件更新而更新。