|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите, как можно получить электронную подпись из подписанного файла? Например, у меня есть файл, который я подписал созданным мной сертификатом. После этого я отправляю его клиенту и хочу проверить его подпись. У клиента сертификат установлен. Мне кажется, что нужно пользоваться методом VerifyData экземпляра RSACryptoServiceProvider, но как из подписанного файла извлечь подпись (signature - третий параметр в функции) до меня не доходит. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 15:17 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 15:41 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Спасибо, но в примерах из приведенного поста человек работал с отделенной цифровой подписью. Я работаю с присоединенной и как отделить ее, а потом проверить пока еще не дошло... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 16:36 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronСпасибо, но в примерах из приведенного поста человек работал с отделенной цифровой подписью. Я работаю с присоединенной и как отделить ее, а потом проверить пока еще не дошло... Точно читали? http://msdn.microsoft.com/ru-ru/library/aedbc064(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 16:43 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
А может быть я путая терминологию... может быть это ЭЦП внутри данных. Визуально я вижу в свойствах программы новую вкладку "Цифровые подписи" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2014, 16:43 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronА может быть я путая терминологию... может быть это ЭЦП внутри данных. Визуально я вижу в свойствах программы новую вкладку "Цифровые подписи" Т.е речь о цифровых подписях в исполняемых файлах ... А на о CMS - присоединенная подпись... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 02:02 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, Тогда WinVerifyTrust в помощь... и с ней же: CryptCATAdminCalcHashFromFileHandle CryptCATAdminEnumCatalogFromHash CryptCATAdminReleaseCatalogContext CryptCATAdminReleaseContext ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 02:14 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012, да, мой вопрос как раз о цифровых подписях в исполняемых файлах. Простите, не понял, что значит "А на о CMS - присоединенная подпись..."? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 10:48 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronsql2012, да, мой вопрос как раз о цифровых подписях в исполняемых файлах. Простите, не понял, что значит "А на о CMS - присоединенная подпись..."? Читать как: "А не о CMS" CMS - Cryptographic Message Syntax . Т.е подписывается произвольный файл... Или было не понятно что такое "присоединенная подпись..."? shtuceronСпасибо, но в примерах из приведенного поста человек работал с отделенной цифровой подписью. Я работаю с присоединенной и как отделить ее, а потом проверить пока еще не дошло... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 11:12 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Я нашел кусочек кода. Он компилируется, но результат от входного параметра (файла) не меняется. У меня есть три файла. 1. Не подписанный 2. Подписанный мной (создал сертификат и подписал) 3. Подписанный сторонней компанией (взял AcroRd32.exe). Каждый файл не подписан... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149.
Когда я читал о цифровых подписях и подписанных файлах у меня сложилось ощущение, что для того чтобы проверить подписанный файл необходимо 1. Вычислить контрольную сумму файла без цифровой подписи (т.е. отсоединить подпись от подписанного файла иначе контрольная сумма будет другой) 2. Прочитать открытый ключ и расшифровать контрольную сумму, которая содержится в цифровой подписи 3. Сравнить эти контрольные суммы и убедиться, что файл не изменялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:06 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, И какая ошибка, где не проходит AcroRd32.exe по коду проверку? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:16 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
CatalogContext - не инициализируется (0x00000000) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:22 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
В идеале хотелось бы не только .exe проверять, .dll в перспективе тоже нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:24 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronВ идеале хотелось бы не только .exe проверять, .dll в перспективе тоже нужно. Нет разницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 12:56 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012, спасибо А с CatalogContext есть какие-нибудь предположения? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 13:18 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
И еще один вопрос, WinVerifyTrust проверяет только наличие подписи (подписан файл или нет)? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 13:26 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Я попробовал вызвать функцию CryptCATAdminEnumCatalogFromHash для файла "C:\Windows\system32\kernel32.dll", CatalogContext != 0, но файл не подписан, так что результат такой же... Может быть функция CryptCATAdminEnumCatalogFromHash работает не с каждым файлом? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 15:45 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
И еще, как выяснилось опытным путем. Файл может не иметь цифровой подписи, но проходить проверку функцией Код: plaintext 1.
если он по каким-либо причинам "нравится" windows (доверяет). Но если файл взят со "стороны", то только наличие сертификата у файла позволяет функции Код: plaintext 1.
завершаться с нулевым результатом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 16:20 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronИ еще, как выяснилось опытным путем. Файл может не иметь цифровой подписи, но проходить проверку функцией Код: plaintext 1.
если он по каким-либо причинам "нравится" windows (доверяет). Но если файл взят со "стороны", то только наличие сертификата у файла позволяет функции Код: plaintext 1.
завершаться с нулевым результатом. Не верю... (с). Без подписи - не проходит. С испорченной - не проходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 20:07 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, проверь: http://rghost.ru/59013754 входной параметр командной строки - файл для проверки (можно перетащить на иконку программы). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2014, 20:20 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012shtuceron, проверь: http://rghost.ru/59013754 входной параметр командной строки - файл для проверки (можно перетащить на иконку программы). А вы сами проверьте. Возьмите файл d3dx10_34.dll или kernel32.dll например. В свойствах этих файлов нет вкладки "Цифровые подписи". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 10:26 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronsql2012shtuceron, проверь: http://rghost.ru/59013754 входной параметр командной строки - файл для проверки (можно перетащить на иконку программы). А вы сами проверьте. Возьмите файл d3dx10_34.dll или kernel32.dll например. В свойствах этих файлов нет вкладки "Цифровые подписи". Отсутствие вкладки не говорит об отсутствии подписи . Signature verification Signed file, verified signature Signing date 6:21 PM 3/4/2014 Signers [+] Microsoft Windows [+] Microsoft Windows Verification PCA [+] Microsoft Root Certificate Authority Counter signers [+] Microsoft Time-Stamp Service [+] Microsoft Time-Stamp PCA [+] Microsoft Root Certificate Authority ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 11:02 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, соответственно, если этот файл (kernel32.dll) будет изменен - подпись не пройдет проверку в WinVerifyTrust. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 11:05 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
авторОтсутствие вкладки не говорит об отсутствии подписи. sql2012, спасибо, этого я не знал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 11:49 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
После того как мы узнаем, что программа подписано необходимо отсоединить данные от подписи, вычислить хеш данных и сравнить с хешем, который содержится в цифровой подписи. Гугл подсказал, что реализуется это с помощью функций CryptMsgOpenToDecode, CryptMsgUpdate, CryptMsgGetParam . В первом случае CryptMsgOpenToDecode я создаю объект для сообщения с присоединенной подписью, потом заполняю данными выделенный буфер для сообщения CryptMsgUpdate и извлекаю из него подпись CryptMsgGetParam Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Но в функции CryptMsgUpdate происходит ошибка 0х08009310B, как ее нужно обходить и как можно достучаться до цифровой подписи. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:26 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, Зачем так путаешь себя и тех, кто будет читать форум? По ТЗ тебе нужно что? Проверять подпись под исполняемым кодом (exe\dll) Зачем же использовать функции для проверки CMS (PKCS#7)? Аналогия: почему музыка не играет, когда я mp3 файл открываю в блокноте... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:30 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
0X8009310B - Неверный тег значение ASN1. Т.к. функция ждет одного формата, а приходит совсем другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:32 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012, в том то и дело, что наверное я не до конца понимаю как их проверять... Я писал, что: авторКогда я читал о цифровых подписях и подписанных файлах у меня сложилось ощущение, что для того чтобы проверить подписанный файл необходимо 1. Вычислить контрольную сумму файла без цифровой подписи (т.е. отсоединить подпись от подписанного файла иначе контрольная сумма будет другой) 2. Прочитать открытый ключ и расшифровать контрольную сумму, которая содержится в цифровой подписи 3. Сравнить эти контрольные суммы и убедиться, что файл не изменялся. Потом начал разбираться с функцией WinVerifyTrust Я писал: авторИ еще один вопрос, WinVerifyTrust проверяет только наличие подписи (подписан файл или нет)? Но изначально задача ставилась выполнить три пункта моих предположений. И мне показалось, что для их реализации сначала необходимо проверить существует ли цифровая подпись у файла или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:38 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
И еще, разве CMS не содержит в себе данные и данные о подписи и все это не образует подписанный файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:42 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronИ еще, разве CMS не содержит в себе данные и данные о подписи и все это не образует подписанный файл? Содержит и не только это... Все верно. Формат файла с подписью: CMS и формат EXE\DLL с "подписанным участком файла" - разные. Это уже понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 12:56 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012, понятно, спасибо. Но непонятно как работать с этим подписанным участком файла чтобы понимать, что сам файл не изменился или функция WinVerifyTrust как раз делает это? Просто я подписывал файл сертификатом и рассчитывал, что в коде программы мне необходимо извлекать открытый ключ, расшифровывать хеш,... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 13:51 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronsql2012, понятно, спасибо. Но непонятно как работать с этим подписанным участком файла чтобы понимать, что сам файл не изменился или функция WinVerifyTrust как раз делает это? Просто я подписывал файл сертификатом и рассчитывал, что в коде программы мне необходимо извлекать открытый ключ, расшифровывать хеш,... Все необходимое делает WinVerifyTrust. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 14:06 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
Огромное спасибо, правда. Можете еще в одном вопросе подсказать... Если встречается файл с CMS форматом подписи, функция WinVerifyTrust его заблокирует? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 14:31 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
И в еще одном... Если я тиражирую открытый ключ и хочу проверять приложение только по этому ключу (буду фильтровать по имени приложения), все остальные мне не нужны, как в этом случае осуществлять проверку? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 14:43 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceronОгромное спасибо, правда. Можете еще в одном вопросе подсказать... Если встречается файл с CMS форматом подписи, функция WinVerifyTrust его заблокирует? а разве этот вопрос не закрыт? Там формат файла другой, она не сможет проверить. И что значит "заблокирует"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 14:44 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
sql2012shtuceronОгромное спасибо, правда. Можете еще в одном вопросе подсказать... Если встречается файл с CMS форматом подписи, функция WinVerifyTrust его заблокирует? а разве этот вопрос не закрыт? Там формат файла другой, она не сможет проверить. И что значит "заблокирует"? Закрыт, просто хотел услышать о другом формате файла... Имел в виду не подтвердит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 14:52 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
А по этому вопросу есть какие-нибудь мысли? авторИ в еще одном... Если я тиражирую открытый ключ и хочу проверять приложение только по этому ключу (буду фильтровать по имени приложения), все остальные мне не нужны, как в этом случае осуществлять проверку? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 16:55 |
|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#18+
shtuceron, есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2014, 18:10 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1402255]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 339ms |
total: | 501ms |
0 / 0 |