2009-04-28 2 views
1

Мы хотим добавить автоматическое обновление программного обеспечения в наше приложение, но наша компания еще не готова купить сертификат подписи кода из доверенного корневого центра сертификации, поэтому мы будем использовать самозаверяющий сертификат для подписи обновлений кода (.exe и .dll).Как проверить бинарный файл, подписанный с самозаверяющим сертификатом?

Вопрос: как проверить бинарный файл, подписанный самозаверяющим сертификатом, без необходимости установки сертификата с использованием Microsoft Cryptography API? Файл .cer для проверки будет связан с приложением. Или проще использовать общую библиотеку Crypto?

ответ

3

Вы можете пропустить всю X509 вещь, в конце концов, вы действительно не нужно, если вы собираетесь использовать свои собственные сертификаты ...

За то, что вы хотите сделать, сначала нужно создайте свою частную/открытую пару RSA. Затем вы сохраняете открытый ключ в своем приложении.

Когда у вас есть обновление, вы подписываете его на своем сайте, получая MD5 или SHA-1 или любой другой хэш, который хотите использовать; то вы шифруете этот хеш с помощью закрытого ключа. Установленные приложения извлекают обновление и подпись (зашифрованный хеш); когда приложение получает двоичный файл, он вычисляет свой хеш, а затем расшифровывает другой, используя открытый ключ, и сравнивает их. Если они идентичны, то это действительное обновление, иначе вы отклоняете его и предупреждаете пользователя или что-то в этом роде.

С сертификатами X509, которые являются самоподписавшимися, механизм будет именно таким, но открытый ключ будет иметь кучу дополнительных данных, таких как идентификатор эмитента, который будет идентичным удостоверением.

0

Я, кажется, помню, как слышал о том, как несколько лет назад можно было использовать самоподписанные сертификаты, еще в дни Win2k, но он был очень взломан, совсем не подходит для публичного развертывания и, вероятно, был «исправлен». Если вы думаете об использовании какой-либо другой крипто-библиотеки или разрабатываете свои собственные, позаботьтесь: очень сложно отличить хороший крипто от плохого крипто.

Смежные вопросы