前言

网站弄了都快一年了都没有申请SSL证书,这次申请一下。主要是问GPT的流程。

Let’s Encrypt +certbot 实现申请多个免费的证书并且自动续期。

但是写完之后感觉好像就么一点东西真的有写的必要嘛... 不过还是留着吧,方便以后重新申请。

步骤

申请证书

首先是在服务器上安装cerbot(因为之前没装)

apt update
apt install certbot python3-certbot-nginx

# 不过后面因为报openSSL的错,说是certbot版本太旧了,通过下面的方式升级版本
apt install snapd
apt remove certbot python3-certbot-nginx
snap install core; sudo snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

然后是为所有域名申请证书(如果以后有新增的话需要重新申请)

# 其中certonly确保certbot不自动修改nginx的配置文件,自己手动修改
# deploy-hook确保证书续期之后重新加载
certbot certonly --nginx \
  -d lxblxb.top \
  -d blog.lxblxb.top \
  -d git.lxblxb.top \
  -d gpus.lxblxb.top \
  -d git402.lxblxb.top \
  --deploy-hook "systemctl reload nginx"

修改Nginx配置

之后是手动的修改一下nginx的配置文件,在/etc/nginx/sites-available/default ,在改之前记得先备份一个。

主要有两个需要修改的地方:

  1. 将原来的HTTP映射到HTTPS。

  2. HTTPS的设置。

其中第一步的设置如下:

# lxblxb.top
server {
    listen 80;
    listen [::]:80;
    server_name lxblxb.top;
    return 301 https://lxblxb.top$request_uri;
}

# blog.lxblxb.top
server {
    listen 80;
    listen [::]:80;
    server_name blog.lxblxb.top;
    return 301 https://blog.lxblxb.top$request_uri;
}

其他网址以此类推,即监听80端口,将其重定向到对应https的网址。

第二步的设置如下:

# lxblxb.top
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name lxblxb.top;

    ssl_certificate /etc/letsencrypt/live/lxblxb.top/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lxblxb.top/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 1024m;

    location / {
        proxy_pass http://lxb_home;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# blog.lxblxb.top
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name blog.lxblxb.top;

    ssl_certificate /etc/letsencrypt/live/lxblxb.top/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lxblxb.top/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 1024m;

    location / {
        proxy_pass http://halo;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

其他的也是以此类推,其中四行ssl相关的配置就是在设置证书的路径。

验证

certbot renew --dry-run

不报错的话就没问题了(一开始报了一次错,但是后面重新执行一次就没了)