我和@George Y有不同的经验。我们从Sectigo获得的代码签名EV证书确实帮助避免了在Norton 360中出现的误报。至于其他杀毒软件,需要进行测试。
注:
我的经验与@George Y不同,并不意味着他是错的。这种差异可能是由于许多因素造成的,例如杀毒软件公司的政策等等。
此外,我的经验是基于我今天从代码签名中获得的积极结果。未来的更多测试(以及我们用户的经验)将证明这些积极结果是暂时的还是永久的。
1. 在代码签名之前
在代码签名之前,我们的用户会收到如下警告:
![](https://istack.dev59.com/1AKgV.webp)
更糟糕的是,Norton 360会自动删除许多可执行文件和.pyd文件,从而完全破坏我们的软件。
这是一个彻底的灾难。
2. 签名后
今天,我第一次使用我们的新EV证书签署了我们的应用程序。我不仅签署了.exe
文件,还签署了.dll
、.so
和.pyd
文件。在签署这些文件时,我首先检查它们是否已经有签名,以避免重复签署我们构建中包含的第三方开源二进制文件的.dll
文件。以下是我的Python脚本,自动化此过程:
import os, subprocess
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:
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:
print(f"Sign: '{f.split('/')[-1]}' failed")
else:
print(f"Sign: '{f.split('/')[-1]}'")
else:
print(f"Already signed: '{f.split('/')[-1]}'")
目前为止,结果是令人兴奋的。Windows SmartScreen不再生成警告信息。Norton 360也没有了。我已经在我的笔记本电脑和安装了干净版Norton 360的台式机上尝试过 - 它们都信任这个应用程序(不像以前的代码签名)。
希望它能一直保持这种状态。我们也希望其他杀毒软件能够信任我们的应用程序。
注意:
截至撰写本文时,我们签署的应用程序仅供https://new.embeetle.com测试人员使用。
它很快也会在我们的公共网站https://embeetle.com上提供 - 但今天还未能提供。
我记得我们之前的聊天,那时可能发生了一些事情,导致我无法访问stackoverflow好几天。
我深表歉意。
好在还不到一年 :/ 。 - gbr