У меня другой опыт, чем у @George Y. Наш Code Signing EV-Certificate от 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, но не сегодня.
person
K.Mulier
schedule
08.01.2021