无80端口情况下使用 CertBot 申请SSL证书 并实现自动续期

443端口不知道是电信不想封还是怎么样,一直无需备案就能开启对外服务。而443端口就必须使用合法的 SSL 证书,合法的 SSL 证书很多,我一直在使用 letsencrypt 提供的SSL证书服务。但是 letsencrypt 的证书只有90天的有效期,必须在有效期内 renew,否则过期了只好重新申请了。申请 letsencrypt 证书网上一堆都是需要开放 80 端口才能申请,其实 CertBot 在以前就是支持 https 的方式申请证书。但是不知道什么原因放弃了. 现在另外一方法是用dns申请和更新. 我的域名是挂在dnspod下面的, 需要用到dnspod的接口去更新txt记录才能正常的更新证书.

安装certbot

centos 7

yum install epel-release

yum install certbot

 

ubuntu

可以先尝试执行sudo apt-get install certbot 看是否能安装. 如果提示找不到的话, 执行下面的命令后再尝试安装

sudo add-apt-repository -y ppa:certbot/certbot
sudo apt-get update

然后执行sudo apt-get install certbot 

 

DNS认证

letsencrypt支持使用DNS认证的方式来获取证书,这种方式需要在DNS里面添加TXT记录来证明域名是你自己的。

这种方式只能使用certonly功能,因此安装时需要自己修改相应的服务器配置,无法让certbot帮忙修改。

只需要运行一下命令即可,

1
sudo certbot certonly --manual --preferred-challenge dns -d <你的域名>

 

然后首先会告知你会记录你的IP,选择Y,接着会出现一个提示,要你把_acme-challenge.<你的域名>设置成TXT记录,值也会写出来,设置好以后等待生效回车即可。

成功以后,就会告诉你证书路径,只需要替换掉服务器的配置里面的证书即可。

 

证书更新

使用dns申请的证书是没办法直接使用certbot renew来更新证书的. 幸亏 cerbot 提供了一个 manual-auth-hook hook,什么意思呢?可以编写一个脚本,由这个脚本来先完成 DNS 验证,然后再进行 renew。对应的脚本会自动添加 DNS 记录,从而完成 DNS 校验,并自动 renew 证书。写了个脚本进行更新au.sh, 代码如下:

echo "recode:"$CERTBOT_VALIDATION

curl -k https://dnsapi.cn/Record.Modify -d "login_email=${ACCOUNT}&login_password=${PASSWORD}&domain_id=${DOMAIN_ID}&record_id=${REC_BBS}&sub_domain=_acme-challenge.${RECORD}&record_line=默认&record_type=TXT&value=$CERTBOT_VALIDATION"

sleep 20

关于如何查询domain_id 和record_id 

#获得域名id
#curl -k https://dnsapi.cn/Domain.List -d "login_email=${ACCOUNT}&login_password=${PASSWORD}"
#获得域名id下的记录列表
#curl -k https://dnsapi.cn/Record.List -d "login_email=${ACCOUNT}&login_password=${PASSWORD}&domain_id=${DOMAIN_ID}"

测试

certbot renew --manual-auth-hook /root/au.sh --dry-run

重要提醒:为避免遇到操作次数的限制,加入 dry-run 参数,能够避免操作限制,等执行无误后,再进行真实的renew 操作。

出现以上信息的时候就表示成功了.

然后加到crontab里面

30 0 * * 1 certbot renew --manual-auth-hook /root/au.sh

表示每周一凌晨0点30分会尝试更新证书.

 

感谢以下3位作者提供的参考:

https://www.orzorc.com/201807/get-cert-by-letsencrypt-dns-challenge/

https://www.jishux.com/p/6be2ce6781c16ee7

https://blog.neroxps.cn/2017/10/19/certbot-nginx-renew/

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Docker安装Nginx并配置SSL证书的步骤如下: 1. 准备SSL证书:根据不同的云服务商,证书文件的后缀可能有所不同。腾讯云的证书文件后缀为.crt和.key,阿里云的证书文件后缀为.pem和.key。确保证书文件正确并可用。 2. 下载最新的Nginx镜像:使用以下命令下载最新的Nginx镜像: ``` docker pull nginx ``` 3. 创建目录:创建几个目录,用于挂载Nginx容器内的配置文件和日志文件。使用以下命令创建目录: ``` mkdir -p /usr/local/nginx/{conf,html,logs,ssl} ``` 4. 启动一个Nginx临时容器:使用以下命令启动一个Nginx临时容器,并将配置文件复制到主机上: ``` docker run --name nginx-temp -d nginx docker cp nginx-temp:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf docker rm -f nginx-temp ``` 5. 上传SSL证书:将SSL证书上传到服务器的指定目录,例如将证书文件复制到/usr/local/nginx/ssl目录下。 6. 修改nginx.conf配置文件:编辑/usr/local/nginx/conf/nginx.conf文件,配置SSL证书的路径。确保路径是在容器内的地址,而不是主机的地址。 7. 正式启动Nginx:使用以下命令启动Nginx容器,并将挂载目录和端口映射配置好: ``` docker run --name nginx -p 80:80 -p 443:443 \ -v /usr/local/nginx/html:/usr/share/nginx/html \ -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /usr/local/nginx/conf.d:/etc/nginx/conf.d \ -v /usr/local/nginx/logs:/var/log/nginx \ -v /usr/local/nginx/ssl:/etc/nginx/ssl \ --privileged=true -d --restart=always nginx ``` 8. 检查Nginx是否成功启动:使用以下命令检查Nginx容器是否成功启动: ``` docker ps ``` 以上是使用Docker安装Nginx并配置SSL证书的步骤。请根据实际情况进行操作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [docker安装nginx并配置ssl证书](https://blog.csdn.net/LuoHuaX/article/details/127320361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值