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

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

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

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

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

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

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

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

【问题讨论】:

    标签: certificate code-signing firewall antivirus code-signing-certificate


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 有趣的信息。所以你是说,就防病毒误报等而言,代码签名证书的好处几乎为零?
    • 是的,收益几乎为零。
    • 这很尴尬。我不知何故错过了这一点,然后完全忘记了它。我记得我们的聊天,我想当时发生了一些事情,我好几天都无法访问 stackoverflow。我深表歉意。从好的方面来说,还不到一年:/ .
    • 非常感谢您的贡献。听到至少您工作的供应商忽略了证书,这很有趣。
    • 虽然每次检查可执行文件时不查看证书是完全可以理解的,但是对于少数被检测为危险的证书(在此类检测之后),这样做似乎很可行。当然,签名不是保证,但它暗示当您不能完全确定它是恶意软件时(例如通过显示不那么危言耸听的警告),可以给予文件一点更多的信任;因此,撇开 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 {quote}{f}{quote}"
        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 {quote}{f}{quote}"
            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文件。很抱歉造成混乱。
    猜你喜欢
    • 2014-02-03
    • 2019-04-14
    • 2010-09-17
    • 2012-04-15
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2020-03-27
    • 2021-07-15
    相关资源
    最近更新 更多