一般的 SSL 安全证书签发服务都需要付费,且价格昂贵,不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署https 了!
Certbot是一个全功能、可扩展
的客户端,用于Let’s Encrypt CA(或任何其他使用ACME协议的CA ),它可以自动执行获取证书和配置web服务器以使用证书的任务。该客户端运行在基于Unix的操作系统上
Certbot是EFF加密整个互联网努力的一部分。web上的安全通信依赖于HTTPS,它要求使用数字证书,让浏览器验证Web服务器的身份(例如,这真的是google.com吗?).Web服务器从被称为证书颁发机构(ca)的可信第三方获得证书。Certbot是一个易于使用的客户端,它从Let’s Encrypt(由EFF、Mozilla和其他公司推出的开放认证机构)获取证书,并将其部署到web服务器。
任何经历过设置安全网站的麻烦的人都知道获取和维护证书是多么麻烦。Certbot和Let’s Encrypt可以自动消除这种痛苦,让您通过简单的命令打开和管理HTTPS。使用Certbot和Let’s Encrypt是免费的,所以不需要安排支付。
在大多数情况下,您需要对web服务器拥有root或管理员权限才能运行Certbot。
Certbot应该直接在你的网络服务器上运行,而不是在你的个人电脑上。如果您正在使用托管服务,并且不能直接访问您的web服务器,您可能无法使用Certbot。请向您的主机提供商咨询有关上传证书或使用由Let’s Encrypt颁发的证书的文档。
什么是证书?
公钥或数字证书(以前称为SSL证书)使用公钥和私钥来实现客户端程序(web浏览器、电子邮件客户端等)之间的安全通信。)和服务器通过加密的SSL(安全套接字层)或TLS(传输层安全性)连接。证书用于加密通信的初始阶段(安全密钥交换)和识别服务器。证书包括密钥信息、服务器标识信息和证书颁发者的数字签名。如果发起通信的软件信任颁发者,并且签名有效,则可以使用密钥与证书标识的服务器进行安全通信。使用证书是防止“中间人”攻击的好方法,在这种攻击中,在您和您认为正在对话的服务器之间的某个人能够插入他们自己的(有害)内容。
Certificates and Lineages
Certbot引入了沿袭的概念,沿袭是一个证书的所有版本的集合,再加上从更新到更新为该证书维护的Certbot配置信息。每当您续订证书时,Certbot都会保持相同的配置,除非您明确地更改它,例如通过添加或删除域。如果添加域,可以将它们添加到现有的沿袭中,也可以创建一个新的沿袭。
参考地址
certbot [子命令] [选项] [-d 域名] [-d 域名]
Certbot工具用于获取和安装HTTPS/TLS/SSL
证书。默认情况下,Certbot会尝试为本地网页服务器(如果不存在会默认安装一个到本地)获取并安装证书。最常用的子命令和选项如下:
获取, 安装, 更新证书
(默认) run:获取并安装证书到当前网页服务器;
certonly: 获取或更新证书,但是不安装;
renew : 更新已经获取但快过期的所有证书;
-d 域名列表:指定证书对应的域名列表,域名之间使用逗号分隔;
–apache:使用Apache插件进行身份认证和安装
–standalone:运行一个独立的网页服务器用于身份认证
–nginx:用Nginx插件进行身份认证和安装
–webroot:把身份认证文件放置在服务器的网页根目录下;
–manual: 使用交互式或脚本钩子的方式获取证书;
-n:非交互式运行;
–test-cert:从预交付服务器上获取测试证书
–dry-run:测试获取或更新证书,但是不存储到本地硬盘;
>证书管理
certificates:显示使用Certbot生成的所有证书的信息;
revoke 撤销证书(supply –cert-path);
delete 删除证书;
查看证书过期时间
certbot certificates
如果您处于脱机状态或者您的操作系统不提供软件包,您可以使用其他方法安装certbot。
大多数现代Linux发行版(基本上是任何使用systemd的发行版)都可以安装打包成snap的Certbot。快照适用于x86_64、ARMv7和ARMv8体系结构。Certbot snap提供了一种简单的方法来确保您拥有最新版本的Certbot,并预先配置了自动证书续订等功能。
您可以在https://certbot.eff.org/instructions上找到安装Certbot snap的说明,方法是选择服务器软件,然后在“System”下拉菜单中选择“snapd”。(无论您的操作系统是什么,您都应该选择“snapd”,因为我们的指令在所有系统中都是相同的。)
Docker是一种非常简单快捷的获取证书的方式。但是,这种操作模式无法安装证书或配置您的web服务器,因为我们的安装程序插件无法从Docker容器内部访问您的web服务器。
从您请求证书的域解析到的服务器上,安装Docker,然后发出如下所示的命令。如果您将Certbot与独立插件一起使用,您将需要通过在命令行中certbot/certbot之前包含类似-p 80:80或-p 443:443的内容,使它使用的端口可以从容器外部访问。
sudo docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot certonly
使用certonly命令运行Certbot将获得一个证书,并将其放在系统上的/etc/letsencrypt/live目录中。因为Certonly无法从Docker中安装证书,所以您必须按照web服务器提供商推荐的步骤手动安装证书。
在https://hub.docker.com/u/certbot上也有Certbot每个DNS插件的Docker映像,它们可以自动为流行的提供商通过DNS进行域验证。要使用certbot,只需将上面命令中的certbot/certbot替换为要使用的映像的名称。例如,要使用Certbot的亚马逊Route 53插件,你需要使用Certbot /dns-route53。您可能还需要添加标志到Certbot和/或挂载附加目录,以提供对DNS插件文档中指定的DNS API凭证的访问。
通过pip安装Certbot只在使用虚拟环境的情况下得到最大程度的支持。通过pip安装Certbot的说明可以在https://certbot.eff.org/instructions上找到,方法是选择服务器软件,然后在“系统”下拉菜单中选择“pip”
官网参考地址
1.登录到服务器
2.cd /root
[root@master ~]# echo | openssl s_client -servername aa.com -connect aa.com:443 2>/dev/null | openssl x509 -noout -dates //通过域名获取
notBefore=Jan 31 02:55:03 2022 GMT
notAfter=Feb 24 15:59:59 2023 GMT
[root@master ~]# openssl x509 -in q.aa.pem -noout -text | grep "Not"
Not Before: Feb 21 08:30:35 2022 GMT
Not After : May 22 08:30:34 2022 GMT //通过证书获取(5月22)
--certonly 表示采用验证模式,只会获取证书,不会为web服务器配置证书
--manual 表示插件(手动模式申请)
--preferred-challenges dns 表示采用DNS验证申请者合法性(是不是域名的管理者)
-d: 表示需要为那个域名申请证书,可以有多个。
--dry-run: 在实际申请/更新证书前进行测试,强烈推荐
--manual-auth-hook:在执行命令的时候调用一个 hook 文件
--manual-cleanup-hook:清除 DNS 添加的记录
--pre-hook: 前置钩子;可用来执行一些命令
--post-hook: 后置钩子;可用来执行一些命令
4.配置成功会显示具体位置,将两个文件合并为一个,下载
cat fullchain.pem privkey.pem | tee *.com.pem
5.上传到Haproxy,检查配置文件,确定没问题了以后,重启Haproxy
server{
listen 443 ssl;
# 域名,根据实际情况修改
server_name xxxxx.com;
# 公钥文件
ssl_certificate /etc/letsencrypt/live/xxxxx.com/fullchain.pem;
# 私钥文件
ssl_certificate_key /etc/letsencrypt/live/xxxxx.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
root /data/project/motovill-admin/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
配置文件
配置文件: /etc/letsencrypt/renewal/
证书文件源目录: /etc/letsencrypt/archive/
证书文件映射目录: /etc/letsencrypt/live/
【1】安装
cd /mnt/runtime
mkdir certbot-auto
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
【2】生成证书
./certbot-auto certonly -d *.domain.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
按提示添加txt记录,验证域名所有权
添加完成后,可进行本地检测:
[root@master named]# service named restart
nslookup -q=txt _acme-challenge.domain.com
查看返回结果与要求的值是否一致,如果一致,则继续操作。
最后生成的证书文件存放在:/etc/letsencrypt/live/域名目录下。
【3】手动续期证书
./certbot-auto renew --force-renew
【4】续期证书计划任务
# 即每月1日凌晨2点自动运行续期任务
crontab -e
0 2 1 * * /mnt/runtime/certbot-auto/certbot-auto renew --no-self-upgrade --renew-hook "nginx -s reload"
【5】常见问题
renew时提示: OCSP check failed for /etc/letsencrypt/archive/domain.com/cert1.pem (are we offline?)
原因是OCSP服务的域名DNS无法正常访问,可以修改本地/etc/hosts文件,手动增加一条解析:
23.32.3.72 ocsp.int-x3.letsencrypt.org
修改完成后,无需重启服务,再次renew即可
renew时提示: The manual plugin is not working(手动插件不工作)
红色字体的:PluginError(‘An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.’,)
原因是未明确提供域名的验证方式(--manual-auth-hook
)
可以重新执行生成证书的命令,到时候会提示证书已存在,选择是保存现状还是进行更新,选择更新即可重新通过DNS TXT记录的方式进行验证并且更新证书。
I am not afraid of thousands of people to stop, I am afraid to surrender.