【发布时间】:2018-10-25 22:11:44
【问题描述】:
我已经生成了一个自签名证书。这个自签名证书存储在服务器中,并且只接受来自拥有这个自签名证书的客户端的请求,这是可以接受的。因为这个 HTTPS 端点应该只用于我们的自定义 HTTPS 客户端,所以我强烈认为不需要 CA 签名。 但是我的同事警告说,无论如何都不应在生产环境中使用自签名证书。我该怎么办??
【问题讨论】:
标签: pki
我已经生成了一个自签名证书。这个自签名证书存储在服务器中,并且只接受来自拥有这个自签名证书的客户端的请求,这是可以接受的。因为这个 HTTPS 端点应该只用于我们的自定义 HTTPS 客户端,所以我强烈认为不需要 CA 签名。 但是我的同事警告说,无论如何都不应在生产环境中使用自签名证书。我该怎么办??
【问题讨论】:
标签: pki
有一个完整的基础设施来管理证书的生命周期,它被称为PKI(公钥基础设施)。 CA 是其中的一部分,可帮助您管理证书颁发和吊销。
不建议在生产环境中使用自签名证书,因为你松散了证书的生命周期管理。假设如果客户端被入侵,任何拥有该自签名证书的人都可以与服务器通信。您无法撤销该证书或维护 CRL。
在您的情况下,理想的解决方案/实施实际上也会从 CA 向客户发布他们自己的 PKCS12,这意味着他们将拥有自己的私钥(如果您有很多客户,这可能会变得昂贵)。但这是最安全的方法。如果您知道某个客户端遭到入侵,您可以从 CA 撤销该客户端的证书,并且如果客户端进行了证书验证(理想情况下应该这样做),它应该不再能够与服务器通信。您可以简单地停用该客户端。
只是一个想法
但是,如果您正在寻找具有成本效益的方法(因为您提到了内部调用),您可以让您的服务器向客户端发出 P12,并让您的服务器维护记录哪个客户端拥有什么证书。这使您几乎无法控制管理客户端。您可以在服务器端为这些服务启用基于证书的身份验证(服务器将接收客户端的主题DN),并通过参考存储的记录,您可以识别哪个客户端正在尝试通信。如果您想禁止服务器为该客户端提供服务,只需更新记录即可。
但要回答您的问题,使用自签名证书并不理想,因为在现实世界中,您应该能够实时或近乎实时地管理证书,如果您使用自签名证书,这是不可能的自签名证书。
【讨论】: