除了 Smartscreen 之外,代码签名 EV 证书的优势是啥?

Posted

技术标签:

【中文标题】除了 Smartscreen 之外,代码签名 EV 证书的优势是啥?【英文标题】:Advantages with code-signing EV certificates other than the Smartscreen ones?除了 Smartscreen 之外,代码签名 EV 证书的优势是什么? 【发布时间】:2015-10-16 17:46:10 【问题描述】:

我必须购买代码签名证书,用于签署 Win32 应用程序,我正在考虑是否选择 EV。

我能找到的 EV 证书的优点是:

    立即建立 Smartscreen 声誉(而不是等待 3k 次下载?[source])

    在证书续订期间维护 Smartscreen 的声誉[source](如果第 1 点仍然适用,这可能是一个没有实际意义的问题)

    硬件令牌交付选项,通常不适用于普通证书

我想知道它们是否会带来其他优势,例如使用它们签名的应用程序是否比使用非 EV 证书签名的应用程序更受防病毒、防火墙和其他安全应用程序的信任(它们被阻止更少,引发更有利的警告等。 )。

我重申我感兴趣的案例:您是否知道某些特定的防病毒/防火墙/安全应用程序对使用 EV 证书签名的应用程序与使用标准签名的应用程序的处理差异证书?

【问题讨论】:

【参考方案1】:

披露:我为一家 AV 供应商工作。

我想知道它们是否会带来其他优势,例如,如果应用程序 使用它们签名的应用程序比使用非 EV 签名的应用程序更受信任 防病毒、防火墙和其他安全应用程序的证书

这取决于制作安全应用程序的供应商或其当前 (*) 策略。我工作过的两家安全供应商在扫描恶意软件时都忽略了证书的存在。这有几个原因:

仅仅因为代码已签名并不意味着它没有恶意。这只表示它在签名后没有被修改。例如,签署了相对大量的广告软件应用程序。

Malware writes have used stolen certificates in past,因此我们无法真正确定它是否被原作者使用。这就是我在上面提到“当前政策”的原因,因为这可能会在一夜之间改变。

验证证书是一个复杂且相对缓慢的过程,需要从磁盘读取整个文件 - 对于非 SSD 存储来说,这是一项昂贵的操作。它还需要执行一些 CPU 密集型的公钥加密操作。因此,对于一些大型可执行文件,检查证书可能需要比扫描文件中的恶意软件更长的时间。

而且由于我们一般根本不看证书,所以不管是标准还是EV。

【讨论】:

有趣的信息。所以你是说,就防病毒误报等而言,代码签名证书的好处几乎为零? 是的,收益几乎为零。 这很尴尬。我不知何故错过了这一点,然后完全忘记了它。我记得我们的聊天,我想当时发生了一些事情,我好几天都无法访问 ***。我深表歉意。从好的方面来说,还不到一年:/ . 非常感谢您的贡献。听到至少您工作的供应商忽略了证书,这很有趣。 虽然每次检查可执行文件时不查看证书是完全可以理解的,但是对于少数被检测为危险的证书(在此类检测之后),这样做似乎很可行。当然,签名不是保证,但它暗示当您不能完全确定它是恶意软件时(例如通过显示不那么危言耸听的警告),可以给予文件一点更多的信任;因此,撇开 EV 方面不谈,如果任何安全供应商真的没有将普通证书用于任何用途,我会感到惊讶。【参考方案2】:

我的经历与@George Y 不同。我们的Code Signing EV-Certificate from Sectigo 确实有助于避免Norton 360 中的误报。我不知道其他防病毒软件 - 有待测试。

注意:我与@George Y. 的不同经历并不意味着 他错了。差异可能是由于许多 因素,例如防病毒软件公司的政策,... 另外,我的 经验基于我从代码中获得的积极结果今天 签署。未来的更多测试(以及我们用户的经验)将证明这些积极结果是暂时的还是永久性的。

1。代码签名之前

在代码签名之前,我们的用户收到如下警告:

更糟糕的是,Norton 360 会自动删除大量可执行文件和 .pyd 文件 - 从而彻底破坏我们的软件:

这是一场彻头彻尾的灾难。

2。代码签名后

今天,我首次使用我们的新 EV 证书签署了我们的申请。我不仅签署了.exe 文件,还签署了.dll.so.pyd 文件。在签署这些文件时,我首先检查它们是否已经有签名,以避免重复签名来自我们构建中包含的第三方开源二进制文件的.dll 文件。这是我的 Python 脚本,它可以自动执行此过程:

import os, subprocess

# 'exefiles' is a Python list of filepaths
# to .exe, .dll, .so and .pyd files. Each
# filepath in this list is an absolute path
# with forward slashes.
quote = '"'
for f in exefiles:
    cmd = f"signtool verify /pa quotefquote"
    result = subprocess.run(
        cmd,
        stdin    = subprocess.DEVNULL,
        stdout   = subprocess.PIPE,
        stderr   = subprocess.PIPE,
        cwd      = os.getcwd(),
        encoding = 'utf-8',
    )
    if result.returncode:
        # Verification failed, so the file is not yet signed
        cmd = f"signtool sign /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /a quotefquote"
        result = subprocess.run(
            cmd,
            stdin    = subprocess.DEVNULL,
            stdout   = subprocess.PIPE,
            stderr   = subprocess.PIPE,
            cwd      = os.getcwd(),
            encoding = 'utf-8',
        )
        if result.returncode:
            # Code signing failed!
            print(f"Sign: 'f.split('/')[-1]' failed")
        else:
            # Code signing succeeded
            print(f"Sign: 'f.split('/')[-1]'")
    else:
        # Verification succeeded, so the file was already signed
        print(f"Already signed: 'f.split('/')[-1]'")

到目前为止,结果很有希望。 Windows SmartScreen 不再生成警告。诺顿 360 也没有。我在笔记本电脑和台式机上都尝试过安装干净的 Norton 360 - 他们都信任该应用程序(与代码签名之前不同)。

手指交叉它将保持这种状态。我们也希望其他防病毒软件能够信任我们的应用程序。

注意: 在撰写这篇文章时,我们签名的应用程序仅适用于https://new.embeetle.com上的测试人员 它也将很快在我们的公共网站https://embeetle.com 上提供 - 但今天还没有。

【讨论】:

正如我在帖子顶部所说的,这取决于软件供应商。您是否也尝试过非 EV 证书?供应商可能会以不同的方式对待签名和未签名的二进制文件,而不太关心证书是否为 EV。 @K.Mulier 为了清楚起见,您的步骤“1. 在代码签名之前”是指根本没有任何证书的 exe 文件,还是指具有标准 (非 EV) 证书? 第一步是指一个没有任何证书的exe文件。很抱歉造成混乱。

以上是关于除了 Smartscreen 之外,代码签名 EV 证书的优势是啥?的主要内容,如果未能解决你的问题,请参考以下文章

无法访问SmartScreen怎么办?使用代码签名证书有必要!

每个 .exe 代码签名操作都需要 Digicert USB 令牌吗? (EV代码签名证书)

自动化扩展验证 (EV) 代码签名

EV 代码签名存在问题

开发者为什么需要EV代码签名证书

我应该更喜欢哪一个,常规或 EV 代码签名证书?