HTTPS(HyperText Transfer Protocol over Secure Socket Layer)
HTTPS是基于HTTP的安全版,特点:
- 保密性:通过SSL/TLS协议和加密算法,HTTPS保证了数据在传输过程中的保密性,防止数据被窃听。
- 完整性:HTTPS确保数据在传输过程中不被篡改,保持数据的完整性。
- 认证:通过数字证书,HTTPS能够验证通信双方的身份,防止身份伪造。
- 加密算法:HTTPS使用了混合加密算法,即结合了对称加密和非对称加密的优势。。
- 握手过程:在数据传输开始前,HTTPS会进行一个SSL/TLS握手过程,以确保通信双方协商一致的加密参数和密钥。
- 性能影响:虽然HTTPS提供了更高的安全性,但它也可能会对性能产生一定影响,比如增加数据传输的开销。然而,随着技术的进步,这种影响正在逐渐减小。
HTTPS是一个重要的网络安全措施,它通过加密和身份验证机制来保护数据的安全,防止数据泄露和中间人攻击。随着技术的发展和安全需求的增加,HTTPS已经成为互联网通信的标准做法。
加密算法:
- 对称性加密:对称加密的过程涉及使用相同的密钥进行数据的加密和解密;
- 非对称性加密:非对称加密的过程涉及使用一对密钥,即公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。
- 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多。它将任意长度的输入数据映射为固定长度输出的数学计算机程序,具有不可逆性、唯一性和高效性等特点。如:/etc/shadow文件中的用户密码。
- 数字签名:数字签名是一种电子签名技术,它利用非对称加密和数字摘要技术来验证信息的真实性和完整性。
HTTPS 协议
HTTP 协议(Hyper Text Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
SSL/TLS : SSL(Secure Sockets Layer 安全套接层
),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层为数据通讯进行加密提供安全支持。
SSL协议可分为两层:
- SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。相当于连接;
- SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 相当于通信 ;
SSL协议的工作原理是:
- 在传输层对数据进行加密,以保护所有应用层协议的数据传输安全。
- 使用公开密钥和私有密钥两种加密方法,其中公钥用于加密数据,私钥用于解密数据。
- 在应用层协议通信之前完成加密算法、通信密钥的协商以及服务器认证工作,之后应用层协议所传送的数据都会被加密。
SSL协议提供的服务主要有:
- 身份认证和数据加密。保证数据完整性;
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取后,数据泄露和篡改;
- 维护数据的完整性,确保数据在传输过程中不被改变。
HTTPS 原理
HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击;
Https访问流程:
1.客户端想服务器发起HTTPS的请求,连接到服务器的443端口;
2.服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端
3..客户端接受到该公钥进行验证,如果有问题,则HTTPS请求无法继续;如果没有问题,则上述公钥是合格的。(第一次HTTP请求)客户端这个时候随机生成一个私钥,成为client key,客户端密钥,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;
4.进行二次HTTP请求,将加密之后的client key传递给服务器;
5.服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密
6.将对称加密的数据传递给客户端,客户端使用对称解密,得到服务器发送的数据,完成第二次HTTP请求。
HTTPS相比HTTP的优势:
相比HTTP,HTTPS 传输更加安全, 所有信息都是加密传播,黑客无法窃听。具有校验机制,一旦被篡改,通信双方会立刻发现。 配备身份证书,防止身份被冒充。
HTTPS 缺点:
- SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐(续费麻烦)
- HTTPS 降低用户访问速度(多次握手)
- 网站改用HTTPS 以后,由HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用302跳转)
- HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加大量机器(https访问过程需要加解密)
https证书申请流程
申请地址:Certbot
环境准备:
- 一台centos 7 LInux操作系统主机,并且能够正常上网;
- 真实域名。
确保服务器上安装了 Nginx,并启动 nginx;
# 安装epel源
yum install -y epel-release
yum makecache fast
# 下载snapd
yum install -y snapd nginx
# 设置开机启动
systemctl enable --now snapd
# 设置 软连接
ln -s /var/lib/snapd/snap /snap
# 验证
snap --help
# 安装Certbot软件包,并使用了--classic标志(经典模式):等一会
snap install --classic certbot
# 建立软连接
ln -s /snap/bin/certbot /usr/bin/certbot
# 使用Certbot工具获取SSL/TLS证书
certbot certonly --manual --preferred-challenges dns -d *.kunkun666.cn
certbot: 是Certbot的命令行工具,用于管理SSL/TLS证书。
certonly: 表示只获取证书而不配置自动更新和续订。
--manual: 指定手动验证模式,即通过手动创建验证文件来证明域名所有权。
--preferred-challenges dns: 指定首选的验证方式为DNS(DNS challenge),即通过在DNS记录中添加特定的TXT记录来证明域名所有权。
-d *.tanke.love: 指定要获取证书的域名,这里包括tanke.love和以*.tanke.love开头的所有子域名。
综上所述,该命令的作用是使用Certbot工具,通过手动验证模式和DNS挑战方式,为kunkun666.cn和以*.kunkun666.cn 开头的所有子域名获取SSL/TLS证书。
打开阿里云,添加记录:
然后,在终端按下回车键:
# 如果出现上述报错则重新生成证书:
certbot certonly --manual --preferred-challenges dns -d tanke.love,*.tanke.love -v
测试:
# 启动nginx
systemctl enable --now nginx
# 修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
#
server {
listen 80;
server_name test.kunkun666.cn;
location / {
rewrite ^(.*)$ https://test.kunkun666.cn$1 permanent;
}
}
server {
listen 443 ssl;
server_name test.kunkun666.cn;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate /etc/letsencrypt/live/kunkun666.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kunkun666.cn/privkey.pem;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /nginx;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /nginx;
}
}
#
mkdir /nginx
echo "This is test" > /nginx/index.html
nginx -t
systemctl restart nginx
test.kunkun666.cn
可以看到连接是安全的