|
|
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Сорри несколько за глупый вопрос. Просто проект нужно сдать в понедельник. Время поджимает и реально не успеваю. Что нужно: на основе сертификата (выбирается вручную из установленных) подписать файл цифровой подписью, а потом проверить эту самую подпись. Стало быть как сделать? Если кто-нибудь кинет рабочим примером на Дельфи, буду очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2007, 11:16 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Вам ответил на форуме КриптоПро Кирил Соболев... а это наверное единственный человек... отвечающий на вопросы сторонних разработчиков... использующих продукты борланда И ответил правильно... дал сылку на sample в си-исходниках... казалось бы, что еще требуется специалисту... вы же начали клянчить код на паскале... Что могу добавить еще по теме... вам требуется научиться пользоваться минимальным набором функций "Simplified Message Functions" из крипто раздела msdn зы: или назвать сумму вечнозеленых... с которой вы готовы расстаться... чтобы другие люди писали за вас код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2007, 13:31 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
На форуме КриптоПро вопрос задавал человек, который ушел в отпуск. А эту задачу теперь повесили на меня. Я с такими вещами никогда не работал и поэтому решил написать здесь. CryptoAPI я сейчас активно изучаю, но и еще хотелось бы посмотреть на код-пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2007, 14:17 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
тогда остается только повторить... что исходники примеров растут тут: http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip раздел msdn по CryptoAPI можно почитать тут: http://msdn2.microsoft.com/en-us/library/aa380252.aspx CryptoAPI message functions consist of two groups of functions: low-level message functions and simplified message functions. Simplified message functions are at a higher level and wrap several low-level message functions and certificate functions into single functions that perform a specific task in a specific manner. These functions reduce the number of function calls needed to accomplish a task, thereby simplifying CryptoAPI use. For an overview of simplified messages, see Simplified Messages. а из них только вот эти две: CryptSignMessage CryptVerifyDetachedMessageSignature (CryptVerifyMessageSignature) код за вас я писать не буду, но на конкретные вопросы (подкрепленные самостоятельно написанным кодом) отвечу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2007, 14:49 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Добрался до функции function CertFindCertificateInStore(hCertStore :HCERTSTORE; dwCertEncodingType :DWORD; dwFindFlags :DWORD; dwFindType :DWORD; const pvFindPara :PVOID; pPrevCertContext :PCCERT_CONTEXT ):PCCERT_CONTEXT ; stdcall; Не моуг понять что должно быть указано в параметре pvFindPara? Знаю что это должно быть название сертификата. Пробовал искать его в личных сертификатах, но где оно там написано не понял. Там есть инфа о том кому выдали сертификат, кто выдал, когда выдали и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 11:53 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
может эта статейка тебе поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 14:46 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
LimonFXДобрался до функции function CertFindCertificateInStore(hCertStore :HCERTSTORE; dwCertEncodingType :DWORD; dwFindFlags :DWORD; dwFindType :DWORD; const pvFindPara :PVOID; pPrevCertContext :PCCERT_CONTEXT ):PCCERT_CONTEXT ; stdcall; Не моуг понять что должно быть указано в параметре pvFindPara? Знаю что это должно быть название сертификата. Пробовал искать его в личных сертификатах, но где оно там написано не понял. Там есть инфа о том кому выдали сертификат, кто выдал, когда выдали и т.д. Вот это уже более конструктивный разговор.... http://msdn2.microsoft.com/en-us/library/aa376064.aspx Я не совсем понял, что подразумевается под под "названием сертификата", у него куча атрибутов, но предположим, что это CERT_FIND_SUBJECT_STR для dwFindType... msdn однозначно говорит, что pvFindPara для CERT_FIND_SUBJECT_STR должен быть data type: null-terminated Unicode string... т.е. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 15:19 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
C предыдущим вопросом я уже разобрался - сертификат находит. Теперь другая проблема. Функция CertNameToStr возвращает не нулевое значение, а вот Cert_name почему-то пустой. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 16:11 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Может данная статья поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 16:17 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Сам нашел свою ошибку. Забыл вот эту строчку написать в коде Cert_name:= StrAlloc(2048); :) Альт Допустим я вытащил цифровую подпись из сертификата. Дальше мне нужно проверить подписанный файл. Какую из след. функции мне использовать, в чем их разница? CryptSignMessage или CryptVerifyDetachedMessageSignature ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 17:58 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
LimonFXСам нашел свою ошибку. Забыл вот эту строчку написать в коде Cert_name:= StrAlloc(2048); :) Допустим я вытащил цифровую подпись из сертификата. Дальше мне нужно проверить подписанный файл. Какую из след. функции мне использовать, в чем их разница? CryptSignMessage или CryptVerifyDetachedMessageSignature Плохо искал ошибку... узнай, что такое "Retrieving Data of Unknown Length"... пройдет желание писать "StrAlloc(2048)" )) Самое забавное, что ничего тебе уже не надо... ты поймал контекст сертификата, а именно с ним и работают сипл-функции Первая подписывает... вторая проверяет detached подписи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 19:13 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Со StrAlloc потом буду разбираться, не столь важно это сейчас. На данный момент EXEшник собирается и даже работает, но результатом проверки подписи является такая вот ошибка NTE_BAD_ALGID. Вроде как не нравится используемый алгоритм. Хотелось бы узнать на что нужно в первую очередь обратить внимание, чтобы узнать причину этой ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 12:48 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
NTE_BAD_ALGID The hHash handle specifies an algorithm that this CSP does not support. Покажи, какие константы CALG_* использовал? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 12:58 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
ALG_ID нигде не использовал. Где его нужно указывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 14:01 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
LimonFXСо StrAlloc потом буду разбираться, не столь важно это сейчас. На данный момент EXEшник собирается и даже работает, но результатом проверки подписи является такая вот ошибка NTE_BAD_ALGID. Вроде как не нравится используемый алгоритм. Хотелось бы узнать на что нужно в первую очередь обратить внимание, чтобы узнать причину этой ошибки? А как именно выполняется проверка? Например CRYPT_VERIFY_MESSAGE_PARA обязательно должна быть предварительно занулена и потом наполнена... размер cbSize должен быть правильным... подкрепляйте вопрос кодом, гадание на кофейной гуще утомляет... для CryptVerify* NTE_BAD_ALGID The message was hashed and signed by using an unknown or unsupported algorithm. Как вариант... в системе отсутствует необходимый провайдер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 14:03 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 14:11 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
LimonFXГде его нужно указывать? В CryptCreateHash например... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 14:13 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Предположим, что подпись и сообщение читаются правильно... и содержат все необходимые данные.... Ну и заполняется вами вроде вся структура... хотя и тут есть свой нюанс: VerifyPara.hCryptProv := hProv; хендл какого провайдера вы сюда подпихиваете? может ну его нафик... жираф то большой и ему видней... скиньте в ноль... он сам проверить провайдеров в системе на факт реализации необходимых алгоритмов VerifyPara.hCryptProv := 0; Надеюсь и калбек (MySignerCertificateCallback) делает, что нужно а подписывалось на каком HashAlgorithm.pszObjId? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 15:31 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Вообщем задача немного поменялась. Теперь все в одном флаконе (инфа и подпись в одном файле), т.е. не detached. Старый код выбросил, залез на msdn, нашел там подходящий пример и на его основе сделал вот этот код: Код: 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. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2007, 17:33 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Нда... очень смешно про "szOID_PKCS_7"... ты где взял этот код? короче уломал ты меня писать за тебя... готовь деньги Вот слепленная на скорую руку реализация поверх твоей Код: 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. у тебя прототипы функций неправильные... ты используешь очень странный алгоритм хеширования... он вообще вычисляется перепобором по-хорошему Я заморачиваться не стал и просто вложил сертификат в подписанное attached сообщение... потому верификация выглядит так скромно... специфичных мементов в этом коде вагон и маленькая тележка... разбирайся... удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2007, 11:24 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
потерял все парные FreeMem в коде есть утечки... только заметил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2007, 11:31 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Про код я уже писал. За основу взял СИшный пример с MSDN. Ну вообщем, спасибо. Будем разбираться, а там глядишь и знающий человек с отпуска вернется. P.S: еще немного и я смело могу программистом идти работать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2007, 14:36 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
ты прогу домучал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 12:32 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
У меня таже проблема. Попробовал код, любезно предоставленный Альт 'ом, но на строчке Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 07:15 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Давайте сверять прототипы функций и типов. Я тоже.. в свое время... стучал головой в монитор... например вот такой нюанс: WinCrypt.pas Код: 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. Ну и давайте показывайте все ваши используемые прототипы... танцуя от CryptSignMessage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 12:05 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
а вас не затруднило бы выложить фаил wincrypt.pas ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 13:24 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Спросите гугль по WinCrypt.pas Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 13:51 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Вот этой части Код: plaintext 1. 2. 3. АльтНу и давайте показывайте все ваши используемые прототипы... танцуя от CryptSignMessage Т.е. мне сюда выложить исходники всех используемых прототипов? Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. И еще попутный вопрос: как вообще устроена логика? В системе установлены сертификаты (на некоторых несколько различных). Пользователь нажимает кнопку "Подписать", после этого он должен выбрать нужный сертификат и предоставив носитель (дикету или SmartCard или еще что) и введя пароль запускается процедура подписания? При этом в нашем примере мы вкладываем сертификат в подписаный документ, поэтому не надо устанавливать все сертификаты явно? Я вообще не несу чушь? )))) Давайте объясню задачу: у нас разрабатывается ПО "Делопроизводство". Сечас уже эксплуатируется в некотором объеме и постепенно наращиваем функционал. Ну вот начальство придумало чтобы документы были полность в электронном виде. Т.е. докладные, приказы, распоряжения и пр. были подписаны цифровой подписью. Кроме того так же буду проходить согласования тех. задания и договора. Внутри предприятия розданы всем СмакртКарты с уже выданными сертификатами от сервера. Естественно этого достаточно для документов внутри компании. Но вот не надо ли будет устанавливать каждому ВСЕ выданные сертификаты чтобы прошла проверка подписи? Сорри если сильно путано рассказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 01:49 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
В общем причину AV я вижу и она типична. Заголовочник содержит неправильные типы. Джеди-тим конечно подложила большую свинью всем дельфистам. Всегда сверяйте прототипы с оригиналами в msdn. Например, чтобы много не переделывать, можно привести все к такому типу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. и, соответственно, поменяется реализация подписи... Код: 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. По основам я только кратенько, чтобы подписать нам нужна приватная часть ключевой пары и с ней, обычно, связан сертификат, лежащий в личном хранилище, на машине владельца. Программное связывание или использование иных хранилищ в примере не разбирается. А чтобы проверить подпись достаточно иметь публичную часть пары и в этом примере она прекрасно себя чувствует в самом сертификате. Да, я подписал на связанном сертификате и вложил сам сертификат в сообщение. Итого на выходе у меня получился файл содержащий: исходное сообщение, подпись и сертификат, которым эта подпись была сооружена. зы: а где будет храниться приватный ключ дело ваше, на отчужденных ключевых носителях, в реестре или еще где, тут скорее только вопрос стоимости развертывания решения и требований к конфиденциальности от вашей СБ. Я работал и с параноиками и жадными ит-директорами. Везде свои плюсы )))))) Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 11:41 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
а еще вопрос какая версия делфи использовалась? у меня половина величин не распознается компилятором, на пример типы данных DWORD Cardinal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 13:54 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
uses Windows? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 20:46 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
а вот еще вопрос тут выложен пример но он ссылается на TForm1 с описанием пареметров окна. можно ли посмотреть код TForm1 для этого примера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 21:21 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Я его выдумал 5 сентября 2007 года... т.е. более 6 месяцев назад... просто глядя на код LimonFX... никакого кода у меня нет... что именно вам не понятно? старайтесь задавать вопросы в топике по криптографии, а не по базовым знаниям программирования Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 21:27 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
просто я привык разбираться во всем сам, на примерах, а для этого нужна полностью рабочая прога. я писал анологичную прогу на си на базе примера из мсдн, там у меня все получилось. а здесь ничего не выходит:( ладно буду дальше стараться понять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 22:22 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Статей хватает за оба глаза, например: http://rsdn.ru/article/crypto/cryptoapi.xml Ну и... http://www.podgoretsky.com/ftp/Docs/Delphi/CryptoAPI/ В оригинале это ^^ было тремя или четырьмя статьями... потому есть мысль, что Анатолий что-то потерял при выкладывании На предыдущей странице я давал ссылку на готовые примеры от компании КриптоПро http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip Ну и msdn, который стал уже давно бесплатным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 10:40 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
спасибо я пополним мою коллекцию програмных кодов на эту тему:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 16:35 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovankaспасибо я пополним мою коллекцию програмных кодов на эту тему:) пока вы что-то там копите... другие уже выписали XEnroll, CAPICOM и CNG ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 16:56 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
ну пример проги http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip на си:( на си у меня у самого есть:( причем собственного написания а остальные две ссылки я уже давно изучаю. у меня это уже есть:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 22:10 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovankaну пример проги http://www.cryptopro.ru/cryptopro/products/csp/20/sample-2-0.zip на си:( на си у меня у самого есть:( причем собственного написания можете подобное... идите в криптографы, а не тусуйтесь среди прикладников какая разница, какой язык из типовых для программирования... ведь это лишь инструмент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 22:28 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovanka на си у меня у самого есть:( причем собственного написания Ох, как это гордо было сказано Согласен с Альтом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2008, 22:40 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
я очень плохой програмист а цифровая подпись это мой диплом я в курсаче написал консольную прогу на си, теперь одна из поставленных задач это написать прогу на делфи с оконным интерфейсом возможностью выбора ключа из опр контейнера и нужного куска внутри текста для подписи. но вот на дефи у меня ничего не выходит:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 08:55 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovanka v> я очень плохой програмист v> а цифровая подпись это мой дипломну и зачем всё это ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 09:23 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovankaя в курсаче написал консольную прогу на си, теперь одна из поставленных задач это написать прогу на делфи с оконным интерфейсом возможностью выбора ключа из опр контейнера и нужного куска внутри текста для подписи. но вот на дефи у меня ничего не выходит:( В вашем задании нет ничего по теме топика... тут разбираются симпл-функции, а вам нужны лишь базовые... CryptAcquireContext/CryptReleaseContext, CryptGenKey/CryptExportKey, CryptCreateHash/CryptHashData/CryptDestroyHash и CryptSignHash/CryptVerifySignature... т.е. достаточно открыть/создать контейнер, открыть/создать ключевую пару, посчитать хеш по любым данным и зашифровать полученный хеш приватным ключем, экспортировать публичный ключ... все это есть в первых двух частях статьи про защиту секретов. Ничего не выходит потому, что вы лентяй и нюня. Начните писать хоть что-то приблизительно работающее и по ходу вашей работы я смогу ответить на вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 12:35 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
2 Альт Блин перепробовал все... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. С переменным успехом оба раза функция выполняется и даже создается файл test.sig. Но размер у него 9 255 712 и весь заполнен пустыми значениями. Пробовал в объявлении функции писать не CRYPT_SIGN_MESSAGE_PARA а PCRYPT_SIGN_MESSAGE_PARA. Результат тот же. Но сечас и так не работает. Опять Access viol... crypt32.dll. Пытался очистить StreamOut.Clear. Но так вообще не пашет. Я уже готов оговорить сумму за работоспособный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 06:51 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Спокойствие, смотрим на последний параметр в моем определении функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. И, само собой, в моем коде нет Pointer( cbSignedMessageBlob ) и быть не может, в принципе. Штатные телепаты подсказывают, что у вас в объявлении сидит Код: plaintext Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 07:22 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Хотя... вам можно написать и так: Код: plaintext Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 07:30 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Да про Pointer это я пытался различные варианты испробовать. Ну ессно отправил неправильный код. Сорри. Все что я говорил касалось и исходного варианта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 07:43 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
MiktorДа про Pointer это я пытался различные варианты испробовать. Ну ессно отправил неправильный код. Сорри. Все что я говорил касалось и исходного варианта. Не обманывайте меня... я не спал 20 часов за себя не ручаюсь. Вот попытка компиляции с Pointer( cbSignedMessageBlob ) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 08:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Просто у меня действительно в прототипе было Код: plaintext 1. Альт[Error] test.pas(100): Types of actual and formal var parameters must be identical не выскакивало и все компилировалось. Хорошо. Вот прототип Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 08:40 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Боже мой Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. И, что характерно, опять обманываете... вы уже сами запутались с каким именно юнитом WinCrypt у вас реально компилируется приложение... т.к. простая проверка на Код: plaintext Код: plaintext Код: plaintext Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 11:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Намек понял ) Готов возместить пивом потраченое на меня время ) На самом деле огоромное спасибо. Все подписывает. Если я еще не довел до белого коленя... Как теперь вывести на экран информацию о том кто подписал? Да, и вторая процедура тоже компилируется, но при втором вызове CryptVerifyMessageSignature говорит что "Не удалось проверить подпись". :( И еще... сверял с MSDN протопит фукнции CryptVerifyMessageSignature... там почемуто pbSignedBlob и pbDecoded объявлены как BYTE. ( вот ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 02:28 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Ну раз на проверке сертификата не скандалит на структуру "подписи", значит и правда подписали удачно... чтобы опять не переделывать код... поменяйте тип так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. вроде все. Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 12:30 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Да у меня так и сделано. Вот только при проверке - "Не удалось проверить подпись. 0x80090006 Неправильная подпись." :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 01:45 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
>на проверке сертификата это не я писал... это демоны... Выложите уже эту "подпись"... я не телепат... я программист Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 22:03 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
мне нужно включить в прграмму возможность выбора криптопровайдера из всех возможных. подскажите пожалуйста функцию в дельфи позволяющую вывести список всех доступных криптоправайдеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 09:00 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Привет, vovanka! Ты пишешь: vovankav> мне нужно включить в прграмму возможность выбора криптопровайдера из всех возможных. смотри описание Predefined Provider Types -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 12:22 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovankaмне нужно включить в прграмму возможность выбора криптопровайдера из всех возможных. подскажите пожалуйста функцию в дельфи позволяющую вывести список всех доступных криптоправайдеров перебираете функциями CryptEnumProviderTypes/CryptEnumProviders начиная с Index = 0 до тех пор пока не вернет ошибку ERROR_NO_MORE_ITEMS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 12:32 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Хотя стоп... vovanka, вы вообще читали ссылки, которые тут приводились по нескольку раз... вот первое же с CryptEnumProviders... http://www.podgoretsky.com/ftp/Docs/Delphi/CryptoAPI/list2.htm лень - это ваша беда Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 13:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
2 Альт Вот файлик с подписью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2008, 04:50 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Сейчас мозг себе сломаю... подпись правильна Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2008, 14:38 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Структурно правильная. Подпись заявлена именно от того сертификата, который в нее и вложен, дата использования у сертификата не просрочена, в szOID_KEY_USAGE (Digital Signature заявлено)... но на проверке получаю стабильное "0x80090006 Invalid Signature."... одолевает, кучу времени убил на перепроверках. Смущает внушительный список Extension, может использование сертификата ограничивает одна из них. Сейчас у меня уже каша в голове и не получается сообразить (может что-то в szOID_ENHANCED_KEY_USAGE). Вадим, давайте проведем эксперимент, я выкладываю самоподписной сертификат с приватным ключем вообще без ограничений на использование и подпись с моей машины. Проверяем в два этапа: 1. На первом просто валидируете мою подпись. Если все ок. Двигаемся дальше. 2. На втором вы импортируете сертификат с паролем 123, включив приватный ключ. Устанавливаете его в пользовательское хранилище и до кучи в хранилище доверенных корневых центров. Пользователь для поиска DPN, подписываете и проверяете подпись. Если опять все ок, то разбираемся с областью использования вашего сертификата. Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2008, 15:30 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Понял. Попробую. (я уже чуствую что пивом не обойдусь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2008, 04:54 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Все проходит на ура. И проверка вашего файла и подпись и проверка на месте. Miktor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2008, 05:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
В общем моя теория, что виноваты KU/EKU не подтвердилась, в приложении к посту проверочный сертификат с приватным ключем (пароль тот же, пользователь при поиске Test). Есть последняя мысль, что надо обязательно кормить систему корневым сертификатом и списком отзыва (у меня на проверке он конечно нагибает сеть, но по заявленным в сертификате путям и для CS-ROOTDC.crl и для CS-ROOTDC.crt ничего нет). Выложите их ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2008, 21:35 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Проверочный сертификат тоже все подписал и проверил успешно. У меня есть 3 корневых сертификата с именем CS-ROOTDC. Выложил в архиве... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2008, 02:28 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Зачем вам столько перевыпусков (да еще и не цепочкой)? Подошел второй. Перепроверил до кучи самую тоску Application Certificate Policy (szOID_APPLICATION_CERT_POLICIES = '1.3.6.1.4.1.311.21.10') Подписывает!, что с политикой: XCN_OID_KP_DOCUMENT_SIGNING = 1.3.6.1.4.1.311.10.3.12 The certificate can be used for signing documents. Вот по этому списку , что без него (как у вас). Все. Больше в сертификате нет узких мест. Вы морочите мне голову. Ваш сертификат выпущен от другой ключевой пары. Либо пара была пересоздана позднее. Очень жаль потраченное время. Ключевые пары обычно вообще не пересоздаются или в редких чп случаях... вроде ситуации компрометации. И корневые сертификаты так тоже не пересоздаются. Отформатируйте ключевой носитель. Создайте чистую пару. Создайте запрос своему ца именно от этой пары и выпустите на нем (текущем!) нормальный сертификат Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2008, 10:38 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Все стихло... я забыл последние тестовые сертификаты прикрепить. Корневой с приватным ключем для хранилища доверенных корневых. И тестовый, копия по всем ключевым атрибутам обсуждаемого. Пароли 123. И, в принципе, мне больше нечего добавить к теме симпл-функций. Все работает, если делать правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2008, 14:19 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Большущее спасибо. Удалил лишние корневые пары и все заработало. Надеюсь все-таки что время потрачено не зря и топик будет полезен еще кому-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2008, 01:49 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Снова я... Хочу вывести информацию о подписи (сертификате) Код: 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. Но ругается в функции pfnGetSignerCertificate на AccessViol... Может кто знает в чем тут дело? Сама проверка проходит нормально. Структура CertInfo благополучно заполняется 0-ми... Чего ему еще надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2008, 05:26 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Привет, а это снова я... душевно сидим ) похоже, что тема больше никому не интересна... Между вашей постановкой задачи и реализацией мало связей... или я опять не понял ваш код. Вам нужно поймать контексты сертификатов... и сделать это можно кучей способов... хотите про pfnGetSignerCertificate, давайте... она является калбек функцией и вызывается крипто ядром для поиска сертификата еще на этапе валидации ... сама attached подпись является, если утрировать, хранилищем сертификатов... вы делаете странные вещи… занулили структуру VerifyParams, а потом пытаетесь вызвать pfnGetSignerCertificate с нулевого адреса… какой в этом смысл? только не говорите, что в мсдн именно так выглядит пример... Я не знаю, что придумать, чтобы нам не лезть в дебри… давайте просто отработаем калбек и переберем сертификаты в подписи… Код: 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. а вообще вам все это не нужно... калбек интересен, например, когда мы хотим работать с альтернативными хранилищами сертификатов... например бд... лучше посмотрите на описание последнего параметра CryptVerifyMessageSignature, до CertFreeCertificateContext вы можете все что угодно делать в полученным в Certificate контекстом сертификата подписавшего... Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2008, 09:03 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
что-то у меня только сейчас мозг включился... исправляю дополнительную функцию сравнения... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Скажи, что с нами будет, если нам дадут все ни за что, Мы умрем в изумрудах, не сказав ничего (с) Магнитная Аномалия - В Изумрудах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2008, 12:43 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
интересна, я ее постоянно читаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2008, 21:00 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Да нет, это я извиняюсь за безграмотную постановку. Надо было действительно внимательней прочиться описание функции CryptVerifyMessageSignature. Кажется это все что мне надо. Т.е. хотелось бы подписать документ (проверив его валидность по срокам), потом проверить правильность подписи и в случае необходимости вывести информацию о сертификате. Больше ничего не надо. Ну может быть еще при настройке клиента, вывести список его личных сертификатов, чтобы выбрать тот, которым он будет подписывать. Но это можно сделать и в ручную. И опять же спасибо за помощ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 01:12 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Еще вопрос. (может не в тему) Не могу получить дату из CertInfo.NotAfter. Пытаюсь Код: plaintext 1. 2. 3. 4. 5. Выдает 1982 год. Ну вообще не ту дату. Нашел функцию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 02:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Валидация срока использования пойманного контекста выполняется, например, вызовом в лоб: Код: plaintext функция разбора дат Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. пример вызова Код: plaintext 1. 2. 3. 4. А вообще я не гордый и бедный... принимаю любые суммы на вебмани счет R153279149005 Раз уж писать код... тем более профильный, то делать это надо за вознаграждение. С уважением, Павел Данченко http://cryptocode.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 10:04 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Дык я вроде сразу предлагал :) (найду где продаются ВебМани обязательно отблагодарю) С датами все получилось. Спасибо. Последние 2 маленьких вопроса: Как получить имя серт. центра и владельца сертификата? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 03:28 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
MiktorДык я вроде сразу предлагал :) (найду где продаются ВебМани обязательно отблагодарю) С датами все получилось. Спасибо. Последние 2 маленьких вопроса: Как получить имя серт. центра и владельца сертификата? не сможешь поделицца исходниками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 09:17 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Miktor, упрощенно вот так... Код: 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. ну и примеры вызовов... Код: plaintext 1. 2. 3. 4. 5. Поиграйтесь с dwStrType у CertNameToStr и определитесь, что именно вам необходимо из данных, возможно хватит и флага CERT_SIMPLE_NAME_STR Если капать дальше, то OIDs описаны в разделе Name Properties в Platform SDK, до кучи типы X500 частично описаны таблицей в описании функции CertStrToName ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 13:30 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
renatonне сможешь поделицца исходниками? любой каприз за ваши деньги... все равно я напишу быстрее, чем вы сумеете понять суть ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 13:32 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
А где достать правильный файл CryptoAPI.pas ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 15:00 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
renatonА где достать правильный файл CryptoAPI.pas ??? Уже обсуждалось начиная от. Для полноценной работы так же необходимы оригинальный WinCrypt.h (7z) ( zip ) и MS Platform SDK... чем выше версии, тем лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 21:43 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Как сделать так чтобы в свойствах подписаннго файла появилась вкладка подписи и там уже показывались подписанные сертификаты???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 07:54 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
renatonКак сделать так чтобы в свойствах подписаннго файла появилась вкладка подписи и там уже показывались подписанные сертификаты???? Добрый день. Я не понял вопроса. Почти все обсуждение мы говорим об "присоединенной" подписи. Я уже озвучивал, что она по своей сути является хранилищем сертификатов. "показывались подписанные сертификаты" наверное имелось ввиду сертификаты подписавших... в примерах формировали подпись в файле test.sig, чтобы винда корректно открывала подпись в снапине... ".sig" можно заменить на одно из зарегистрированных расширений, к примеру так test.p7s. Или мы про программную реализацию... тогда вот так (я немного поменял обвязку кода, который уже приводил ранее в калбек функции GetSignerCertificate): Код: 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. тут уже нет никакой валидации подписи и она просто рассматривается как хранилище ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 09:33 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Так может вот этот скриншот пояснит мой вопрос, это свойтсва инсталлятора АдобеРидер 8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 09:40 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
renatonТак может вот этот скриншот пояснит мой вопрос, это свойтсва инсталлятора АдобеРидер 8 Зачем вы оверкворите.. неудобно же читать. То, что вы хотите... к теме топика не относится - это authenticode signature. Выполняется утилитами идущими в поставке почти всех девелоперских продуктов мс... подпись в лоб в использованием мастера и сертификата, который я выкладывал для примера тут ранее (у сертификата должна быть включена KU = Code sign или область использования неограниченна), с ком.строки запускаю: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:27 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Альт renatonТак может вот этот скриншот пояснит мой вопрос, это свойтсва инсталлятора АдобеРидер 8 Зачем вы оверкворите.. неудобно же читать. То, что вы хотите... к теме топика не относится - это authenticode signature. Выполняется утилитами идущими в поставке почти всех девелоперских продуктов мс... подпись в лоб в использованием мастера и сертификата, который я выкладывал для примера тут ранее (у сертификата должна быть включена KU = Code sign или область использования неограниченна), с ком.строки запускаю: Код: plaintext А где достать signtool.exe? В поставке делфи он есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:44 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
renatonА где достать signtool.exe? В поставке делфи он есть? Ну, имя тоже может отличаться (например signcode.exe)... не знаю про дельфи... потому утверждать не буду. Список, куда конкретно включены SignTool ищите в msdn, глянул каталоги... у меня на девелоперской машине они продублированы в куче мест... Microsoft SDK/Microsoft.NET 1.1/Microsoft.NET 2.0 и т.д. поколупайтесь в bin каталогах эмсишных продуктов... первое же найденное: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2008, 10:58 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
vovankaты прогу домучал? Прогу домучал. Вроде всё работает. Если есть вопросы то чем смогу, помогу. Но это было так давно, что я уже успел немного позабыть и уволится из того банка в котором писал эту программку, не знаю какова её судьба, но для себя исходнички успел скопировать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2008, 12:28 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
дай почитать пожалуста, для само образования:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 09:56 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
LimonFXC предыдущим вопросом я уже разобрался - сертификат находит. Ребят, такая же проблема. выложил вопрос здесь: http://programmersforum.ru/showthread.php?t=47254 http://www.cyberforum.ru/win-api/thread31754.html http://forum.vingrad.ru/forum/topic-257177/kw-certfindcertificatei-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82.html http://www.cryptopro.ru/cryptopro/forum2/default.aspx?g=posts&t=1319 ПОМОГИТЕ ПОЖАЛУЙСТА! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 16:41 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
О... Томск... единственный, известный мне город, где есть маршрутка двигающаяся со Спичечной фабрики на Карандашную ) один из самых любимых городов ) еще неделю назад я бы помог разобраться... сидя в том же лагерном... без всяких проблем ) Вопрос сишный и это первое... CertOpenStore без "MY_ENCODING_TYPE" и с закомментированным enc.type... на глаз мало чего ловится... покажите сертификат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 20:11 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Как-то я вчера больше о Томске мечтал... чем на код смотрел ) В общем, нормальный код... насколько он может быть нормальным для си )... соорудил пробник (в приложении сертификат с RDN CN='Gafarov_Artur') и запихнул его в личные... проверяю кодом: Код: 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. все работает, все находит... попробуйте моим вариантом, через CertOpenSystemStore и моим же сертификатом. зы: есть еще мысли про printableString в вашем RDN и допустимых символов в значении ('_' не входит в их число), но тут надо видеть ваш сертификат. Чем вы его сооружали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 09:06 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
О! Моя первая тема на sql.ru :) Помню тогда сильно погрузился в эту задачу, недели на две. Очень помогли примеры на msdn'e. Там правда код на Си, но на delphi с легкостью можно самому переписать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2010, 15:19 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Альт, спасибо! коды в теме полезные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2010, 14:58 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Да... Ребята... Тема интересная... Жаль что я ее смотрю )) Подскажите с чего начать?.. Допустим какие компоненты должны быть на 12 дельфе, библиотеки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2010, 17:22 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Люди, подскажите, как получить данные о сертификате, который находится в контейнере. Ну или ссыли, чет я уже совсем подзадолбался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 12:58 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Дабы не плодить тему... Нужно подписать сертификатом файл. Мой код: Код: 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. Размер возвращается но после этого пол секунды спустя Эксес Виолешн... Если запускать не из Delphi прога просто закрывается... для работы с cryptoAPI использую JwaWinCrypt.pas от JEDI Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2010, 12:12 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Не спешите меня хоронить, я тут регулярно появлюсь. Тут надо просто немного думать. Код: plaintext Код: plaintext Код: plaintext 1. Да и телепаты подсказывают, что у вас в SignedBlob мусор. Вызов CryptSignMessage должен быть двойным. На первом вы запрашиваете размер подписи, потом выделяете память, и лишь на повторном вызове получаете заветную подпись. Профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 09:38 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Альт. Сейчас если ставлю перед вызовом CryptSignMessage ваш код: Код: plaintext 1. или Код: plaintext 1. функция возвращает False. Но при этом приложение не падает. Если перед вызовом CryptSignMessage не ставить вышеприведённый код. То при первом вызове функция возвращает размер: Код: plaintext 1. но сразу после вылетает... с алгоритмом хеширования понятно: Код: plaintext 1. теперь так... посмотрел в сертификате "алгоритм подписи". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 13:34 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
GetLastError даёт 5... ERROR_ACCESS_DENIED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 15:51 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Ура! было: Код: plaintext 1. 2. 3. стало: Код: plaintext 1. 2. 3. сделал как у Альта... пока всё решилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2010, 09:08 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Хотя странно... в msdn именно PCRYPT_SIGN_MESSAGE_PARA . Но почему то при: Код: plaintext 1. 2. и вызове функции с этим параметром со знаком "@": Код: plaintext 1. Наблюдается как раз мой случай когда после возврата размера прога падает... хотя может дело в ключевом слове var которого в моём заголовочном файле от JEDI не было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2010, 09:17 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
всем привет в проекте использую шифрование и подпись файлов сертификатами функции CryptEncryptMessage / CryptDecryptMessage / CryptSignMessage / CryptVerifyMessageSignature все работает отлично, но есть момент при расшифровке и проверке подписи у файлов размером ~ 100 Мб и выше выскакивет ошибка Слишком большое значение ASN1" в инете ничего кроме http://www.sql.ru/forum/actualthread.aspx?tid=804878 не обнаружил там чел предлагает "Спасибо, скорее всего нужно блоками дробить." пробовал расшифровывать кусками - копирую в дополнительный буфер часть файла и на расшифровку ошибка - "В ASN1 встречен неожиданный конец данных" наталкивает на мысль что я неправильно загоняю данные в буфер вот кусок кода (на тестировании подразумеваю что файл больше 100 Мб, но всего 2 куска) Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2011, 16:06 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Откажись от высокоуровневых функций: CryptVerifyMessageSignature и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2011, 19:56 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Пытаюсь найти установленный в системе тестовый сертификат от КриптоПро. За основу взят код из первых сообщений данной темы При поиске по отпечатку сертификат не найден, GetLastError возвращает ошибку 0x80092004 Объект или свойство не найдено Код: pascal 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. Хочется понять что делается мной не так? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2012, 14:27 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, я даже задумываться не хочу, что именно делает вот этот говнокод: exsander 0x80092004 Объект или свойство не найдено Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Хочется понять что делается мной не так? Заранее спасибо. при поиске там должен быть хеш в виде бина, т.е. если вам на влете приходит хеш в виде хекса, то и приводить его надо через HexToBin. Вы точно в правильном хранилище ищите? Сертификат не в MY? На глаз я больше особых проблем не вижу. В моих поделках эта функция объявлена вот так, сравнивайте со своим: Код: pascal 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. ну и вызов первого поиска тогда будет вот таким: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2012, 07:45 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Добрый день! С поиском я разобрался, сертификат находится, подписывает и шифрует файл. Непонятен остался один момент. При подписи файла, перед текстом сообщения и после него добавляется информация. При помощи утилиты cryptcp (КриптоПро-шная утилита командной строки) пытаюсь удалить подпись из сообщения. То что находится после текста, т.е. сама подпись удаляется, а вот то, что добавилось перед текстом - остается. это подписываемый текст Код: pascal 1. 2. 3. Это уже подписанный текст Код: pascal 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. а это текст после удаления подписи при помощи cryptcp Код: pascal 1. 2. 3. 4. 5. 6. Что это за инфа в начале текста, и если это часть подписи почему она не удалилась? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2012, 13:12 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Вопрос снят, ответ нашелся здесь: http://citforum.ru/security/articles/defense/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2012, 18:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
в теме встретился кусочек кода: Store := CertOpenStore( CERT_STORE_PROV_PKCS7, MY_ENCODING_TYPE, 0, 0, @Blob ); я так понимаю что это работает только в случае если не было пароля. а если есть пароль на сертификате - коим образом его указать? это должна быть другая команда для чтения такого сертификата? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 05:05 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
SereZaв теме встретился кусочек кода: Store := CertOpenStore( CERT_STORE_PROV_PKCS7, MY_ENCODING_TYPE, 0, 0, @Blob ); я так понимаю что это работает только в случае если не было пароля. а если есть пароль на сертификате - коим образом его указать? это должна быть другая команда для чтения такого сертификата? На сертификате пароля не бывает. Вы про PFX или про eToken? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 08:37 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
наверное про PFX... только PFXImportCertStore не хочет работать, пишет что не правильный алгоритм. PFXIsPFXBlob и PFXVerifyPassword замечательно работают. а вот PFXImportCertStore нет. и сам этот сертификат стандартным виндосовским мастером регистрации не устанавливается. в самом конце выдает ошибку про поставщика криптографии. здесь на форуме писали что нужен CSP - только на том сайте java апплет читает этот сертификат и регистрирует его в системе. никакой дополнительной программы при этом не устанавливается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 19:46 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
На каком "том сайте"? Вангую, что в сертификате у вас ГОСТовский ключ, который не распознаётся системой без установки соответствующего криптопровайдера, умеющего работать с алгоритмами ГОСТ. Откуда у вас вообще появился данный сертификат в PFX? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 20:32 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
никакой установки криптопровайдера не происходит. все делает java апплет. он может выполнять функции подобного криптопровайдера? своеобразный портэйбл-CSP? такой сертификат выдает налоговая. для своего сайта для отправки налоговой отчетности. задумка была сделать программу, которая бы могла проверять сроки действия и читать имя в подобных сертификатах на жестком диске. и второй момент, не совсем по теме - но рядом. существует некоторые интернет банкинки, которые как раз используют подобные CSP - там целая программа, что должна быть установлена, висит в процессах, работает как сервис. как можно объяснить браузеру чтоб он запустился без использования этого CSP? режим инкогнито хрома вроде как запускается без него... но проблема в том, что он не запоминает какой сертификат был выбран и опять выкидывает окно выбора сертификата при входе и зацикливается. (имелось в виду окошко с выбором уже установленных в системе сертификатов). как бы так хитро запустить браузер, чтоб и запоминал что выбрано и чтоб без использования CSP? принудительная остановка службы этого криптопровайдера не помогает. только если удалить полностью программы. а вот как бы без удаления... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 21:51 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
AntoshkaНа каком "том сайте"? Вангую, что в сертификате у вас ГОСТовский ключ, который не распознаётся системой без установки соответствующего криптопровайдера, умеющего работать с алгоритмами ГОСТ. Откуда у вас вообще появился данный сертификат в PFX? Похоже SereZa Delphi и CryptoAPI ]не читает ответы на свои вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 22:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Хорошая тема, помогла найти многие ответы на вопросы, но кое-что мне непонятно. Код: pascal 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. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. Какой-то код взят из этой темы, какой-то из других источников, и вот что интересно. У меня на компьютере установлено 5 различных сертификатов. Когда я пытаюсь подписать содержимое memo-поля сертификатом, у которого нет закрытого ключа, то выдаётся ошибка "0х8009200В Не удаётся найти сертификат и закрытый ключ для расшифровки". Делая то же самое сертификатом с закрытым ключом, получаю нормальный результат. Вопрос: почему не удаётся подписать содержимое сертификатом без закрытого ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2018, 10:55 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Подниму тему. Можно ли вообще подписывать что-либо сертификатом без закрытого ключа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 13:02 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
ShurakenПодниму тему. Можно ли вообще подписывать что-либо сертификатом без закрытого ключа? Нет. Подпись только закрытым ключом. Шифровать можно на открытом ключе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 13:51 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
спасибо большое за код! добавлю при подписи удобнее выбрать сертификат из установленных: pSignerCert :=CryptUIDlgSelectCertificateFromStore(hCertStoreHandle, self.Handle,'','',0,0,nil); и вставил (не знаю правильно ли)CryptAcquireCertificatePrivateKey(pSignerCert,CRYPT_ACQUIRE_CACHE_FLAG,nil,prov,@pdwKeySpec,@pfCallerFreeProv) перед CryptSignMessage(..) чтобы пароль два раза от контейнера не вводить А остался у меня такой вопрос - CryptVerifyMessageSignature возвращает исходные данные и сертификат которым подписано, а как достать "Время подписания (1.2.840.113549.1.9.16.2.47 )" через CryptoAPi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2018, 16:19 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
alexer81спасибо большое за код! добавлю при подписи удобнее выбрать сертификат из установленных: pSignerCert :=CryptUIDlgSelectCertificateFromStore(hCertStoreHandle, self.Handle,'','',0,0,nil); и вставил (не знаю правильно ли)CryptAcquireCertificatePrivateKey(pSignerCert,CRYPT_ACQUIRE_CACHE_FLAG,nil,prov,@pdwKeySpec,@pfCallerFreeProv) перед CryptSignMessage(..) чтобы пароль два раза от контейнера не вводить А остался у меня такой вопрос - CryptVerifyMessageSignature возвращает исходные данные и сертификат которым подписано, а как достать "Время подписания (1.2.840.113549.1.9.16.2.47 )" через CryptoAPi? CryptUIDlgSelectCertificateFromStore - не особо будет удобен, когда есть сертификаты с одинаковым CN и т.п. (разные УЦ\разные SN, G- ФИО, которые ОС не покажет в этом списке) + эта функция может "тормозить", не использую её... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 12:30 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
поэтому - можно своё что-то изобразить всегда, если захочется, см. снимок выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 12:31 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
alexer81, Добавление атрибута даты в ЭЦП https://qa-help.ru/questions/dobavlenie-atributa-daty-v-ecp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 12:36 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2018, 12:47 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
sql2012, спасибо за ответы! ваша информация пригодится. Но в подписанном файле есть уже время подписания и потому мой вопрос: автор- CryptVerifyMessageSignature возвращает исходные данные и сертификат которым подписано, а как достать "Время подписания (1.2.840.113549.1.9.16.2.47 )" через CryptoAPi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:34 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
alexer81, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. + добавить проверку вызовов, выделение\освобождение памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 10:44 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
спасибо. разобрался. время конечно в в атрибуте с оид - szOID_RSA_signingTime. я приплёл 1.2.840.113549.1.9.16.2.47, не туда наверно глянул но почему-то атрибуты сразу через CryptMsgGetParam(..CMSG_SIGNER_AUTH_ATTR_PARAM..) не получилось взять взял через CryptMsgGetParam(..CMSG_SIGNER_INFO_PARAM..) в CMSG_SIGNER_INFO.AuthAttrs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2018, 15:50 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. нужно из контейнера достать Срок действия закрытого ключа "1.2.643.2.2.37.3.10" Для этого нужно перечислить расширения контейнера через GetProvParam(PP_ENUM_CONTAINER_EXTENSION). в документации КриптоПро определена получаемая структура : Код: plaintext 1. 2. 3. 4. 5. 6. делаю в delphi Код: pascal 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. и как тут получить нужные данные? cExtension.cbExtension = 19 это правильно cExtension.pbExtension[0] - первый байт, а остальные как брать? в cExtension.sOid не понятно что за символ, как взять полностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 11:45 |
|
||
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#18+
ну cExtension.pbExtension[0] - первый байт есть, и есть длина весь массив понятно есть. а с cExtension.sOid не понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 11:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040308]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
171ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 615ms |

| 0 / 0 |
