使用letsencrypt证书实现https

/ 0评 / 0

今天介绍一下配置服务器的https,我这里使用的是letsencrypt的证书,letsencrypt的证书是服务端直接生成的,所以要使用命令行工具Certbot来配置,我是用的是CentOS和nginx,可以去官网查看安装命令 https://certbot.eff.org/。
我的安装命令

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

直接来获取证书

./certbot-auto certonly --webroot -w /var/www/duicode -d duicode.com -d www.duicode.com

这个命令会为 duicode.com 和 www.duicode.com 这两个域名生成一个证书,使用 --webroot 模式会在 /var/www/duicode 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 duicode.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求,但是有些时候我们的一些服务并没有根目录,这时候使用 --webroot 就走不通了。certbot 还有另外一种模式 --standalone , 这种模式不需要指定网站根目录,他会自动启用服务器的443端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。

./certbot-auto certonly --standalone -d duicode.com -d www.duicode.com

证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹
然后就可以配置证书了,修改nginx的配置文件,主要是监听 443 端口,启用 SSL,并配置 SSL 的证书路径(公钥,私钥的路径)

server {
        server_name duicode.com www.duicode.com;
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/duicode.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/duicode.com/privkey.pem;

        location / {
           proxy_pass http://127.0.0.1:3999;
           proxy_http_version 1.1;
           proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
        }
    }

#也可以做个301重定向
server {
        listen 80;
        server_name www.duicode.com;
        rewrite ^(.*) https://duicode.com$1 permanent;
}

Let's Encrypt 提供的证书只有90天的有效期,我们必须在证书到期之前,重新获取这些证书。

./certbot-auto renew

然而可能会报错,因为我们使用的是 standalone 模式,所以要关闭nginx才行,我这里做了个定时任务 certbot-auto-renew

15 2 * */2 * ~/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

--pre-hook 这个参数表示执行更新操作之前要做的事情。
--post-hook 这个参数表示执行更新操作完成后要做的事情。

启动这个定时任务

crontab certbot-auto-renew

这样就OK了。

评论已关闭。