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

Security 自签名代码证书的典型用例是什么?,security,code-signing,Security,Code Signing,我是一家年轻公司的开发人员,我还开发个人项目。这些主要是C#和python应用程序。我们公司从CA购买了代码签名证书,以避免“未知发布者”警告和一些防病毒保护问题,但我希望避免个人项目的成本 据我所知,实现这一点的唯一方法是使用来自可信CA的证书,但为什么要使用自签名证书呢?我知道它们是存在的,但由于大多数用户不打算编辑他们的信任库,他们实际完成了什么 注意:我是专门询问代码签名证书,而不是SSL或其他建立信任的证书。不可能信任任何人可以创建的证书,因为任何其他人都可以创建一个证书,例如,自签名

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

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


注意:我是专门询问代码签名证书,而不是SSL或其他建立信任的证书。不可能信任任何人可以创建的证书,因为任何其他人都可以创建一个证书,例如,自签名证书允许中间人攻击。

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

因此,商业代码签名CA对于公共网站的签名非常有用。商业CA在签署私有API证书时用处不大(尽管在某些平台上,特别是在iOS上,仍然有理由使用商业CA)

类似地,如果您的操作系统信任该CA进行代码签名,那么商业CA也很有用。然而,如果你使用的是最新版本的macOS,那么你真的需要一个由苹果公司特别签署的版本

但是,如果您自己控制平台,例如在嵌入式系统或插件引擎中,则完全适合对二进制文件进行自签名。“自我签名”只是指“使用根证书”。商业根并没有什么神奇之处。他们是“自我签名”的,只是其他人信任他们。如果你只需要你自己而不需要任何人的信任,那么使用你自己的根比商业根更好

(这里我要强调一些细节,以达到核心点。特别是,通常“自签名”实际上是以自签名证书为根的二级证书。这对于商业证书来说是正常的,即使创建自己的根证书也是良好的做法。但基本直觉是一样的。)


如果问题是“为什么我要使用自签名证书在受控环境(如企业)之外对Windows二进制文件进行签名”,那么答案可能是您不应该这样做,为什么您认为您应该这样做?但是对于跨所有可能的平台的“代码签名”的一般问题,在许多情况下,使用自己的根是理想的。在企业内部,对自己的二进制文件进行签名是非常正常的。

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


在其他任何地方你都不应该去考虑它们

自签名证书背后的安全问题是有意义的。我更好奇的是自签名证书实际有用的情况。考虑到关于如何制作这些证书的知识和教程,我认为它们有一定的逻辑用途,但我似乎找不到任何情况推荐它们进行搜索。在这方面,我认为自签名证书总比没有证书好。如果您想尝试一个新的web服务器应用程序一段时间,并且不会有一个wild cart SSL来覆盖它,那么可能会这样做。如果您已经在使用VPN,该VPN应限制外部查看者,但您仍然不希望内部人员轻松查看您的流量,则可能会有所帮助。也可以为FTP和电子邮件证书转换和/或生成SSL证书。另一个问题是,自签名证书比没有证书好。另外,我相信如果共享私钥而不是公钥,您可以验证流量。可能更适合ServerFault或Security。SE?同意这可能应该在Security.stackexchange.com上。Verisign根证书(例如VeriSign 1级公共初级证书颁发机构-G3)都是“自签名”的它们非常有用。所有根证书都是自签名的。在任何情况下,如果您是受信任的根,您将创建一个自签名证书。在处理浏览器时,这是不常见的,但在处理其他类型的系统时,成为自己的根是非常常见和最佳的做法。