|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Помогите с созданием электроной подписи. Перечитал MSDN, статьи на форуме и не только. Везде предпологается, что сертификат уже знает, где мой приватній ключ. Но что делать, если при открытии свойств сертификата у него нет ссылки на приватный ключ, а сам ключ лежит в отдельной папке и совсем не в папке с сертификатами. Как мне указать сертификату, что я хочу использовать именно этот файл с приватным ключом? Исходя из документации догадываюсь, что я должен как-то загрузить его содержимое с контекст сертификата, но как ... И второй вопрос - почему при попытке вызвать hStoreHandle = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_STORE_READONLY_FLAG | CERT_SYSTEM_STORE_CURRENT_USER , L"My" ); неизменно получаю ошибку 5 (доступ запрещен), причеим на двух независимых машинах ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 20:45 |
|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Serg Khесли при открытии свойств сертификата у него нет ссылки на приватный ключ Если у тебя есть сертификат и закрытый ключ, то их надо связать CryptSetKeyParam за способ и механизм хранения закрытого ключа отвечает крипто-провайдер. Вот к нему и надо обращаться, если нужен закрытый ключ. Стандартный крипто-провайдер Windows хранит закрытые ключи в %AppData%\\Roaming\\Microsoft\\SystemCertificates\\My\\Keys сертификаты в %AppData%\\Roaming\\Microsoft\\SystemCertificates\\My\\Certificates имя файла сертификата соответствует SHA1 хэшу сертификата в hex формате имя файла ссылки на закрытый ключ - это свойство Subject Key Identifier/Идентификатор ключа субъекта Данные могут храниться и в реестре (см. в MSDN) Закрытый ключ должен быть связан со своим сертификатом, это обычно производится автоматически, когда сертификат устанавливается в систему (обычно в виде pfx файла с паролем), но если сертификат перенесли без закрытого ключа, то тогда ему неоткуда взяться на той машине, где есть сертификат. CryptAcquireCertificatePrivateKey Serg Khпочему неизменно получаю ошибку 5 попробуй CertOpenSystemStore ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 21:30 |
|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Cerebrum спасибо за помощь Но даже с ней я продвинулся недалеко. Видимо мой подход методологически неверен. Я пытаюсь реализовать метод, подсмотренный в парочке программ, а именно: у пользователя спрашивается папка с сертификатами, папка с приватным ключом. Затем для создания цифровой подписи берется ключ + пароль, видимо из папки подбирается нужный сертификат и потом формируется подпись. Может кто-то уже сталкивался с реализацией подобного алгоритма? Хотелось бы посмотреть на реализацию или хотябы перечень функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 10:23 |
|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Этот пример я смотрел в числе первых. Но первое - криптопровайдер не MicrioSoft; второе - как указать, что Store - это папка, а не отдельный файл. В перечне типа lpszStoreProvide я не нашел нужного. Потом предполагается, что найдя нужный сертификат я получаю ссылку и на приватный ключ, но сертификаты лежат в папке, а ключ на флешке и при просмотре свойств сертификата нет сообщения, то имеется приватный ключ. Именно из-за этого я и заключил, что сертификат ищется после открытия ключа, тем более, что в программе настроек от криптопровайдера именно так можно посмотреть сертификаты для ключа ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 11:26 |
|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Serg KhНо первое - криптопровайдер не MicrioSoft CryptoPro? значит нужно читать документацию к этому крипто-провайдеру у CryptoPro хорошая документация и есть форум Serg Khкак указать, что Store - это папка если сертификаты не установлены в систему, то никак, либо см. п.1 либо, открывай папку с сертификатами, открывай каждый сертификат как обычный файл, извлекай нужные характеристики из него с помощью CryptoAPI. Каждый сертификат это файл в формате ASN.1. Если хочешь можешь погрузиться в дебри этого формата, если не хочешь (например, тебе надо только имя субъекта извлечь), то используй стандартные функции CryptoAPI - это относительно просто. Примеры, есть в MSDN Serg Khнайдя нужный сертификат я получаю ссылку и на приватный ключ если сертификат установлен в систему и имеет приватный ключ ассоциированный с этим сертификатом, то тебе не нужно париться о том где он расположен и как его найти. Насколько я понял, твоя задача предоставить пользователю список имеющихся сертификатов, см. п.2, после того как пользователь выбрал нужный сертификат, подписать им то, что хочет пользователь. Ссылку на пример, того как это делается я уже привел выше. Закрытый ключ будет задействован автоматически при работе с выбранным сертификатом, потому что он связан с ним и образует единое целое - ЭЦП. Обо всем остальном позаботится CryptoAPI в связке с API твоего крипто-провайдера ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 11:43 |
|
CryptoAPI и privateKey
|
|||
---|---|---|---|
#18+
Serg KhНо даже с ней я продвинулся недалеко. Видимо мой подход методологически неверен. Я пытаюсь реализовать метод, подсмотренный в парочке программ, а именно: у пользователя спрашивается папка с сертификатами, папка с приватным ключом. Затем для создания цифровой подписи берется ключ + пароль, видимо из папки подбирается нужный сертификат и потом формируется подпись.Так эти программы может вообще не cryptoAPI, а какой-нибудь openSSL используют ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 13:11 |
|
|
start [/forum/topic.php?fid=57&msg=39784771&tid=2017652]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 139ms |
0 / 0 |