使用除Smartscreen之外的代码签名EV证书的优势?

时间:2015-07-26 14:06:21

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

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

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

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

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

  3. 在硬件令牌上交付的选项,通常不适用于普通证书
  4. 我想知道它们是否带来了其他优势,例如,如果使用它们签名的应用程序比防病毒软件,防火墙和其他安全应用程序使用非EV证书签名的应用程序更受信任(它们受阻较少,引发更有利的警告等等)。 )。

    我重申了我最感兴趣的案例:您是否了解使用EV证书签署的应用程序的某些特定防病毒/防火墙/安全应用程序处理的差异,以及使用标准签署的应用程序证书?

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

  • Malware writes have used stolen certificates in past,因此我们无法确定原作者是否使用过它。这就是为什么我提到"现行政策"以上,因为这可能在一夜之间发生变化。

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

由于我们通常根本不看证书,因此无论是标准还是EV都无关紧要。

答案 1 :(得分:0)

我的经历与 @George Y 不同。我们的 Code Signing EV-Certificate from Sectigo did 有助于避免 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 上提供 - 但现在还没有。