除了 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怎么办?使用代码签名证书有必要!