|
|
|
Как сделать цифровую подпись на основе сертификата
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38861312&tid=2040308]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 434ms |

| 0 / 0 |
