前言
我使用的是腾讯云的3个月免费域名,每次到3个月我都要手动申请SSL 证书更换,很多次都忘记确保网站安全至关重要。SSL证书为网站提供了一个安全层,保护访问者免受数据泄露的风险。1panel是一款优秀的Linux控制面板软件,它内置了Let’s Encrypt SSL证书的申请和续期功能,使用Cloudflare的DNS服务可以方便地自动获取和续期证书。本文将记录如何在Cloudflare账户中创建一个新的 API Token来申请SSL证书,并解决使用global api key导致的区域错误。
先决条件
在开始之前,请确保你已经有一个Cloudflare账户,并且你的网站已经托管到Cloudflare中。
此外,需要在1Panel中创建一个ACME账户,这是申请SSL证书的必要步骤。
创建ACME账户
打开1panel控制面板 - 找到- 证书 - 创建ACME账户,选择算法RSA2048,“邮箱”格式对了就行,账户类型保持默认Let’s Encrypt。
创建Cloudflare API Token
当你创建了ACME账户后,现在需要在Cloudflare中创建一个API Token。这个Token将允许1Panel访问你的Cloudflare DNS设置,以验证你的域名所有权。
登录到你的Cloudflare账户。
在右上角转到“我的个人资料” > “API令牌” > “创建令牌”。
找到第一行“API 令牌模板”中的“编辑区域 DNS”模板,点击使用模板。
在编辑模板中找到“区域资源”,选择你的域。
点击“继续以显示摘要“,继续”创建令牌“
保存生成的Token,稍后在1Panel中会用到。
在1Panel中添加DNS账户
接下来,需要在1Panel中添加你的Cloudflare DNS账户。
登录到1Panel。
导航到“证书”,“DNS账户”部分。
点击“创建账户”,类型选择“Cloudflare”。
输入你的Cloudflare邮箱和刚才创建的API Token。
确认保存,像下面这样:
申请SSL证书
可以开始申请SSL证书了。这里要选择 RSA2048 的密钥算法,和刚刚创建ACME账户的时候算法是一样的.
1Panel将自动处理DNS验证,并在验证完成后为你的网站安装SSL证书。如果一切顺利,你将看到提示:证书成功!
下载证书
我使用的是Nginx 把下载的证书导入到nginx里面运行。
Nginx 配置文件
# HTTP → HTTPS 强制跳转
server {
listen 80;
server_name 你的证书域名;
return 301 https://$host$request_uri;
}
# HTTPS 代理服务
server {
listen 443 ssl http2;
server_name 你的证书域名;
# SSL 证书配置(使用 PEM 格式)
ssl_certificate /etc/nginx/certs/fullchain.pem; # 证书链文件
ssl_certificate_key /etc/nginx/certs/privkey.pem; # 私钥文件
# SSL 优化配置
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
# 现代加密协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# HSTS 安全增强
add_header Strict-Transport-Security "max-age=63072000" always;
# 代理配置
location / {
proxy_pass http://你服务器的公网IP:端口;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50m;
}
}