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

start [/forum/topic.php?fid=58&msg=35264814&tid=2040308]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 483ms |

| 0 / 0 |
