欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: 林泽浩

本文利用 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 方法验证

    首先,你应该先担保要获取证书的域名(子域名)能正确地会见到主机。留意:域名需要存案。