|
Получение электронной подписи из подписанного файла
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=20&msg=38802748&tid=1402255]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 352ms |
total: | 490ms |
0 / 0 |