我的经历与@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 上提供 - 但今天还没有。