1. 首页
  2. 系统运维
  3. Linux

非80端口不支持Http验证域名签发let’s encrypt ssl证书

在网上寻找解决80端口问题的时候,发现Let’s Encrypt还可以通过验证DNS来签发证书,这里我用的是GitHub上开源的acme.sh程序。详细的使用方法可以查看WIKI。我的域名解析放在dnspod,正好支持,使用nginx举例。

安装acme.sh

acme不需要安装certbot,都是用shell脚本编写,功能强大。

git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh/
./acme.sh --install --home /root/jobs/acme --certhome /root/jobs/acme/cert_tmpdir

添加dnspod的token信息

首先登陆DNSPod,在“用户中心”——“安全设置”中为acme.sh添加独立的Token。

用ID和Token替换下面这个命令中的DNSPod的ID和DNSPod的Token。

echo -e "DP_Id=\"DNSPod的ID\"\nDP_Key=\"DNSPod的Token\"\n" \ >>/root/jobs/acme/account.conf

在运行acme.sh时会自动调取Token信息进行签发。

签发证书

例如:

/root/jobs/acme/acme.sh --issue --dns dns_dp -d mail.nbqykj.cn --force --debug

–force和–debug是可选项,可以一次为一个主域名和多个二级域名签发证书,无法签发通配符证书。

安装证书

上步签发的证书是在/root/jobs/acme/cert_tmpdir 临时目录里,不建议nginx或者apache直接使用该目录。而是复制到指定的固定目录,例如我的nginx目录:/usr/local/nginx/conf/ssl ;

例如:

/root/jobs/acme/acme.sh --installcert -d mail.nbqykj.cn --keypath /usr/local/nginx/conf/ssl/mail.nbqykj.cn.key --fullchainpath /usr/local/nginx/conf/ssl/mail.nbqykj.cn.cer

然后在nginx的网站配置文件中添加以下两行。

ssl_certificate ssl/mail.nbqykj.cn.cer ;
ssl_certificate_key ssl/mail.nbqykj.cn.key ;

重启nginx

service nginx force-reload

计划任务

默认acme.sh安装完成后会在当前用户下创建crontab,类似如下:

46 0 * * * "/root/jobs/acme"/acme.sh --cron --home "/root/jobs/acme" > /dev/null

我自己把这个计划任务改成上面的步骤了。
例如:

/root/jobs/acme/acme.sh --issue --dns dns_dp -d mail.nbqykj.cn
/root/jobs/acme/acme.sh --installcert -d mail.nbqykj.cn --keypath /usr/local/nginx/conf/ssl/mail.nbqykj.cn.key --fullchainpath /usr/local/nginx/conf/ssl/mail.nbqykj.cn.cer
/etc/init.d/nginx reload

 

参考:https://blog.atomur.com/2017-01-18/use-the-acme-sh-to-issue-the-letsencrypt-certificate-for-the-domain-name-without-80-port/

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code