Let's Encrypt 证书申请及配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Let's Encrypt 证书申请及配置相关的知识,希望对你有一定的参考价值。

参考技术A

Let\'s Encrypt —— 是一个由非营利性组织 互联网安全研究小组 (ISRG)提供的免费、自动化和开放的证书颁发机构(CA),简单的说,就是为网站提供免费的 SSL/TLS 证书。

Let\'s Encrypt 生成证书的 工具 很多, certbot 是官方推荐的签发工具,也可以通过在线服务申请,例如:

在线一站式服务管理方便,但可能需要绑定业务,个人用户还是推荐通过工具生成证书。
这里推荐 acme.sh ,它不仅有详细的 中文文档 ,操作更为方便,还支持 Docker 。

以 root 用户为例

安装过程:

自动更新: acme.sh --upgrade --auto-upgrade
手动更新: acme.sh --upgrade
关闭更新: acme.sh --upgrade --auto-upgrade 0

验证域名所有权验证方式:HTTP 和 DNS

acme.sh 会自动生成验证文件,并放到站点的根目录,然后自动完成验证,最后自动删除文件。

nginx:自动从配置中获取站点的根目录

注:根据中国大陆工信部的规定,所有托管在中国大陆服务器上的网站均需要备案。

—— 站点如未备案,80 端口处于禁用状态,acme.sh 无法使用 HTTP 验证域名所有权。

优势:不需要服务器与公网 ip,只要配置 DNS 解析即可。
不足:必须配置 Automatic DNS API 才可以自动续签。

根据域名服务商,选择对应的 DNS API 。

阿里云: 控制台

创建 Accesskey

DNSPod: 控制台 (注:非腾讯云控制台)

创建 API Token

Wildcard 证书,目前只支持 DNS-01 验证方式。

生成的证书都在 home 目录下: ~/.acme.sh/

使用 --install-cert 命令

重启 Nginx 服务:

https://myssl.com

定时任务会自动更新

强制续签证书: acme.sh --renew -d mydomain.com --force

Let‘s Encrypt申请ssl证书

Let’s Encrypt

Let’s Encrypt是一个提供免费TLS认证的网站,超过2600w的网站都在使用。其可以配合nginx,为网站生成ssl证书,提供https访问。Let’s Encrypt的证书有效期为90天,可以搭配systemd定时任务,定时更新证书。

PS:本操作基于Centos8和python3

证书申请

  1. 安装epel源
$ sudo dnf install epel-release
  1. 安装certbot
$ sudo dnf install certbot python3-certbot-nginx

因为我用的nginx作为http服务器,如果是apache,安装apache的插件,如下:

$ sudo dnf install certbot python3-certbot-apache
  1. 申请证书
$ sudo certbot --nginx --nginx-server-root=/home/farm/nginx/conf certonly

PS:我安装的nginx目录在用户家目录下,需要将nginx放入环境变量,或者是建立一个软链接,保证nginx命令可以正常执行,我用的是建立软链接的方案

$ sudo ln -s /home/farm/nginx/sbin/nginx /usr/bin/nginx
  1. 证书生成

证书申请过程中,需要填写邮箱,和确认条款。就是上图标注1,2,3处。最后选择需要申请证书的域名,如果全部都生成,直接回车即可。

  1. 配置证书
#生成的证书都在/etc/letsencrypt/live/<domain>目录下,<domain>为申请的域名
在nginx.conf文件中添加以下配置
server {
    listen 443 ssl;
    ssl_certificate      /etc/letsencrypt/live/<domain>/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/<domain>/privkey.pem;
    proxy_pass http://127.0.0.1:8080  # 仅做示例
}
  1. 证书自动更新

更新证书脚本

$ vim renew_ssl.sh

#写入以下内容
$ certbot renew

创建systemd定时任务

a. 创建Service单元

$ cd /etc/systemd/system
$ sudo vim renew_ssl.service

写入以下内容:

[Unit]
Description=certbot renew

[Service]
ExecStart=/bin/bash /home/farm/nginx/sh/renew_ssl.sh

启动Service单元

$ sudo systemctl start renew_ssl.service

b. 创建Timer单元

$ cd /etc/systemd/system
$ sudo vim renew_ssl.timer

写入以下内容:

[Unit]
Description=run renew_ssl.sh every 12 hours
 
[Timer]
OnUnitActiveSec=43200s
Unit=renew_ssl.service

[Install]
WantedBy=multi-user.target

启动Timer单元

$ sudo systemctl daemon-reload
$ sudo systemctl enable renew_ssl.timer
$ sudo systemctl start renew_ssl.timer

以上是关于Let's Encrypt 证书申请及配置的主要内容,如果未能解决你的问题,请参考以下文章

免费 Https 证书(Let's Encrypt)申请与配置

实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

Let's Encrypt证书安装

centos+nginx申请Let's Encrypt 通配符HTTPS证书

申请Let's Encrypt免费SSL证书

Let's Encrypt 通配符证书申请