首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
安全
›
网络安全
›
[特别字符] HTTPS设置全攻略:从原理到实战,让你的网站 ...
返回列表
发新帖
[特别字符] HTTPS设置全攻略:从原理到实战,让你的网站秒变安全小卫士!
[复制链接]
发表于 2025-9-1 09:40:50
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
为什么现在所有网站都要用HTTPS,HTTP不是挺好用的吗?我当时就笑了,这就像问为什么出门要锁门一样。今天就来聊聊HTTPS这个话题,从原理到现实设置,包管让你看完就能上手。
说起HTTPS,我记得刚开始做运维那会儿,各人对SSL证书还挺陌生的,以为这玩意儿又贵又麻烦。现在回头看,真是期间变了,不消HTTPS的网站浏览器都会标红警告,用户看到就跑了。
HTTPS到底是个啥东西
简单说,HTTPS就是HTTP穿了件防弹衣。你知道HTTP吧,就是我们平时访问网站用的协议,但它有个致命问题——裸奔。所有数据都是明文传输,就像在大街上喊话一样,谁都能听到。
我之前碰到过一个案例,某个电商网站用的HTTP,结果用户在咖啡厅连WiFi购物时,暗码被人截获了。这事儿闹得挺大,末了老板拍桌子要求全站HTTPS。
HTTPS在HTTP基础上加了SSL/TLS层,这个SSL就像个翻译官,把你要说的话先
加密
,传到对方那里再解密。即使有人在中间偷听,听到的也是一堆乱码。
具体工作流程是这样的:
客户端(浏览器)向
服务器
发起连接请求
服务器
返回SSL证书,证书里包罗公钥
客户端验证证书是否可信
验证通事后,客户端天生一个随机密钥,用
服务器
公钥
加密
发送
服务器用私钥解密得到这个密钥
之后双方就用这个密钥进行对称
加密
通信
这个过程叫SSL握手,听起来复杂,其实就几毫秒的事儿。
为什么非要用HTTPS不可
除了
安全
性,还有几个现实原因让你不得不消:
搜索引擎偏幸
Google早就明确表示,HTTPS是排名因素之一。百度虽然没明说,但你看看现在排前面的网站,根本都是HTTPS。不消的话,SEO就输在起跑线上了。
浏览器警告
Chrome、Firefox这些主流浏览器,看到HTTP网站就会表现"不
安全
"标识。用户看到这个,心里就犯嘀咕,还会继承访问吗?
功能
限制
许多新的Web
API
,比如地理位置、摄像头访问等,浏览器强制要求HTTPS环境。不消的话,这些
功能
就别想了。
我有个朋侪做了个在线照相的网站,结果由于没用HTTPS,摄像头
功能
在Chrome上根本用不了,用户投诉一大堆。
免费SSL证书哪里搞
以前SSL证书动辄几千块,现在免费的一大把,主要有这几个渠道:
Let’s Encrypt
这是最着名的免费SSL证书提供商,Mozilla、Google等大厂支持的。证书有效期3个月,但可以自动续期。我现在大部分项目都用这个。
阿里云免费证书
阿里云每年提供20个免费的单域名证书,申请简单,得当小项目。不过现在限制比以前严了。
腾讯云免费证书
和阿里云雷同,也有免费额度,界面做得还不错。
Cloudflare
如果你用Cloudflare的
CDN
服务,SSL证书是免费包罗的,而且设置超简单。
我个人推荐Let’s Encrypt,虽然设置稍微复杂点,但胜在稳固可靠,而且没有数量限制。
Let’s Encrypt证书申请实战
申请Let’s Encrypt证书最常用的工具是Certbot,安装很简单:
# CentOS/RHEL
yum install certbot
# Ubuntu/Debian
apt-get install certbot
# 或者用snap安装(推荐)
snap install --classic certbot
复制
代码
申请证书有几种方式,我常用的是webroot模式:
certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
复制
代码
这个命令会在你的网站根目录下创建验证文件,Let’s Encrypt通过访问这个文件来验证域名所有权。
如果你的网站还没上线,可以用standalone模式:
certbot certonly --standalone -d example.com
复制
代码
这种方式会临时启动一个Web服务器来完成验证,但必要先停止现有的Web服务。
申请乐成后,证书文件会保存在/etc/letsencrypt/live/example.com/目录下:
fullchain.pem - 完整证书链
privkey.pem - 私钥文件
Nginx设置HTTPS的正确姿势
拿到证书后就要设置Nginx了,这里有不少坑要注意。
基础设置是这样的:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他
配置
...
}
复制代码
但这样设置
安全
性还不敷,必要加强一下:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# SSL证书
配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL安全
配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
# SSL会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HSTS安全头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 其他安全头
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
root /var/www/html;
index index.html index.htm;
}
}
复制代码
别忘了还要设置HTTP到HTTPS的重定向:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
复制代码
设置完记得测试一下语法:
nginx -t
复制代码
没问题就重载设置:
nginx -s reload
复制代码
自动续期设置
Let’s Encrypt证书只有3个月有效期,手动续期太麻烦,必须搞自动化。
Certbot提供了续期命令:
certbot renew --dry-run
复制代码
--dry-run参数是测试模式,确认没问题后去掉这个参数。
设置定时任务自动续期:
crontab -e
复制代码
添加这行:
0 2 * * * /usr/bin/certbot renew --quiet && /usr/sbin/nginx -s reload
复制代码
这样每天凌晨2点会检查证书是否必要续期,如果必要就自动续期并重载Nginx。
我之前就碰到过证书逾期的尴尬,网站忽然不能访问了,用户投诉电话打爆了。从那以后我就特别重视自动续期这块。
常见问题排查
证书链不完整
有时间会碰到移动端访问正常,但某些老设备或软件报证书错误。这通常是证书链设置问题,确保利用fullchain.pem而不是cert.pem。
混淆内容警告
HTTPS页面引用HTTP资源会被浏览器阻止。检查页面中的图片、CSS、JS等资源链接,全部改成HTTPS或相对路径。
性能
问题
SSL握手确实会增长一些耽误,但可以通过启用HTTP/2、设置SSL会话缓存等方式优化。现在的服务器
性能
都不错,影响其实很小。
我记得有次客户抱怨网站变慢了,排查半天发现是SSL设置有问题,没启用会话缓存,每次访问都要重新握手。调解后
性能
立马规复正常。
证书
监控
很重要
生产环境一定要
监控
证书状态,我一样平常用这几种方式:
命令行检查
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
复制代码
在线工具
SSL Labs的SSL Test是个不错的在线检测工具,能给出具体的安全评分和发起。
监控
脚本
写个简单脚本定期检查证书有效期,快逾期时发邮件提醒:
#!/bin/bash
DOMAIN="example.com"
EXPIRE_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRE_TIMESTAMP=$(date -d "$EXPIRE_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( ($EXPIRE_TIMESTAMP - $CURRENT_TIMESTAMP) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
echo "证书将在 $DAYS_LEFT 天后过期!" | mail -s "SSL证书过期提醒"
[email protected]
fi
复制代码
一些优化发起
启用HTTP/2
现在的浏览器根本都支持HTTP/2,能显著提拔性能。在Nginx设置中加上http2就行:
listen 443 ssl http2;
复制代码
设置OCSP Stapling
这个功能可以减少客户端验证证书的时间:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
复制代码
利用
CDN
如果网站访问量大,发起配合
CDN
利用。Cloudflare、阿里云CDN等都支持SSL,而且能进一步提拔性能。
说到CDN,我之前有个项目,服务器在国外,国内访问很慢。接入CDN后不仅速率快了,SSL设置也简化了不少,一举两得。
总结
HTTPS已经不是可选项,而是必须品了。从安全性、SEO、用户体验各个角度看,都没理由不消。
Let’s Encrypt让SSL证书的门槛降到了零,设置也不复杂,就是要注意自动续期和监控。Nginx的SSL设置看起来参数许多,但大部分都是模板化的,复制粘贴改改域名就能用。
最重要的是要养成好习惯:新项目一开始就设置HTTPS,不要等上线后再改;定期检查证书状态;关注安全更新。
我见过太多由于SSL设置问题导致的故障,大部分都是可以克制的。多花点时间在前期设置上,后面能省许多麻烦。
现在各大云厂商的SSL证书服务也越来越完善,如果不想折腾命令行,直接用云服务也是不错的选择。关键是要举措起来,别再让你的网站裸奔了!
回复
使用道具
举报
返回列表
浏览过的版块
.Net
人工智能
终端安全
卖不甜枣
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表