个人网站需要 HTTPS。
它不仅仅只是地址栏里的小锁,还关系到访问安全、浏览器提示、后台登录、现代 Web 能力、搜索和分享体验。
对一个准备长期运行的博客来说,网站不能只做到“能访问”,还要能通过可信连接访问。
这一篇进入实际操作:SSL 证书怎么申请、下载,并部署到 Nginx。
完整链路
我这里会以阿里云为例(域名在阿里买的),在哪个平台购买不重要,不同平台页面布局多少会有一些差异。
更重要的是理解流程:申请证书,完成域名验证,下载证书,放到服务器,配置 Nginx,检查配置,重载服务,最后验证 HTTPS 是否正常。

部署证书表面上是“下载两个文件”,实际上是让浏览器访问域名时,可以和服务器建立可信的 HTTPS 连接。
这里至少要满足几件事:
证书包含当前域名 证书由浏览器信任的 CA 签发 证书未过期 Nginx能读取证书和私钥 443 端口可访问 HTTP 能跳转到 HTTPS
证书只是链路中的一环
证书申请成功,但 Nginx 路径写错,HTTPS 仍然打不开;Nginx 配置正确,但安全组没放行 443,外部也访问不到;443 能访问,但证书域名不匹配,浏览器还是会警告。
阿里云搜索服务 数字证书管理服务 生产业务建议选择正式的,个人练手、测试,可以选择个人测试证书 我这里选择的是个人测试证书(毕竟免费么): 第一次建议先选一个明确域名,把流程跑通,知道流程是什么样子的; 通配符证书和自动续期后面再处理。 购买了之后,选择证书管理,查看已经购买的证书 一进来是证书 常见方式有云厂商证书服务、证书服务商控制台、 第一次操作时,使用云厂商控制台申请免费证书更直观 无论平台怎么变,核心都是验证一件事:你控制着这个域名 常见验证方式有 文件验证则要求把指定文件放到网站指定路径。 对还没正式部署网站的阶段来说, 按平台要求添加到 添加完之后可以用命令检查: 如果能看到平台要求的记录值,再回到证书平台继续验证。 验证失败时,不要急着重申证书,先检查 主机记录、记录类型、记录值、解析平台是否正确,以及 验证成功后,等待证书颁发机构(CA) ,完成 证书签发后,平台一般会提供 Nginx、Apache、IIS、Tomcat 等类型的证书包。 服务类型神什么,就选择对应的证书格式,例如,入口是 文件名可能不同,但核心通常是两类:证书文件和私钥文件。 私钥必须保护好。 不要提交到公开仓库,不要发到文章截图里,不要放进示例代码包。 如果怀疑私钥泄露,重新签发证书并替换旧证书。 安全为重 把证书放到服务器目录。前面全局 可以按域名分组: 创建目录: 如果 Compose 已经挂载: 那么 配置 可以先写基础版本: 真实项目要替换成自己的服务名和端口,并确保 如果暂时没有后端服务,也可以返回一句话, 用来验证证书和 443 是否正常。 检查重载 对上面修改后的配置文件,检查并重载 不要直接 如果提示证书文件不存在,检查容器内路径、挂载目录和文件权限。 进入容器确认文件目录: 检查通过后再进行重载: 证书配置完了,也部署了,进行测试,确认 首先云平台安全组要放行 TCP 443,系统防火墙也要放行。 使用 ufw: 再确认宿主机监听: 最后验证访问: HTTPS 应返回 200 或应用自己的响应; HTTP 应返回 301 或 308,并跳转到 HTTPS。 也可以打开浏览器访问,浏览器如果提示证书错误,重点检查证书是否过期、域名是否匹配、是否使用完整证书链、DNS 是否指向正确服务器。 常见问题主要有五类 1.证书域名不匹配,访问 2.容器内外路径混淆, 3.只配置 443,忘了 80 跳转 4.证书快过期才想起来续期 5.私钥泄露 从我的工作经历来看,最容易出问题的概率: 第二个 > 第三个 > 第四个 第一个和第五个出现的概率较小 手动申请和部署证书有助于理解流程,但长期维护会稍微麻烦一点。 后面如果有多个子域名,或者不想每次到期前手动处理,就需要通配符证书和自动续期。 下一篇继续写:通配符证书和 那一步会把 实际操作(阿里云为例)
购买证书

- 正式证书:适合生产环境、公司网站使用,安全性强、兼容性高,提供稳定性保障SLA。支持单域名、通配符、多域名,提供DV、OV、EV多种选择
- 个人测试证书:适合测试环境、个人开发者使用,价格实惠,仅支持单域名,无稳定性保障,每人每年20个免费证书额度
申请证书

待申请的状态,输入基本信息,验证邮箱、手机号,即可完成申请
Let’s Encrypt,以及 acme.sh、Certbot 这类 ACME 工具。域名验证
DNS 验证和文件验证。DNS 验证通常要求添加一条 TXT 或 CNAME 记录;DNS 验证更方便,只要能控制域名解析即可。DNS 解析里,然后等待生效。
nslookup -type=TXT _acme-challenge.blog.aicultiv.com
dig TXT _acme-challenge.blog.aicultiv.comDNS 是否已经生效。DNS 信息验证后签发证书。下载证书

Nginx,就下载 Nginx 类型。Nginx 通常应使用包含完整证书链的文件,例如 fullchain.pem 或平台提供的等价文件。重点提示
部署证书
Nginx 容器的目录是:/opt/coduty/nginx/
conf.d/
certs/
logs//opt/coduty/nginx/certs/blog.example.com/
fullchain.pem
privkey.pemmkdir -p /opt/coduty/nginx/certs/blog.example.com
volumes:
- ./certs:/etc/nginx/certs:roNginx 配置里要写容器内路径:/etc/nginx/certs/blog.example.com/fullchain.pem
/etc/nginx/certs/blog.example.com/privkey.pem
不要把宿主机路径写进容器内 Nginx 配置,这是容器化 Nginx 的经常出现的错误。Nginx 配置文件
Nginx,配置文件是:/opt/coduty/nginx/conf.d/blog.aicultiv.com.conf
server {
listen 80;
server_name blog.aicultiv.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name blog.aicultiv.com;
ssl_certificate /etc/nginx/certs/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/blog.example.com/privkey.pem;
location / {
proxy_pass http://blog-app:8000; # 这里要注意是 容器名称
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;
}
}blog-app:8000 只是示例,Nginx 容器能通过 Docker 网络访问它。return 200 "https is running\n";Nginx。reload,先执行测试:docker exec global-nginx nginx -t
docker exec -it global-nginx sh
ls -lh /etc/nginx/certs/blog.example.comdocker exec global-nginx nginx -s reload
nginx -t,再 reload”的习惯测试
443 端口可访问。sudo ufw allow 443/tcp
sudo ufw status verbosesudo ss -lntp | grep ':443'
curl -I https://blog.aicultiv.com
curl -I http://blog.aicultiv.com常见问题
www.example.com 不能使用只覆盖 blog.example.com 的证书Nginx 配置必须写容器内路径acme.sh,我如何解决多域名证书管理。HTTPS 从“配置一次”,推进到“适合长期自动维护”。
本文链接:https://kinber.cn/post/6771.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
