在数字化时代,数据安全和隐私保护变得至关重要。HTTPS 作为保障网络通信安全的重要协议,其重要性日益凸显。本文将从
基础概念
出发,深入探讨HTTPS 的工作原理
、关键技术
、以及如何在实际应用中部署和维护 HTTPS
,最后用图示解开 HTTPS 握手全过程
HTTPS 介绍
在 HTTP 协议中,数据以
明文
形式传输, 容易遭受窃听、篡改和冒充等安全威胁。HTTPS
(超文本传输安全协议)是 HTTP 协议的安全版本,它在 HTTP 下层加入了 SSL/TLS 协议
,通过加密技术保护数据不被非法访问,确保了数据的安全性和隐私性
。
SSL(Secure Sockets Layer)
和TLS(Transport Layer Security)
是两个主要的加密协议,用于在互联网上提供安全通信。TLS
是SSL
的继承者,提供了更高级的安全特性。
HTTPS 的工作原理
HTTPS 在
传输数据之前
需要客户端(浏览器)与服务端(网站)之间进行一次握手
,在握手过程中将确立双方加密传输数据的密码信息
以下是 SSL/TLS 的握手过程的主要步骤:
- 客户端发起连接:客户端通过 HTTPS URL 请求服务器的资源。
- 服务器响应证书:服务器响应其 SSL(CA) 证书,该证书包含了服务器的公钥。
- 证书验证:客户端验证证书的有效性(如证书颁发机构、证书有效期)。
- 密钥交换:客户端生成一个对称加密密钥,然后用公钥加密,发送给服务器,服务器用私钥解密获得密钥。
- 加密通信:客户端和服务器使用协商的密钥进行加密通信(对称加密)
涉及的加密算法
- 对称加密:如
AES(高级加密标准)
,用于快速加密大量数据,加密解密速度快
- 非对称加密:如
RSA(Rivest-Shamir-Adleman)
,用于密钥交换和数字签名。 - Hash 摘要: 确保消息的完整性
HTTPS 的关键技术( 数字证书)
数字证书类型
数字证书是一个电子文档,用于证明公钥的合法性。它由可信的第三方机构(CA)签发,包含了证书持有者的公钥、身份信息和 CA 的数字签名。
证书类型 | 适用网站类型 | 公信等级 | 认证强度 | 安全性 |
---|---|---|---|---|
DV(域名型) | 适用于个人网站 、App 服务、展示型网站、企业测试或个人测试网站。 | 一般 | CA 机构审核个人网站真实性、不验证企业真实性 | 一般 |
OV(企业型) | 适用于政府组织、中小型企业 或教育机构 等。 | 高 | CA 机构审核组织及企业真实性 | 高 |
EV(企业增强型) | 适用于大型企业 、金融机构 、电商等 涉及交易支付和隐私数据的高私密网站。 | 最高 | 严格认证 | 最高 |
证书格式
服务器类型 | 证书格式 |
---|---|
Nginx | pem/key |
Tomcat | pfx |
Apache | crt/key |
IIS | pfx |
JKS | jks |
其他 | pem/key |
证书类型
.CRT
文件: 这样的证书文件可以是二进制格式,也可以是文本格式
,一般均为文本格式,功能与.DER
及.CER
证书文件相同。.PEM
文件: 这样的证书文件一般是文本格式
,可以存放证书或私钥,或者两者都包含。.PEM
文件如果只包含私钥,一般用.KEY
文件代替。.PFX
文件: 这样的证书文件是二进制格式
,同时包含证书和私钥,且一般有密码保护。
部署 HTTPS
获取 SSL 证书
部署 HTTPS 的第一步是获取一个 SSL 证书。可以选择付费证书
或免费的证书
颁发机构,如 阿里云、腾讯云都能申请。
配置 Web 服务器
在 Nginx 服务器安装证书
cd /usr/local/nginx/conf #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
mkdir cert #创建证书目录,命名为cert。
执行以下命令,打开配置文件。
vim /usr/local/nginx/conf/nginx.conf
server {
#HTTPS的默认访问端口443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl;
#填写证书绑定的域名
server_name <yourdomain>;
#填写证书文件绝对路径
ssl_certificate cert/<cert-file-name>.pem;
#填写证书私钥文件绝对路径
ssl_certificate_key cert/<cert-file-name>.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
强制使用 HTTPS
server {
listen 80;
server_name <yourdomain>;
# rewrite ^(.*)$ https://$host$1 permanent;
return 301 https://$server_name$request_uri;
location ~ / {
root /var/www/html/8080;
index index.html index.php index.htm;
}
}
Https 握手全过程
我们在本地客户端(Browser)发起对服务器(Server)的 HTTPS 请求,然后使用
WireShark
进行抓包。
握手大致流程如下图
图解
- TCP/IP 三次握手
- client Hello
- Server Hello
- Certificate 、Server Key Exchange 、ServerHello Done
- Client key Exchange
- Session
https 证书查看
- 这里用了 bing.com 的
HTTPS 的性能优化
- 启用 TLS 1.3:TLS 1.3 是最新的安全协议版本,它减少了握手过程中的往返次数(RTT),最快能够在一次 RTT 内完成握手,显著提升了建立安全连接的速度。
- 会话重用技术:使用 Session ID 或 Session Ticket 等技术,减少 TLS 握手过程。
- OCSP Stapling:开启 OCSP Stapling 功能,减少证书验证的时间,它通过将证书颁发机构(CA)的响应缓存在 Web 服务器上,从而避免了每次客户端发起连接时都要进行 OCSP 查询的开销。
结语
我们通过基础概念了解了 https 在生产中的重要性,了解 CA 证书,通过部署案例,让我们系统拥有 https 能力,最后通过图解 https 握手过程,了解 https 建立的全过程,还补充了部分 https 的性能优化,希望对你的学习有所帮助