1
为了开发小程序,所以必须升级到https

什么是let's Encrypt

Let's EncryptISRG (Internet Security Research Group) 提供的一个免费、开放、自动化的证书签发服务。

下面介绍使用 Let's Encrypt 签发工具、自动续签以及在 nginx 上使用签发证书的方法。测试服务器的操作系统是centos7 ,使用 Let's Encrypt 官方推荐的 certbot 客户端以及 Webroot 验证方式。
具体有有以下几个步骤:

  • 1.下载 certbot
  • 2.配置nginx 以满足webroot 验证方式的需要
  • 3.使用certbot 签发证书
  • 4.配置nginx 以使用签证的证书

一.下载certbot

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

由于 Let's Encrypt 的有效期是 90 天,到期后我们需要对证书进行续签,因此每隔一段时间就需要使用这个工具,建议将这个工具下载到 /sbin 目录;

二.配置nginx 以满足webroot 验证方式的需要

在使用 certbot 之前,我们先要对 Nginx 进行配置,因为使用 webroot 方式,certbot 会在域名对应的根目录创建一个叫做.well-known 的隐藏文件夹,并且创建用于验证域名所有权的文件。而这个文件夹在证书签发的过程中,是需要被访问的。

假设我们我们要签发用于 api.baidu.com 这个域名的 SSL 证书,而这个域名的nginx配置文件在 /etc/www/nginx/conf.d/api.conf ,于是我们打开这个文件,并且在 server block 内加入下面的内容:

server {
        listen 80;
        server_name api.liaorusanshe.com;
        root /alidata1/www/api/public; //laravel 的目录
 
        localtion / {
                ...............
        }
 
        location ~ /.well-known {
                allow all;
        }
}

退出保存,平滑启动

nginx -s  reload

三. 使用certbot 签发证书

1. 创建存放配置文件的文件夹
 mkdir /etc/letsencrypt/configs
2. 编辑配置文件:
 vim /etc/letsencrypt/configs/api.baidu.com.conf

配置具体如下:

# 写你的域名和邮箱
domains = api.baidu.com
rsa-key-size = 2048
email = you-email@qq.com
text = True

# 网站路径
authenticator = webroot
webroot-path = /webroot  //你网站路径
3.创建证书
certbot-auto -c  /etc/letsencrypt/configs/api.baidu.com.conf certonly

##片刻之后就会,看到下面的内容就会成功
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/api.baidu.com/fullchain.pem
 ..... # 还有一大串

如果运行顺利,所需要的证书就已经生成好了。他们被放在了 /etc/letsencrypt/live/api.badiu.com/ 下:

$ ls /etc/letsencrypt/live/api.baidu.com/
//如下内容
cert.pem #server cert only
privkey.pem #private key
chain.pem #intermediates
fullchain.pem #server cert + intermediates

四.配置nginx 以使用签证的证书

更改/etc/nginx/conf.d/api.conf文件

server {
       listen 443;
       server_name api.baidu.com;
       root /webroot;
       ssl on;
       ssl_certificate /etc/letsencrypt/live/api.baidu.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/api.baidu.com/privkey.pem;

       location / {
               ...............
       }

       location ~ /.well-known {
               allow all;
       }
}

我们还要让访客在访问 80 端口的时候,跳转到 HTTPS ,于是还要在配置文件里面增加一个 Server Block ,修改完之后是这样的:

server {
        listen 80;
        server_name api.baidu.com;
        return 301 https://$host$request_uri;
}

server {
        listen 443;
        ssl on;
        server_name api.baidu.com;
        root /alidata1/www/api/public;
        
 
        ssl_certificate /etc/letsencrypt/live/api.baidu.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/api.baidu.com/privkey.pem;
 
        localtion / {
                ...............
        }
 
        location ~ /.well-known {
                allow all;
        }
}

重新启动nginx

nginx -s reload

如果到这一步了,那么恭喜你了,访问网站就会看到一把绿色的小锁

五.证书的自动续签

正如前文提到的,Let's Encrypt 证书的有效期只有 90 天,因此我们需要定期的对他进行续签,我们使用 cron 来设定计划任务

crontab -e

我们可以每周对证书进行一次续签,这对有效的证书是没有任何影响的,同时它会一次性续签所有的证书。我决定在每周一凌晨 3 点 30 分对证书进行续签,并且在 3 点 35 分重启一下Nginx ,因此要在 crontab 里面加入以下内容:

30 3 * * 1 /sbin/certbot-auto renew --quiet --no-self-upgrade
35 3 * * 1 /etc/init.d/nginx reload

到这里就是完成了所有的步骤了

参考文章

https://blog.guorenxi.com/43....
https://ksmx.me/letsencrypt-s...
最好使用
https://laravel-china.org/art...


soledad
888 声望35 粉丝

我们努力的付出想换来的是什么,我只想让自己过得快乐点