【问题标题】:Self signed certificate in production environment for internal HTTPS calls?用于内部 HTTPS 调用的生产环境中的自签名证书?
【发布时间】:2018-10-25 22:11:44
【问题描述】:

我已经生成了一个自签名证书。这个自签名证书存储在服务器中,并且只接受来自拥有这个自签名证书的客户端的请求,这是可以接受的。因为这个 HTTPS 端点应该只用于我们的自定义 HTTPS 客户端,所以我强烈认为不需要 CA 签名。 但是我的同事警告说,无论如何都不应在生产环境中使用自签名证书。我该怎么办??

【问题讨论】:

    标签: pki


    【解决方案1】:

    有一个完整的基础设施来管理证书的生命周期,它被称为PKI(公钥基础设施)。 CA 是其中的一部分,可帮助您管理证书颁发和吊销。

    不建议在生产环境中使用自签名证书,因为你松散了证书的生命周期管理。假设如果客户端被入侵,任何拥有该自签名证书的人都可以与服务器通信。您无法撤销该证书或维护 CRL。

    在您的情况下,理想的解决方案/实施实际上也会从 CA 向客户发布他们自己的 PKCS12,这意味着他们将拥有自己的私钥(如果您有很多客户,这可能会变得昂贵)。但这是最安全的方法。如果您知道某个客户端遭到入侵,您可以从 CA 撤销该客户端的证书,并且如果客户端进行了证书验证(理想情况下应该这样做),它应该不再能够与服务器通信。您可以简单地停用该客户端。

    只是一个想法

    但是,如果您正在寻找具有成本效益的方法(因为您提到了内部调用),您可以让您的服务器向客户端发出 P12,并让您的服务器维护记录哪个客户端拥有什么证书。这使您几乎无法控制管理客户端。您可以在服务器端为这些服务启用基于证书的身份验证(服务器将接收客户端的主题DN),并通过参考存储的记录,您可以识别哪个客户端正在尝试通信。如果您想禁止服务器为该客户端提供服务,只需更新记录即可。

    但要回答您的问题,使用自签名证书并不理想,因为在现实世界中,您应该能够实时或近乎实时地管理证书,如果您使用自签名证书,这是不可能的自签名证书。

    【讨论】:

    • 我的第一个实现类似于你所建议的。我们有一个 CA 证书(它是自签名的),它为每个客户端签名。每个客户端证书都可以实时撤销。
    猜你喜欢
    • 2020-05-26
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多