docker - 需要的建议:在同一主机上的多个 Web 服务之间共享 LE 通配符证书时的最佳实践
问题描述
我需要你的建议。从 opsec 的角度来看,在同一主机上的多个 Web 服务之间共享 LE 通配符证书时,最好的方法是什么?
我的设置是这样的:
- 在我的域上,我有一个自动更新的 LE 通配符证书(容器化)
- 保存证书的文件夹映射到主机文件夹,由 LE-user:LE-group 拥有并分配了 700 个权限
- 所有子域都指向同一主机上的 Web 服务(全部容器化)
- 所有可公开访问的服务都由 Nginx 反向代理(容器化)处理,因此它们都是下游的 LE SSL 加密
- 管理服务(portainer、adminer、cockpit 等)只能从 LAN 访问,并且都受强且唯一的密码保护
我的问题:
我想用 LE 通配符证书保护上述管理服务,因为我厌倦了必须确认我“接受风险”,因为他们使用的是自签名证书,但我怀疑什么是最好的实现这一目标的方法。到目前为止,我看到了三种可能的解决方法,它们都有自己的缺点:
- 创建一个由 cron 作业执行的脚本,该脚本在证书更新时将 LE 证书复制到各种管理服务证书文件夹。
- 缺点:脚本需要以root权限运行
- 允许管理员服务访问主机映射文件夹中的证书。
- 缺点:我需要 704 访问 LE Cert 文件夹或 740 并将所有管理员服务用户添加到 LE 组
- 通过反向代理服务管理服务,启用 TOTP 保护并限制对服务器公共 IP 的访问。
- 缺点:如果我搞砸了,或者在我的 Nginx 或 TOTP 安装中出现零日漏洞,管理服务是可以公开访问的
从 opsec 的角度来看,您认为上述哪些解决方案是“最佳实践”解决方案,还是您会提出一个我没有考虑过的完全不同的解决方案?
提前谢谢了!
解决方案
考虑以下:
使用 openssl 之类的东西创建合法的本地 CA 根证书。
使用它,合法地签署您将用于管理服务的服务器证书,并配置管理服务 SSL 端点以使用它。
确保您的 CA 根证书位于您连接到管理服务的计算机的受信任 CA 证书证书存储区(又名信任存储区)中。
以这种方式创建的证书只有一个不受信任的根 CA,直到您在连接机器的信任库中明确信任它(即步骤 #3)。现在的额外好处是,您可以在需要时使任一证书到期,而不是像 LE 通配符证书那样每 3 个月到期一次。
资源:https ://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/
推荐阅读
- r - 如何在 R Shiny 中将反应值设置为默认值?
- django - django:ManyToMany:更新和插入业务规则
- azure - ARM 模板,服务器名称已存在但实际上不存在
- java - 后台服务不停止 Android
- amazon-web-services - AWS Glue Crawler 更新现有目录表非常慢
- java - 我有一个构造函数,它应该以一个字符串为例,一个地址并用“|”分割
- azure-logic-apps - 在 Azure 的 API 管理服务中导入逻辑应用 HTTP 请求端点
- javascript - 如何防止 Angular 重命名自定义 toJSON 方法?
- python - python中的无符号字节数组
- python - Django OAuth 工具包 - AttributeError: get_full_path