Let's Encrypt 是一个公共且免费SSL的项目,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,其因“让所有人都能容易、自动、免费的获得TLS证书”的理念被逐渐被广大用户传播和使用。

因其“容易”的特点,我们不需要太多设置就可以直接上手使用(一切的繁琐配置都是耍流氓!)

certbot是EFF基金会推荐使用的一款Let's Encrypt客户端,certbot提供从证书获-证书安装-web服务器的一条龙服务

安装certbot:

debian/ubuntu:

1、apt安装:


& sudo apt install certbot

如果使用apache,安装如下certbot插件
& sudo apt install python3-certbot-apache

如果使用nginx安装如下certbot插件
& sudo apt install python3-certbot-nginx


2、推荐snap安装(适合所有支持snap商店的linux系统):

更新snap:


sudo snap install core; sudo snap refresh core


安装:


sudo snap install certbot --classic


创建软链:


sudo ln -s /snap/bin/certbot /usr/bin/certbot


3、生成nginx证书:

运行此命令以获取证书并让 Certbot 自动编辑 nginx 配置以提供服务,只需一步即可打开 HTTPS 访问。


sudo certbot --nginx


生成Apache证书:


sudo certbot --apache


如果运行正常的话,会提示输入邮箱

邮箱输入后会列出服务器上配置的域名

按编号依次输入,或者留空选择全部

4、如果只想获取证书并手动配置:


sudo certbot certonly --nginx


5、指定web路径和域名:


sudo certbot certonly --webroot -w <你的web根目录> -d <你的域名>


生成的证书会被放到/etc/letsencrypt/live/<你的域名>

使用该方法,你必须确保这个域名属于你,并且你的域名在当前服务器中的80或者443端口可访问性。

否则,你会看到如下错误:


& sudo certbot certonly --webroot -w /var/www/html/test -d www.csdn.net


Challenge failed for domain www.csdn.net
IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: www.csdn.net
   Type:   unauthorized
   Detail: Invalid response from
   
   [39.106.226.142]: 404

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.


6、关于自动续订:

Certbot 软件包带有一个 cron 作业或 systemd 计时器,可在证书到期之前自动更新您的证书。除非您更改配置,否则您无需再次运行 Certbot。您可以通过运行以下命令来测试证书的自动续订:


sudo certbot renew --dry-run


7、更新 certbot 的命令安装在以下位置之一:

  • /etc/crontab/
  • /etc/cron.*/*
  • systemctl list-timers