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

发表时间:2018-02-27 14:55 | 分类:Linux | 浏览:5,305 次

在网上寻找解决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/

本文标签:

本文链接:https://www.sijitao.net/2633.html

欢迎您在本博客中留下评论,如需转载原创文章请注明出处,谢谢!

一键脚本 博客历程 留言联系 文章归档 网站地图 谷歌地图
Copyright © 2010-2024 章郎虫博客 All Rights Reserved.