原文出处: 林泽浩
本文利用 HTTP 和 DNS 两种校验方法对 Docker 下 linuxserver/letsencrypt 项目举办了实践。生成SpringBoot可用证书,利用 Nginx 的 htpasswd 来对网站举办暗码掩护,并测试利用 fail2ban 防备 htpasswd 被暴力破解。全文基于 linuxserver/letsencrypt 文档及其他官方资料,按照作者实践举办具体理会和记录。
1. 先容
1.0 linuxserver/letsencrypt
这个容器配置了一个 Nginx 处事器,支持 PHP 的反向署理和一个内置的 letsencrypt 客户端,可以自动化生成或更新 SSL 处事器证书。它还包括用于防止入侵的 fail2ban。
1.1 利用
docker create \
--cap-add=NET_ADMIN \
--name=letsencrypt \
-v <path to data>:/config \
-e PGID=<gid> -e PUID=<uid> \
-e EMAIL=<email> \
-e URL=<url> \
-e SUBDOMAINS=<subdomains> \
-e VALIDATION=<method> \
-p 80:80 -p 443:443 \
-e TZ=<timezone> \
linuxserver/letsencrypt
1.2 参数
–cap-add=NET_ADMIN cap-add:即 Add Linux capabilities 添加 Linux 内核本领。这里详细添加的本领是答允执行网络打点任务。这是因为 fail2ban 需要修改 iptables
-p 80 -p 443:端口
-v /config:包罗 webroot 在内的所有设置文件都生存在此处
-e URL:顶级域名(完全拥有则如:“customdomain.com”,动态 DNS 则如 “customsubdomain.ddnsprovider.com” )
-e SUBDOMAINS:证书包围的子域名 (逗号脱离,无空格) .如 www,ftp,cloud.对付通配符证书, 请将此明晰地配置为通配符 (通配符证书只答允通过dns方法验证)
-e VALIDATION:letsencrypt验证要领,选项是 http、tls-sni 可能 DNS
差异校验方法的区别:
HTTP 校验:需要利用到80端口,故宿主机80端口应该转发到容器的80端口
tls-sni 校验:需要利用到443端口,故宿主机443端口应该转发到容器的443端口(留意:由于安详裂痕,letsencrypt 禁用了 tls-sni 验证,利用该方法会报错:Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA)
DNS 验证:需要配置 DNSPLUGIN 变量(不是所有的DNS处事商都支持),而且需要在 /config/dns-conf 文件夹下输入根据到相应的 ini 文件里,当无法通过端口验证时可利用这种要领验证
-e PGID 配置 GroupID
-e PUID 配置 UserID
-e TZ
- 时区 如 America/New_York:上海时区为Asia/Shanghai
通过指定用户ID和所属群的ID来制止数据卷挂载(-v)时容器和宿主机直接大概发生的权限问题。最好让挂载的数据卷目次的拥有者和指定的用户统一。
别的,需要留意:不能指定root用户(即PGID=0,PUID=0),不然会一直报错(但不影响利用)。
#宿主机root用户情况下利用例子(非官方,仅供参考)
#建设要挂载的目次,此时该目次属root用户和root组
mkdir /opt/letsencrypt
#建设docker用户(默认会顺带新建同名Group)
useradd dockeruser
#修改文件夹归属(R代表递归操纵,文件夹下的也一并修改)
chown -R dockeruser:dockeruser /opt/letsencrypt
#查察dockeruser的用户id和群id
id dockeruser
可选配置:
-e DNSPLUGIN:假如 VALIDATION 配置为 DNS 则此项必选。选项有 cloudflare、cloudxns、digitalocean、dnsimple、dnsmadeeasy、google、luadns、nsone、rfc2136 和 route53。还需要在 /config/dns-conf 文件夹下输入根据到相应的 ini 文件里。这里推荐利用 cloudflare,免费并且好用.
利用 Cloudflare 处事的话应确保配置为 dns only 而非 dns + proxy(事实上 Cloudflare 的 proxy 已经提供免费自动 SSL 处事了,也就没有本文的须要)
Google DNS 插件的利用工具是企业付费产物“Google Cloud DNS”而非“Google Domains DNS”
-e EMAIL:您的证书注册和通知的电子邮件地点
-e DHLEVEL:dhparams 位值(默认值= 2048,可配置为1024或4096)
-p 80:VALIDATION配置为 http 而不是 dns 或 tls-sni 时需要80端口举办转发
-e ONLY_SUBDOMAINS:仅为子域名获取证书(主域名大概托管在别的一台计较机且无法验证)时请将此项配置为 true
-e EXTRA_DOMAINS:特另外完全限定域名(逗号脱离,无空格)如 extradomain.com,subdomain.anotherdomain.org
-e STAGING:配置为 true 可以提高速率限制,但证书不会通过欣赏器的安详测试,仅用于测试
-e HTTPVAL:已弃用, 请用VALIDATION 取代
2. 实践
2.1 利用 HTTP 方法验证
首先,你应该先担保要获取证书的域名(子域名)能正确地会见到主机。留意:域名需要存案。