# certbot操作指南 **一个免费SSL证书获取工具** PS:如果是单机的话,不要使用docker来运行nginx,否则会为certbot的操作会增加复杂度。 ## 前言 1. certbot是一个SSL证书(Let‘s Encrpt)申请工具,免费的SSL证书,每90天需要自己续期(可自动化),支持泛域名证书的申请 2. 如果要申请泛证书(例:*.zhixinghe1.top),需要使用DNS的验证方式,这个国内域名商的验证方式比较麻烦,需要自己手动操作或者找插件 3. 如果不熟悉操作,先加上--dry-run参数在测试环境中实操一下,再正式申请,否则失败次数过多,会有一段时间禁止申请 5. 如果同时操作申请多个域名(精准域名),也是只会生成一个SSL证书 5. 使用nginx插件的话,能够自动配置nginx,注:--dry-run在该情况下无法使用 6. 使用nginx插件的话,nginx必须能狗正常操作,certbot才能正常执行 ## 常用命令 ```shell # 查看主机中的证书信息 certbot certificates # 证书申请,--dry-run 即是测试环境,-a manual 交互式申请 certbot certonly -a manual --dry-run # 证书申请,使用nginx插件,--dry-run在该情况下无法使用 certbot --nginx # 从证书颁发机构撤回SSL证书,交互模式中选择同步删除本地机器中的证书,如果错过了,需要使用delete指令删除 # 证书名称指的是certbot certificates中的Certificate Name cerbot revoke --cert-name 证书名称 # 从本地机器中删除证书,但是不会从证书颁发机构撤回SSL证书 # 没有任何参数,会进入交互模式 certbot delete # 证书续期(可以把本机所有的都续期一次) certbot renew --dry-run ``` ## 申请步骤 1. 安装certbot 2. 执行证书申请命令,见常用指令。 3. 按交互界面往下操作 4. 如果是申请的精准域名,则按提示操作即可 5. 如果申请的是泛域名,需要进自己的域名供应商里的域名解析里,按格式把certbot提供的字符串加入到解析中 ![](certbot%E6%8C%87%E5%8D%97.assets/certbot%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7%E8%A6%81%E6%B1%82%E6%B7%BB%E5%8A%A0DNS%E8%AE%B0%E5%BD%95%E8%A7%A3%E6%9E%90-1733461524143.png) ![](certbot%E6%8C%87%E5%8D%97.assets/%E5%9F%9F%E5%90%8D%E4%BE%9B%E5%BA%94%E5%95%86DNS%E8%A7%A3%E6%9E%90.png) 6. 在nginx需要创建一个指定访问路径的文件,并放入certbot工具提供的字符串,供certbot验证 ![](certbot%E6%8C%87%E5%8D%97.assets/certbot%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7%E8%A6%81%E6%B1%82%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6%E8%AE%B0%E5%BD%95.png) 在nginx中通过配置一个文件路径,并把内容放到文件中即可 ![](certbot%E6%8C%87%E5%8D%97.assets/certbot%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7%E8%A6%81%E6%B1%82%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6%E8%AE%B0%E5%BD%95-02.png) ![](certbot%E6%8C%87%E5%8D%97.assets/certbot%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7%E8%A6%81%E6%B1%82%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6%E8%AE%B0%E5%BD%95-03.png) 7. 证书申请成功后,nginx的SSL证书配置,如果是泛域名的SSL证书,可以在http块中直接使用SSL全局指令直接配置,否则需要自己一个个配置 ```shell http { ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; } ``` ## nginx插件的使用 1. 如果nginx的配置**conf.d文件夹**中没有default.conf的话,那么执行中可能没有输入待申请域名的选项。 2. 如果nginx的配置**conf.d文件夹**中有相关域名的配置的话,那么执行中可能没有输入待申请域名的选项,取而代之的是直接询问那个nginx中已配置域名需要启用SSL。 ![](certbot%E6%8C%87%E5%8D%97.assets/certbot%E7%9A%84nginx%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8.png) ### 自动续期 通过添加定时任务来自动对证书进行续期,每天0点、12点执行一次续期任务,并把信息输出到指定目录 ```shell # 编辑定时任务 crontab -e # 查看定时任务 crontab -l # 把要执行任务的写入crontab中 0 0,12 * * * /usr/bin/certbot renew --renew-hook "/usr/sbin/nginx -s reload" >> /home/zkpk/certbot-renew.log 2>&1 ``` 说明:renew只能,只有快要过期的证书才会进行续期,如果加了参数 --force-renew则不考虑时间直接强制续期 ## 参考 * [Let's Encrypt 手动模式:泛域名 SSL 证书的免费解决方案](https://juejin.cn/post/6942896425738960926) * [nginx配置静态文件 通过url访问](https://www.cnblogs.com/OneSeting/p/15525402.html) * [docker部署certbot与nginx来获取ssl证书添加https及自动更新](https://www.cnblogs.com/vishun/p/15746849.html) * [Nginx 通过 certbot 为网站自动配置 SSL 证书并续期](https://www.cnblogs.com/wzlinux/p/11188419.html)