自签名代码证书的典型用例是什么?

What are typical use cases for self-signed code certificates?

我是一家年轻公司的开发人员,我也开发个人项目。这些主要是 C# 和 python 应用程序。我们公司从 CA 购买了代码签名证书以避免 "unknown publisher" 警告和一些防病毒保护问题,但我想避免个人项目的成本。

据我所知,实现此目的的唯一方法是使用来自受信任 CA 的证书,但为什么要使用自签名证书呢?我知道它们存在,但由于大多数用户不会编辑他们的信任库,他们实际上完成了什么?

注意:我专门询问代码签名证书,而不是 SSL 或其他方式

证书建立信任。不可能相信任何人都可以创建的证书,因为其他任何人也可以创建一个证书,例如,自签名证书允许中间人攻击。

您的问题混合了几个问题,我认为这就是造成问题的原因。商业 CA 只在一种情况下有用:您需要一个每个人都信任的第三方。在您不想要的情况下,它们毫无用处,实际上是一种威慑。

因此,商业代码签名 CA 对于签署 public 网站非常有用。商业 CA 对于签署私人 API 证书不太有用(尽管在某些平台上,特别是 iOS,无论如何都有使用它的理由)。

同样,如果您有一个信任 CA 进行代码签名的 OS,则商业 CA 很有用。但是,如果您使用的是最新版本的 macOS,那么您确实需要一个由 Apple 专门签名的版本。

但如果您自己控制平台,例如在嵌入式系统或插件引擎中,则自行签署二进制文件是完全合适的。 "Self-sign" 就意味着 "using the root certificate." 商业根源并没有什么神奇之处。他们是 "self-signed." 只是其他人信任他们。如果除了你自己不需要任何人的信任,那么使用你自己的 root 比商业的更好。

(我在这里掩盖了一些细节以达到核心点。特别是,通常 "self-signed" 是真正的辅助证书,它们植根于某些自签名证书。这是正常的对于商业证书和良好实践,即使您创建自己的根。但基本直觉是相同的。)

如果问题具体 "why would I use a self-signed cert for signing Windows binaries outside of a controlled environment like an enterprise," 那么答案是你可能不应该,你为什么认为你应该?但是对于跨所有可能平台的 "code signing" 的一般问题,在很多情况下使用自己的根是最理想的。在企业内部,签署自己的二进制文件是很正常的。

自签名证书最适合开发、测试和学习环境。

没有其他地方你应该考虑他们