2016-07-12 1 views
1

Я хотел проверить доверие к одному из файлов .exe в нашем проекте, для которого я использую C#.Почему WinVerifyTrust() не работает только на компьютере, который не подключен к Интернету?

я говорил - http://pinvoke.net/default.aspx/wintrust/WinVerifyTrust.html

Вот мой фрагмент кода.

WinTrustData wtd = new WinTrustData(filename); 
Guid guidAction = new Guid(WINTRUST_ACTION_GENERIC_VERIFY_V2); 
WinVerifyTrustResult result = WinVerifyTrust(INVALID_HANDLE_VALUE, guidAction, wtd); 
bool valid = (result == WinVerifyTrustResult.Success); 

filename - это не что иное, как .exe путь к файлу.

WinVerifyTrust(), упомянутый в приведенном выше коде, возвращает «WinVerifyTrustResult.Success» только в том случае, если машина подключена к интернету хотя бы один раз.

Однако на новой машине он возвращает «0x800b0100» i.e.- «Trust_e_nosignature».

Ожидаемое поведение? Если да, то как его решить?

Я искал это конкретное поведение, но не нашел удовлетворительного ответа.

+0

Это не отличается от реальной жизни. Если вы продаете свой дом кому-то, как вы можете быть уверены, что можете доверять покупателю, кто он говорит, что он есть, и контракт, который он подписывает, будет юридическим документом? Вы идете к нотариусу, вы должны выйти из дома. Нотариус здесь является эмитентом сертификата, например Verisign, выход из дома требует подключения к Интернету. –

ответ

2

Windows (7+) поставляется с очень ограниченным набором корневых сертификатов.

Данные загружаются по требованию. Это может быть причиной того, что подпись подлинника подлинности не может быть проверена, если компьютер никогда не был подключен к Интернету до этого (но все же, я полагаю, что просто подключение к Интернету недостаточно, но некоторые серфинг на https-страницах или проверка подлинности подписи необходимо, чтобы загрузился «правильный» корневой сертификат).

Вы можете проверить это, проверив/подсчитав сертификаты ca, которые установлены в Internet Explorer до и после подключения к Интернету.

+0

Привет, MrTux, Большое спасибо за ваш быстрый ответ. Добавление настроек прокси-сервера решает мою проблему. Но в нашем случае их много пользователей, которые намеренно не хотят подключаться к Интернету. Тогда становится очень сложно. Мой вопрос: как обойти эту ситуацию? Знаете ли вы какие-либо настройки, которые мы можем сказать пользователям, чтобы они следовали на своей машине? Или это похоже - для этого API интернет-соединение является обязательным. – Tausif

+1

Мне не известны обходные пути, помимо установки необходимых корневых сертификатов вручную (или с использованием активного каталога или чего-то еще). Также Windows даже сама не может проверить подпись без сертификата root ca. – MrTux

+0

Вы также можете попытаться использовать более ручную проверку сертификатов, настроив свой собственный certstore в памяти, который содержит корневой сертификат, и проверьте его, как описано здесь: http://stackoverflow.com/q/2008519/3906760 – MrTux