RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1552720
Accepted
Боков Глеб
Боков Глеб
Asked:2023-11-23 09:38:33 +0000 UTC2023-11-23 09:38:33 +0000 UTC 2023-11-23 09:38:33 +0000 UTC

在本地开发和生产模式下使用版本控制系统跟踪 SSL 密钥和证书是否安全?

  • 772

如您所知,带有环境变量的文件(通常具有带或不带文件名的扩展名.env)通常不会被版本控制系统跟踪,以防止数据库密码等数据泄露。SLL 密钥和证书文件怎么样?我请你分别考虑本地开发、分期和制作的情况。

关于这个话题的思考过程

本土化发展模式

如果在本地开发模式下您使用自行颁发的(例如,使用mkcert)SSL 密钥和证书,那么通常我认为没有理由将它们排除在版本控制系统的跟踪之外。它似乎不包含任何敏感数据。

强制每个团队成员自己颁发证书的唯一可能原因是 mkcert 中可能缺少强制浏览器信任已颁发证书的命令。如果确实没有这样的命令,那么每个参与者都必须自己运行该命令mkcert,这不仅会颁发密钥和证书,而且浏览器也会信任它们。在 Windows 上没有 mkcert 的情况下执行此操作并不容易(在我提出问题时我无法做到这一点)。

根据评论更新

正如@andreymal 评论的那样,

如果您将自行颁发的证书添加到受信任的浏览器中,那么泄露其私钥将允许攻击者发起中间人攻击,因此非常危险

我希望这不会成为在本地开发模式下仅使用 HTTP 协议(​​而不是 HTTPS)的理由。

生产

我不确定,但我认为生产模式的 SSL 密钥和证书是不应泄露的秘密信息。有一定的可能性,它们也可以使用浏览器开发者模式作为 CSS 或 JS 文件进行一般查看,但这又是一个假设。

与本地开发模式下每个团队成员都可以拥有自己的自行颁发的 SSL 密钥和证书不同,在生产模式下,每个人都会有一个密钥和一个证书(很可能由授权组织以可报销的方式颁发)。如果是这样,它们将不得不被排除在版本控制之外,并以其他方式在团队成员之间转移。

根据评论更新

有人提出这样的问题:如果理论上一两个生产服务器管理员知道就足够了,为什么团队成员应该了解生产 SSL?我的答案是:根据项目组装和部署的自动化的组织方式,有时在源代码文件中拥有 SLL 密钥和证书会很方便。

首先值得警惕的是,只有生产服务器的管理员才应该知道 SSL 密钥。我并不是说这是错误的,但在这种情况下,当只有一两个团队成员拥有 SSL 密钥和证书时,可能会出现问题。例如,管理员没有上班,但需要发布应用程序修补程序。或者应用程序运行所需的文件分散在团队成员中而不是组织在一起。

再说一次,我并不是说每个人都应该这样做,但我将项目收集在一个文件夹中,该文件夹中放置了应用程序在服务器上工作所需的所有内容,特别是 ssl 密钥、证书和环境变量文件:

在此输入图像描述

因此,构建项目后,剩下的就是以一种或另一种方式将文件发送到 VPS 并docker compose build在 VPS 上重新启动它。

我知道有各种各样的高级部署方法,特别是 GitHub 上的 CI/CD 或各种 AWS 工具。例如,您可以使用 AWS 组织环境变量的注入,而无需使用 .env 文件 - SSL 可能有类似的东西。但所有这些都将开发商与特定的供应商联系在一起。有时这是合理的,但当最初只有一个使用裸 Ubuntu 的 VPS 时,仍然必须有某种方法来有效地组织部署。

ssl
  • 2 2 个回答
  • 147 Views

2 个回答

  • Voted
  1. Talleyran
    2023-11-28T23:27:40Z2023-11-28T23:27:40Z

    生产中的SSL私钥是一个非常机密的东西,其安全性保证了中间人攻击的不可能,正如评论中已经写的那样。版本控制系统不是需要这些东西的地方。

    理想情况下,应用程序轮廓和 Web 服务器轮廓应该不同并且彼此分离。例如,应用程序位于您的位置,/var/www与 ssl 相关的所有内容都位于/etc/ssl根本无法通过 http 直接访问的位置,并且 nginx、apache 或任何其他 Web 服务器从那里获取它。那些。整个事情应该与应用程序项目(站点/服务)分开存储。

    您可以通过高级方式管理此类配置,例如通过 docker 和kubernetes或puppet,或者手动或使用具有访问权限的专门授权的 DevOps 团队通过 ci/cd 脚本来管理。而开发者甚至可能没有sudo权限,只能写入项目文件夹。

    您还可以在 Dev 和 Prod 上通过certbot使用 LetsEncrypt (如果不需要更可靠的 CA、Mintsifrah 等)。那么你就根本不需要考虑 ssl 了。

    但无论如何,加密流量是 Web 服务器的任务,而不是其上运行的应用程序的任务。

    顺便说一句,对于开发站,我们使用本地部署的 CA 颁发的证书,该证书的根证书被添加到所有工作 PC 上的域策略信任的证书中。这样就不需要手动添加一些东西来简化开发。

    • 2
  2. Best Answer
    Vlad Chapl
    2023-11-28T19:15:44Z2023-11-28T19:15:44Z

    我认为规范的答案可能是:如果只有那些被允许查看密钥/证书的秘密部分的人被允许进入版本控制系统,并且您可以相对可靠地保证(在密钥的整个生命周期内)版本控制系统不会被未经授权的人和/或攻击者渗透,那么您可以存储它。当然,需要做一个审计系统,也许需要做一些渗透测试。同样的规则也适用:知道秘密的人越少,它(通常)保存得就越安全。

    我认为@Pak Uula 回答了所有问题。

    • 1

相关问题

  • 让加密证书不起作用

  • 没有互联网如何更新 ssl 证书?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5