目录
http和https的区别
https = http + ssl/tls
-
加密:
- HTTP:数据传输过程中不加密,容易被截获和篡改。
- HTTPS:使用SSL/TLS协议对传输的数据进行加密,保护数据传输过程中的安全性。
-
端口:
- HTTP:默认使用端口80。
- HTTPS:默认使用端口443。
-
安全性:
- HTTP:不提供数据加密,安全性较低。
- HTTPS:提供数据加密和完整性校验,安全性较高。
-
证书:
- HTTP:不需要证书。
- HTTPS:需要SSL证书来启用加密,并验证服务器的身份。
-
性能:
- HTTP:由于不加密数据,性能略高于HTTPS。
- HTTPS:由于需要进行加密和解密,可能会有一定的性能开销。
-
搜索引擎优化(SEO):
- HTTP:搜索引擎可能会对没有使用HTTPS的网站进行降权。
- HTTPS:搜索引擎倾向于优先索引和展示使用HTTPS的网站。
-
浏览器显示:
- HTTP:在大多数现代浏览器中,HTTP网站通常显示为"不安全"。
- HTTPS:浏览器会显示一个锁形图标,表示网站是安全的。
-
成本:
- HTTP:通常免费。
- HTTPS:需要购买SSL证书,可能会有一定的成本。
-
应用场景:
- HTTP:适用于不需要传输敏感信息的网站,如新闻网站、博客等。
- HTTPS:适用于需要传输敏感信息的网站,如网上银行、在线购物、电子邮件等
证书的颁发和认证
1. 公开密钥(Public Key) 🔑
数字证书的核心功能之一是包含证书持有者的公开密钥。这是一个非常关键的信息,因为它允许数据发送者加密信息,仅证书持有者的私钥能解开。这种机制确保了数据在传输过程中的安全性。
2. 主体信息(Subject) 🆔
证书中还会详细记录主体信息,即证书持有者的身份信息。这可能包括个人名称、组织名称、部门名称等。通过这些信息,可以验证证书持有者的真实身份,从而增加交易的信任度。
3. 颁发者(Issuer) 🏢
颁发者信息表明了哪一个权威机构颁发了这个证书。这是证书信任链的重要一环,帮助用户识别和信任证书的有效性。权威机构的严格审核流程保证了证书的可靠性。
4. 有效期(Validity Period) 📅
每个数字证书都有其有效期限,这是证书可被认为有效的时间范围。有效期通常包含起始日期和结束日期。过期的证书不能被信任,需及时更新。
5. 证书序列号(Serial Number) 🔢
为了确保每个证书的唯一性,每个证书都会被赋予一个独一无二的序列号。这个号码在证书的生命周期内保持不变,可以用来追踪或撤销证书。
6. 数字签名(Digital Signature) 🖋️
证书中还包含了颁发机构对证书的数字签名。这是一种算法处理的结果,用来验证证书的完整性和真实性。只有通过了数字签名的验证,证书内容才被认为是未被篡改的。
7. 使用限制(Usage Restrictions) 🚫
有些证书可能会有特定的使用限制,例如只能用于加密邮件、只能 用于身份验证等。这些限制确保证书不会被误用,同时也保护了证书持有者的权益
单向认证流程
单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下:
- 客户端发起建立HTTPS连接请求,将SSL/TLS 协议版本的信息发送给服务器端;
- 服务器端将本机的公钥证书(server.crt)发送给客户端;
- 客户端读取公钥证书(server.crt),取出了服务端公钥;
- 客户端生成一个随机数(密钥R),用刚才得到的服务器公钥去加密这个随机数形成密文,发送给服务端;
- 服务端用自己的私钥(server.key)去解密这个密文,得到了密钥R
- 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了
双向认证流程
- 客户端发起建立HTTPS连接请求,将SSL/TLS协议版本的信息发送给服务端;
- 服务器端将本机的公钥证书(server.crt)发送给客户端;
- 客户端读取公钥证书(server.crt),取出了服务端公钥;
- 客户端将客户端公钥证书(client.crt)发送给服务器端;
- 服务器端使用根证书(root.crt)解密客户端公钥证书,拿到客户端公钥;
- 客户端发送自己支持的加密方案给服务器端;
- 服务器端根据自己和客户端的能力,选择一个双方都能接受的加密方案,使用客户端的公钥加密后发送给客户端;
- 客户端使用自己的私钥解密加密方案,生成一个随机数R,使用服务器公钥加密后传给服务器端;
- 服务端用自己的私钥去解密这个密文,得到了密钥R
- 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。