什么时候可以在生产中使用自签名证书?

When is it acceptable to use self-sign cert in production?

自签名证书总是被视为仅供测试的证书。但是根据低估,如果出于正确的原因使用它,则将其用于生产是完全可以的。我正在尝试向我的客户提供一些关于使用什么的指南。例如:

  1. 身份验证:不能使用自签名,因为浏览器不会信任 "self" 颁发者。因此,对于服务到服务或服务到客户端的身份验证,使用自签名是不行的。除非在验证之前有一个预 thumbprint/CN 白名单过程。很多人都这样做,例如我上传管理证书 public 密钥的 Azure,用于验证他们的 API.
  2. 签名:不行,因为与发行人不信任。除非在验证之前有预指纹白名单过程。除非在验证之前有一个预 thumbprint/CN 白名单过程。
  3. 加密:完全可以使用自签名,因为不需要链信任。如果发生攻击,MIM 证书将不会解密,没有其他影响。

我希望社区 thoughts/recommendations/guidelines 提供一些建议,以确保我的建议是正确的。

谢谢。

我可以找到几个真正不需要可信 CA 的真实示例

  • VPN:服务器和客户端的证书

  • SSL/TLS客户端认证:需要相互认证时客户端认证的证书

  • SSL/TLS 在私有网络中:内部服务或服务器群

  • 非对称加密:只需要密钥,不需要证书。

  • 在封闭环境中签名和授权:就像组织的员工使用由私人 CA 颁发的加密令牌

  • 服务之间的消息认证:SOAP 签名、JWT 或 SAML 消息。接收方部分在其信任库中明确包含服务器签名证书以验证签名者身份

Authentication: Not ok to use self-signed as the Brower will not trust the "self" issuer.

只要有可信的离线证书分发过程就可以使用。不能通过 'trust-all' 代码使用。

Signing: No ok, as there is no trust with the issuer.

只要有可信的离线证书分发过程就可以使用。

Encryption: Perfectly OK to use self-signed as there no chain trust required. In case of an attack, the MIM cert will simply not decrypt, no other impact.

只要有可信的离线证书分发过程就可以使用。关于 'MI[T]M cert will simply not decrypt' 的部分没有意义。证书不执行解密,设法提供自己的证书而不是目标证书的 MITM 将拥有相应的私钥,否则攻击毫无意义。在没有信任的情况下,如果发件人使用不受信任的证书中的 public 密钥来加密任何东西,他不知道谁可以解密它,所以他是不安全的。