SSL 证书

SSL 证书

Let‘s Encrypt

  1. 安装cerbot。cerbot是let’s Encrypt推荐的管理客户端,可以自动续签

    1
    yum install certbot -y
  2. 生成证书

    1
    2
    3
    4
    5
    6
    7
    8
    #先停用nginx,再生成证书,
    sudo nignx -s stop

    # 不清楚自己网站根目录时这样生成、需要根据自己的域名修改
    certbot certonly --standalone -d domain.com -d www.domian.com

    #知道网站根目录时生成方式:这里的根目录是/var/www/domain 、需要根据自己的域名修改,
    certbot certonly --webroot -w /var/www/domain -d domain.com -d www.domain.com
  3. 证书就生成成功一般会放在/etc/letsencrypt/live目录内

  4. 配置nginx

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #将listen 80部分按自己的域名做如下修改,去掉location / 及 location /api/ 等部分
    server {
    listen 80;
    listen [::]:80;
    server_name www.domain.com domain.com;
    add_header Strict-Transport-Security max-age=15768000;
    return 301 https://$server_name$request_uri; #重定向到https
    }

    #增加一个listen 443,按自己域名做如下修改。将原listen 80内的 location / 及 location /api/ 等部分copy过来
    server {
    listen 443 ssl http2;
    server_name www.domain.com domain.com;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    root /var/www/domain;
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 60m;

    location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://nuxtapp; #反向代理nuxt
    }

    location /api/ {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    }

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
    }

  5. 自动续签。

Let’s Encrypt默认3个月过期,需要我们设置cerbot客户端,让其自动更新证书,这里需要用到 crontab

1
2
3
4
#终端输入 crontab -e
crontab -e
#输入i,进入插入模式,按如下格式写上更新命令,意思是每个月1号凌晨3点更新
0 0 3 * * certbot renew --force-renew --renew-hook "nginx -s reload"

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!