跳至主要內容

ssl证书

大约 3 分钟

ssl证书

建议使用acme.sh

# 如果采用standalone,需要先安装socat以支持
apt install socat
# 安装
curl https://get.acme.sh | sh -s email=my@example.com
# 如果80端口空闲,则直接生成,记得替换mydomain.com
acme.sh --issue -d mydomain.com --standalone

它生成了几个文件,其中3个是证书文件,一个是证书密钥,fullchain包含了另外2个证书文件

对于nginx可以这样填

server {
    listen 443 ssl;
    server_name mydomain.com;

    ssl_certificate /root/.acme.sh/mydomain.com_ecc/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/mydomain.com_ecc/mydomain.com.key;

  location / {
    proxy_pass https://localhost:5173;
    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;

    // 如果要支持wss
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

}
可以使用 certbot 获得免费的 SSL 证书
sudo apt install certbot

这个命令将列出所有的证书,包括其域名、到期日期、证书路径等信息。

certbot certificates

生成证书,有效期三个月,你可以在快到期时重新生成证书,记得替换域名

sudo systemctl stop nginx
certbot certonly --rsa-key-size 2048 --standalone --agree-tos -d yourdomainname.info
sudo systemctl start nginx

或者

certbot certonly --rsa-key-size 2048 --nginx --agree-tos -d yourdomainname.info

如果想在证书到期或者出现其它问题时接收通知,可以设置邮件地址--no-eff-email --email user@yourdomainname.info

GPT给出的参数说明
  • certonly:指示 Certbot 仅生成 SSL/TLS 证书,并不会自动安装或配置任何 Web 服务器软件。
  • --rsa-key-size 2048:指定证书的 RSA 密钥大小为 2048 位。较大的密钥通常更安全,但会对性能产生一定影响。
  • --standalone:指示 Certbot 使用独立模式进行验证。在这种模式下,Certbot 将启动自己的 Web 服务器以验证您的域名,并在验证完成后关闭该服务器。请注意,这意味着您的 Web 服务器必须在证书更新期间停止,以避免端口冲突。
    • 注:如果在使用 nginx,可以不使用--standalone,而使用--nginx来告诉 certbot 使用 nginx 插件
  • --agree-tos:指示您同意 Let's Encrypt 的服务条款。
  • --no-eff-email:指示您不希望接收来自 Let's Encrypt 的效率改进电子邮件。
  • --email user@yourdomainname.info:指定您的电子邮件地址,以便在证书到期或其他问题时接收通知。
  • -d yourdomainname.info:指定您要为其生成 SSL/TLS 证书的主要域名。如果您想要为多个域名生成证书,则可以在 -d 参数后列出这些域名,中间用空格分隔。

在网页上打开https://yourdomainname.info:8448应该能访问了

设置自动更新证书

首先

sudo certbot renew --nginx --dry-run
  • --nginx表示使用 nginx 插件进行更新
    • apt install python3-certbot-nginx

这将执行一个模拟运行,以确保在实际更新证书之前,一切都可以正常工作。

sudo crontab -e

在末尾添加以下行,这将在每天3:30检测证书是否可以更新,如果离过期不到30天,更新证书

30 3 * * * certbot renew --nginx --quiet --post-hook "systemctl reload nginx"
  • --quiet 参数使 Certbot 在执行时不产生任何输出
  • --post-hook 参数指定在成功更新证书后重新加载 Nginx。
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.0.0-alpha.10