Letsencrypt 创建免费HTTPS证书

操作系统:Ubuntu 18.04
代理服务器:nginx

Let’s Encrypt 简介

如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let’s Encrypt 就是一个 CA。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let’s Encrypt + Nginx 来让网站升级到HTTPS。

#Certbot 简介
Certbot 是Let’s Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let’s Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的。

安装证书

1.安装Certbot客户端

sudo apt-get update
sudo apt-get install certbot

##2.获取证书

certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

这个命令会为 example.comwww.example.com 这两个域名生成一个证书,使用 --webroot 模式会在 /var/www/example 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求,

但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 --webroot 就走不通了。certbot 还有另外一种模式 --standalone , 这种模式不需要指定网站根目录,他会自动启用服务器的443端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。

certbot certonly --standalone -d example.com -d www.example.com

证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。
这时候我们的第一生成证书已经完成了,接下来就是配置我们的web服务器,启用HTTPS。

#3.Nginx 配置启用 HTTPS
这里贴一下我的Nginx配置

server{
    listen 80;
    server_name test.api.zhengdaoyixing.com;
    rewrite ^/(.*) https://test.api.zhengdaoyixing.com/$1 permanent;
}
server {
        server_name test.api.zhengdaoyixing.com;
        listen 443;
        ssl on;
        underscores_in_headers on;
        ssl_certificate /etc/letsencrypt/live/test.api.zhengdaoyixing.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/test.api.zhengdaoyixing.com/privkey.pem;
        location / {
           proxy_pass http://127.0.0.1:9001;
           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;
        }

主要是监听 443 端口,80端口自动转发443端口,启用 SSL,并配置 SSL 的证书路径(公钥,私钥的路径)。

#4.自动更新 SSL 证书

配置完这些过后,我们的工作还没有完成。 Let’s Encrypt 提供的证书只有90天的有效期,我们必须在证书到期之前,重新获取这些证书,certbot 给我们提供了一个很方便的命令,那就是 certbot renew。
通过这个命令,他会自动检查系统内的证书,并且自动更新这些证书。
我们可以运行这个命令测试一下

certbot renew --dry-run

运行的时候可能出现出现了错误,生成证书的时候如果使用 --standalone 模式,验证域名的时候,需要启用443端口,这个错误的意思就是要启用的端口已经被占用了。 这时候必须把nginx先关掉,才可以成功。
证书是90天才过期,我们只需要在过期之前执行更新操作就可以了。 这件事情就可以直接交给定时任务来完成,执行 corntab -e ,输入如下命令每个月四点半执行更新证书操作

30 4 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
  • –pre-hook 这个参数表示执行更新操作之前要做的事情,因为使用 –standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
  • –post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用

至此,整个网站升级到HTTPS就完成了。 总结一下我们需要做什么:

  • 1.获取Let’s Encrypt 免费证书
  • 2.配置Nginx开启HTTPS
  • 3.定时刷新证书

#5.letsencrypt 常见问题

1.certbot自动更新时间期限

当certbot执行自动更新证书操作时,会自动监测**/etc/letsencrypt/renewal**目录下面的所有配置文件(.conf结尾的文件),文件内容如下所示:

# renew_before_expiry = 30 days
version = 0.26.1
archive_dir = /etc/letsencrypt/archive/test.api.zhengdaoyixing.com
cert = /etc/letsencrypt/live/test.api.zhengdaoyixing.com/cert.pem
privkey = /etc/letsencrypt/live/test.api.zhengdaoyixing.com/privkey.pem
chain = /etc/letsencrypt/live/test.api.zhengdaoyixing.com/chain.pem
fullchain = /etc/letsencrypt/live/test.api.zhengdaoyixing.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
account = 0c8449779d2546c6fa2f19383d2947de
server = https://acme-v02.api.letsencrypt.org/directory
authenticator = standalone
post_hook = service nginx start
pre_hook = service nginx stop

如果想自定义在证书过期前多久certbot进行更新操作,可以去掉renew_before_expiry注释并自定义时间.

#6.参考
Let’s Encrypt 使用教程
Certbot centosrhel7-nginx
Let’s Encrypt getting-startd
Archlinux cron
Nginx configuring-https-servers

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值