1、先申请SSL证书:(假设域名是xxx.com

检查80端口是否被占用,如果被占用,以下操作会失败

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --standalone --email admin@xxx.com -d xxx.com -d www.xxx.com -d bbs.xxx.com

输入完以上指令后,然后一路确认,最后会在/etc/letsencrypt/live/xxx.com/下生成4个文件:

  • cert.pem - Apache服务器端证书
  • chain.pem - Apache根证书和中继证书
  • fullchain.pem - Nginx所需要ssl_certificate文件
  • privkey.pem - 安全证书KEY文件

由于我使用的事Nginx,所以我只需要时候最后两个文件即可。

2、配置nginx

新增配置文件ssl.xxx.conf

cd /etc/nginx/conf.d
vi ssl.xxx.conf

ssl.xxx.conf的内容如下:

  • server_name : 填写域名
  • ssl_certificate : ssl_certificate文件
  • ssl_certificate_key : privkey.pem
  • proxy_pass : 代理主机地址
server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  bbs.xxx.bbs;

    ssl_certificate "/etc/letsencrypt/live/xxx.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/xxx.com/privkey.pem";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.

    location / {
      proxy_pass http://localhost:8081;
    }
}

然后重启nginx:systemctl restart nginx

3、证书的有效期是90天,需要定期激活证书,下面是自动更新证书的脚本renew_certs.sh
脚本需要可执行权限:chmod +x renew_certs.sh

#!/bin/sh
if ! ./letsencrypt/letsencrypt-auto renew --force-renewal > /var/log/letsencrypt/renew.log 2>&1 ; then
    echo Automated renewal failed:
    cat /var/log/letsencrypt/renew.log
    exit 1
fi

使用crontab创建定时任务:
进入编辑状态:crontab -e
新增:0 3 1 * * ~/renew_certs.sh
这样设定后以后每月1号凌晨3点就会自动执行更新证书的脚本了。