https
- ssl证书
- https ssh都是非对称加密
- 非对称加密:也叫公钥加密 使用密钥对 加密解密使用不同的密钥
- 对称加密:加密解密使用同一个密钥
- https先确认对方身份,使用非对称加密;和对方连接上后后续的交流使用对称加密,足够安全足够快
- https不是一个单独的协议,是http+ssl组成的https,或者http+tls
![[Pasted image 20250402225919.png]]
![[Pasted image 20250402230344.png]]
作用
不使用的话有三大风险:
- 被窃听
- 被篡改
- 被冒充
使用能达到 - 所有信息都是加密传输,无法被窃听
- 具有校验机制,一旦被篡改会被立刻发现
- 配备身份证书,防止身份被冒充
流程
![[Pasted image 20250402231134.png]]
证书类型
- 证书是根据域名颁发的,分为域名和泛域名(
*.baidu.com);二级域名价格更贵,加密算法更强
自建ssl证书
1.要安装openssl命令
yum install openssl openssl-devel -y
2.创建证书的目录,通过命令去创建
mkdir -p /etc/nginx/ssl-cert/
cd /etc/nginx/ssl-cert/
创建私钥文件
# 阿里云rsa非对称加密算法,密钥长度是2048,输出密钥信息到server.key文件中
# -idea是加密算法的名字
openssl genrsa -idea -out server.key 2048
输出私钥密码,为了保护私钥
必须输入密码才可以创建
然后基于该私钥文件,创建证书(创建公钥)
3.基于这个server.key私钥文件创建公钥server.crt
# req创建证书,100年 证书规格,类型是-509类型,-newkey rsa:2048 基于rsa非对称加密算法,创建长度是2048的文件,创建证书,指定以哪个私钥去创建
# 你在创建公钥,证书的时候,会让你填写企业,组织信息
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
## 到这里,就和你去阿里云下载的那个证书一个意思。一对非对称的公私钥就创建好了,下一步交给nginx即可
[root@hw /etc/nginx/ssl-cert] ls
server.crt server.key
💡小插曲:获取证书过期时间脚本
- 可以学下转换时间戳的方式
server_name=www.bilibili.com
# 获取网站的证书有效期
# 获取ssl过期时间的命令
# 1.获取有效期的日志
ssl_time=$(echo | openssl s_client -servername ${server_name} -connect ${server_name}:443 2>/dev/null | openssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}')
# 2.转换时间戳
# 把日志转变为时间戳,时间戳就可以去计算了
# 转为unix日期格式,然后可以对日期进行计算
ssl_unix_time=$(date +%s -d "${ssl_time}")
# 获取今天时间戳
today=$(date +%s)
# 计算剩余时间
# 利用let命令去数学运算
# 从到期时间,减去今天的日期,然后单位换算,看看过期还有多久
# 最终将时间戳,转为天的单位
let expr_time=($ssl_unix_time-$today)/24/3600
echo "${server_name} 该ssl证书剩余时间:$expr_time"
配置https
- 分两段配置:HTTP 和 HTTPS 两个 server 块
http:
server {
listen 80;
server_name zhaoxi.space;
return 301 https://$host$request_uri;
}
https:
server {
listen 443 ssl;
server_name zhaoxi.space;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key
# 推荐的安全设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 例子:
location / {
proxy_pass http://127.0.0.1:8080; # 你的业务地址,根据实际情况改
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
🧪实践:
- 刚用腾讯云免费申请的ssl证书试了下可以了,但是有个很奇怪的问题:
[root@tx /etc/nginx/ssl_file] nginx -t
nginx: [emerg] invalid value " " in /etc/nginx/conf.d/8090.conf:13
nginx: configuration file /etc/nginx/nginx.conf test failed
# 配置文件没问题,所有的都排查了 最后是把nginx配置文件里的tab键改成了4个空格就可以了,灵异事件;
# 还有个小提醒: 公钥是crt结尾的 记住了,私钥是key