Let’s Encrypt免费证书获取方法

一、Let’s Encrypt证书前置需求

  1. 域名所有者:Let’s Encrypt 是一个证书颁发机构(CA), 要从 Let’s Encrypt 获取网站域名的证书,必须证明对域名的实际控制权。
  2. ACME 协议软件 : 在Let’s Encrypt 使用 ACME 协议来验证对给定域名的控制权并颁发证书, 要从Let’s Encrypt 获得证书,需要选择一个要使用的 ACME 客户端 Certbot 、或者使用得最多的 acme.sh。

二、证书兼容性

参考来源:https://letsencrypt.org/zh-cn/docs/certificate-compatibility/

  1. 信任ISRG RootX1的平台
    ● Windows >= XP SP3 (如果自动 Root 证书更新没有手动禁用的话)
    ● macOS >= 10.12.1
    ● iOS >= 10 (不包括 iOS 9)
    ● iPhone 5 及更新的手机可以升级到 iOS 10 ,因此可以信任ISRG Root X1
    ● Android >= 7.1.1 (由于我们的特殊交互签名证书,安卓 >= 2.3.6 默认情况下可信任)
    ● Mozilla Firefox >= 50.0
    ● Ubuntu >= Precise Pangolin / 12.04(安装更新后)
    ● Debian >= jessie / 8 (安装更新后)
    ● Java 8 >= 8u141
    ● Java 7 >= 7u151
    ● NSS >= 3.26
    浏览器(Chrome、Safari、Edge、Opera) 一般都信任他们所运行于的操作系统的根证书。 Firefox 是例外:它有自己的根证书列表。 不久,Chrome的新版本将 也有自己的根证书列表。
  2. 信任DST Root CA X3但不信任ISRG Root X1的平台
    这些平台在2021年9月前可以使用, 但是现在不再验证 Let’s Encrypt 证书。
    ● macOS < 10.12.1
    ● iOS < 10
    ● Mozilla Firefox < 50
    ● Ubuntu >= intrepid / 8.10
    ● Debian >= squeeze / 6, < jessie /8
    ● Java 8 >= 8u101, < 8u141
    ● Java 7 >= 7u111, < 7u151
    ● NSS >= v3.11.9, < 3.26
    ● Amazon FireOS (Silk Browser) (版本范围未知)
    ● Cyanogen > v10 (添加 ISRG Root X1 信任的版本未知)
    ● Jolla Sailfish OS > v1.1.2.16 (添加 ISRG Root X1 信任的版本未知)
    ● Kindle > v3.4.1 (添加 ISRG Root X1 信任的版本未知)
    ● Blackberry >= 10.3.3 (添加 ISRG Root X1 信任的版本未知)
    ● 固件 >= 5.00 的 PS4 游戏机 (添加 ISRG Root X1 信任的版本未知)
  3. 已知不兼容的平台
    ● Blackberry < v10.3.3
    ● Android < v2.3.6
    ● Nintendo 3DS
    ● Windows XP SP3 之前的系统
    ○ 无法处理 SHA-2 签名的证书
    ● Java 7 < 7u111
    ● Java 8 < 8u101
    ● Windows Live Mail(2012 版邮件客户端,而非网页端邮件服务)
    ○ 无法处理不包含CRL的证书
    ● PS3 游戏机
    ● PS4 游戏机(固件版本 < 5.00 )

三、使用acme.sh生成证书

  1. acme.sh说明
    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书,普通用户和 root 用户都可以安装使用,安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中(acme.sh),自动创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
    acme.sh 实现了 acme 协议支持的所有验证协议, 一般有两种方式验证: http 和 dns 验证,dns的方式更契合我们的架构,所以采用dns方式,手动在域名上添加一条 txt 解析记录,验证域名所有权,好处是只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
    注意:证书生成后只有三个月的有效期,acme.sh会自动创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

  2. 安装acme.sh

#海外服务器
curl https://get.acme.sh | sh -s email=my@example.com
#国内服务器
git clone https://gitee.com/neilpang/acme.sh
#国内需要更改目录名
mv acme.sh .acme.sh

创建一个别名:

alias acme.sh=~/.acme.sh/acme.sh
  1. 更新acme.sh
    目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。
    升级 acme.sh 到最新版 :
./acme.sh --upgrade

开启自动升级:

./acme.sh --upgrade --auto-upgrade

关闭自动更新:

./acme.sh --upgrade --auto-upgrade  0
  1. 生成证书(以GoDaddy为例)

参考来源:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
先登录到使用DNS解析的账号, 生成api key和secret ,然后:

export GD_Key=""
export GD_Secret=""

设置let’s encrypt为默认ssl证书

./acme.sh --set-default-ca --server letsencrypt

生成证书:

./acme.sh --issue --dns dns_gd -d test.com -d www.test.com 

若使用阿里云,将以下红框内容替换即可:
在这里插入图片描述

四、安装证书

默认生成的证书都放在安装目录下: .acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件。 这里面的文件都是内部使用, 而且目录结构可能会变化。
正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,例如:

Apache example:

acme.sh --install-cert -d visbodyfit.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"

Nginx example:

mkdir -p /etc/nginx/acme.sh/visbod/
#实际执行时使用命令:
./acme.sh --install-cert -d visbody.com \
--cert-file      /etc/nginx/acme.sh/visbod/cert.pem \ 
--key-file       /etc/nginx/acme.sh/visbod/key.pem  \
--fullchain-file /etc/nginx/acme.sh/visbod/fullchain.pem \
--reloadcmd  "service nginx force-reload"
#官网给的命令:
acme.sh --install-cert -d visbodyfit.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

注意:Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.

acme.sh --info -d visbodyfit.com
 会输出如下内容:
DOMAIN_CONF=/root/.acme.sh/visbodyfit.com/visbodyfit.com.conf
Le_Domain=visbodyfit.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr  7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun  6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem

查看上传证书是否存在,然后点击“HTTPS配置”即可看到该证书能配置的域名:

五、更新证书

acme.sh在生成证书后会自动添加定时任务,目前证书在60天后会自动更新。
查看定时任务:

crontab  -l
 输出内容大致如下:
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

六、排错

参考文档:https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
使用acme.sh过程中如果出现错误,可以添加debug log分析:

acme.sh --issue  .....  --debug
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值