Я внедряю функцию автоматического обновления, и мне нужны советы о том, как сделать это безопасно, используя лучшие практики. Я хотел бы использовать подпись Authenticode загруженного файла, чтобы убедиться, что он безопасен для запуска (т. Е. Исходит от нашей компании и не был подделан). Мой вопрос очень похож на вопрос № 2008519.
Суть вопроса: каков наилучший и наиболее безопасный способ проверки подписей Authenticode для функции автоматического обновления? Какие поля в сертификате нужно проверить? Требования следующие: (1) проверить, что подпись действительна, (2) проверить, что это моя подпись, (3) старые клиенты все еще могут обновить, когда истекает срок действия моего сертификата и я получаю новый.
Вот некоторая справочная информация / идеи из моего исследования: я считаю, что это можно разбить на два этапа:
Убедитесь, что подпись действительна. Я полагаю, что это должно быть легко с использованием WinVerifyTrust, как описано в http://msdn.microsoft.com/en-us/library/aa382384(VS.85).aspx - я не ожидаю проблем здесь.
Убедитесь, что подпись соответствует нашей компании, а не другой компании. Кажется, на этот вопрос сложнее ответить:
Одна из возможностей - проверить некоторые строки в подписи. Может быть получено с помощью кода в статье MS KB # 323809, но эта статья не дает рекомендаций о том, какие поля следует проверять для данного типа приложения (или любого другого, в этом отношении). Вопрос # 1072540 также иллюстрирует, как получить некоторую информацию о сертификате, но опять же не рекомендует, какие поля на самом деле проверять. Меня беспокоит то, что строки могут быть не самой лучшей проверкой: что, если, например, другой человек сможет получить сертификат с таким же именем? Или, если у нас есть веская причина изменить строки в будущем?
Человек на вопрос № 2008519 имеет очень похожее требование. Его потребность в функции TrustedByUs идентична моей. Однако он делает проверку, сравнивая открытые ключи. Хотя это будет работать в краткосрочной перспективе, похоже, что оно не будет работать для функции автоматического обновления. Это связано с тем, что сертификаты подписи кода действительны только в течение 2-3 лет. Поэтому в будущем, когда мы купим новый сертификат через 2 года, старые клиенты не смогут больше обновляться из-за изменения открытого ключа.