Docker使用 linuxserver/letsencrypt 生成SSL证书最全解析及实践

本文使用 HTTP 和 DNS 两种校验方式对 Docker 下 linuxserver/letsencrypt 项目进行了实践。生成SpringBoot可用证书,使用 Nginx 的 htpasswd 来对网站进行密码保护,并测试使用 fail2ban 防止 htpasswd 被暴力破解。全文基于 linuxserver/letsencrypt 文档及其他官方资料,根据作者实践进行详细解析和记录。

1. 介绍

1.0 linuxserver/letsencrypt

这个容器设置了一个 Nginx 服务器,支持 PHP 的反向代理和一个内置的 letsencrypt 客户端,可以自动化生成或更新 SSL 服务器证书。它还包含用于防御入侵的 fail2ban。

1.1 使用

1

2

3

4

5

6

7

8

9

10

11

12

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),否则会一直报错(但不影响使用)。

1

2

3

4

5

6

7

8

9

10

#宿主机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 方式验证

首先,你应该先保证要获取证书的域名(子域名)能正确地访问到主机。注意:域名需要备案。

这里我映射的宿主机目录为 /opt/letsencrypt1,PGID 和 PUID 由上文提到的方式获得。配置的域名为 my.com 和 www.my.com (实际上我配置的是另外一个我自己真正拥有的域名,这里不贴出来)

注意:使用 HTTP 方式验证的话开发80端口就可以了ÿ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker pull mailserver/docker-mailserver 是一个命令,用于从Docker Hub上拉取 mailserver/docker-mailserver 镜像。 Docker是一种开源的容器化平台,它可以帮助我们实现应用程序的快速部署和管理。而Docker Hub是一个公共的镜像仓库,里面存储着各种各样的Docker镜像。 通过执行 docker pull mailserver/docker-mailserver 命令,我们可以将 mailserver/docker-mailserver 镜像下载到本地。该镜像是一个用于构建邮件服务器的Docker镜像,包含了所有必要的组件和依赖项。 下载镜像后,我们可以使用 docker run 命令来创建并启动一个基于该镜像的容器。容器会在我们的计算机上运行一个功能完整的邮件服务器,我们可以通过相关端口来访问和管理该服务器。 使用 mailserver/docker-mailserver 镜像构建邮件服务器有很多好处。首先,镜像已经预先配置和优化了所有必要的组件,包括Postfix、Dovecot和SpamAssassin等。其次,我们可以通过自定义环境变量来灵活配置服务器的各种参数,例如设置域名、用户账号和密码等。此外,镜像还提供了一系列管理工具,包括Web管理界面和命令行工具,方便我们进行邮件服务器的管理和监控。 总之,通过执行 docker pull mailserver/docker-mailserver 命令,我们可以方便地获取并部署一个功能完善的邮件服务器。这为我们的邮件通信提供了便利,并简化了配置和管理的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值