在无80/443端口情况下签出其他端口可用的let’s encrypt的HTTPS证书

2019年03月02日 运维 暂无评论 阅读 1,674 次

1. 序言

本教程使用certbot,使用dns-01验证签出let's encrypt的HTTPS ssl证书,供非443端口的HTTPS加密使用。本文所述方法无需开放80/443端口。

2. 原理

let's encrypt默认签发证书需要验证是否可以通过对应域名的80端口访问申请证书的服务器(http-01)。

国内ISP给部分家庭宽带分配了公网IP,但通常都会屏蔽80/443端口。因此,即使将域名指向了家中的服务器/NAS,由于80端口不通,也无法直接通过lets encrypt签出证书。

实际上通过验证域名所有权(dns-01)也可以签出ssl证书。实际上是随机生成一串字符,并要求用户更新至对应域名的特定子域名解析上(具体的,是更新类似——acme-challenge.abotay.com这样子域的TXT记录)。实际操作比较复杂,笔者也踩了不少雷,在此总结方法。

3. 签发操作

本文所述运行环境为 CentOS 7,有公网IP,域名NS服务商选用cloudflare实验通过。读者若与本文环境不同,请自行调整命令。

本教程分单次签发和自动续期签发两种。由于lets encrypt证书有效期为90天,如采用手动签发,需每三个月手动参照本教程续签证书。自动签发需要域名的NS服务商支持API方式修改域名指向(每次签发需修改一个子域名的TXT)。本教程按cloudflare为例介绍,操作较为复杂,请读者自行选择。

3.1 单次签发

安装certbot

yum install epel-release
yum install certbot

执行certbot

certbot certonly --manual --preferred-challenges dns -d mydomain.cmdgy02.com

提示是否愿意被记录IP

Are you OK with your IP being logged?

回答Y

提示更新如下DNS信息

Please deploy a DNS TXT record under the name
_acme-challenge.mydomain.cmdgy.com with the following value:
85fiZHk29R2eEnaGvXxbCEOsmn2XqXwqxElU66TJp7A

登录域名服务商后台,按提示新建对应域名的 TXT记录(_acme-challenge.mydomain.cmdgy.com)

85fiZHk29R2eEnaGvXxbCEOsmn2XqXwqxElU66TJp7A

按回车键继续,不出意外会提示成功。此时证书路径在

/etc/letsencrypt/live/www.cmdgy.com/

更新nginx或apache的配置文件即可。

3.2 多次自动签发

安装certbot的cloudflare插件

yum install python-pip
pip install certbot-dns-cloudflare

获取cloudflare的token,并写入/root/.secrets/cloudflare.ini

登录cloudflare后进入My Profile,token在页面底端可以生成。

本文来自聪明的桂圆cmdgy.com

配置文件格式如下:

dns_cloudflare_email = "mymail@cmdgy.com"
dns_cloudflare_api_key = "t4nfdddthisis5bd8fromcmdgycom6e"

修改token文件访问权限

chmod 700 /root/.secrets/cloudflare.ini

此步骤若不做,后续签发时会有警告。

使用certbot签发SSL证书

certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d www.cmdgy02.com

将cert写入nginx配置文件中(如使用Apache请对应修改)。

ssl_certificate /etc/letsencrypt/live/www.cmdgy.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.cmdgy.com/privkey.pem;

重启服务

systemctl restart nginx

      此时网站应该可以自由访问

 

再在crontab中定义每周执行

crontab -e

增加一行:

14 5 * * 5 /certbot renew --quiet --post-hook "systemctl restart nginx" > /dev/null 2>&1

 

给我留言

您必须 登录 才能发表留言!

站点定制:GY TECH. 网站设计:Ality
Copyright © 桂圆 TECH. 保留所有权利.  
耗时0.659秒执行了36次数据库检索
此破站已苟活2120天8小时10分40秒!
This stupid site has been alive for 2120 days 8 hours 10 minutes and 40 seconds!

用户登录