powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / CryptoAPI и privateKey
7 сообщений из 7, страница 1 из 1
CryptoAPI и privateKey
    #39783948
Serg Kh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите с созданием электроной подписи. Перечитал MSDN, статьи на форуме и не только. Везде предпологается, что сертификат уже знает, где мой приватній ключ. Но что делать, если при открытии свойств сертификата у него нет ссылки на приватный ключ, а сам ключ лежит в отдельной папке и совсем не в папке с сертификатами. Как мне указать сертификату, что я хочу использовать именно этот файл с приватным ключом? Исходя из документации догадываюсь, что я должен как-то загрузить его содержимое с контекст сертификата, но как ...
И второй вопрос - почему при попытке вызвать
hStoreHandle = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_STORE_READONLY_FLAG | CERT_SYSTEM_STORE_CURRENT_USER , L"My" );
неизменно получаю ошибку 5 (доступ запрещен), причеим на двух независимых машинах
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39783961
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39784764
Serg Kh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cerebrum спасибо за помощь

Но даже с ней я продвинулся недалеко. Видимо мой подход методологически неверен. Я пытаюсь реализовать метод, подсмотренный в парочке программ, а именно: у пользователя спрашивается папка с сертификатами, папка с приватным ключом. Затем для создания цифровой подписи берется ключ + пароль, видимо из папки подбирается нужный сертификат и потом формируется подпись.
Может кто-то уже сталкивался с реализацией подобного алгоритма?
Хотелось бы посмотреть на реализацию или хотябы перечень функций.
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39784771
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39784782
Serg Kh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот пример я смотрел в числе первых.
Но первое - криптопровайдер не MicrioSoft; второе - как указать, что Store - это папка, а не отдельный файл. В перечне типа lpszStoreProvide я не нашел нужного. Потом предполагается, что найдя нужный сертификат я получаю ссылку и на приватный ключ, но сертификаты лежат в папке, а ключ на флешке и при просмотре свойств сертификата нет сообщения, то имеется приватный ключ. Именно из-за этого я и заключил, что сертификат ищется после открытия ключа, тем более, что в программе настроек от криптопровайдера именно так можно посмотреть сертификаты для ключа
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39784786
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg KhНо первое - криптопровайдер не MicrioSoft
CryptoPro?
значит нужно читать документацию к этому крипто-провайдеру
у CryptoPro хорошая документация и есть форум
Serg Khкак указать, что Store - это папка
если сертификаты не установлены в систему, то никак, либо см. п.1
либо, открывай папку с сертификатами, открывай каждый сертификат как обычный файл, извлекай нужные характеристики из него с помощью CryptoAPI. Каждый сертификат это файл в формате ASN.1. Если хочешь можешь погрузиться в дебри этого формата, если не хочешь (например, тебе надо только имя субъекта извлечь), то используй стандартные функции CryptoAPI - это относительно просто. Примеры, есть в MSDN

Serg Khнайдя нужный сертификат я получаю ссылку и на приватный ключ
если сертификат установлен в систему и имеет приватный ключ ассоциированный с этим сертификатом, то тебе не нужно париться о том где он расположен и как его найти.
Насколько я понял, твоя задача предоставить пользователю список имеющихся сертификатов, см. п.2, после того как пользователь выбрал нужный сертификат, подписать им то, что хочет пользователь.
Ссылку на пример, того как это делается я уже привел выше. Закрытый ключ будет задействован автоматически при работе с выбранным сертификатом, потому что он связан с ним и образует единое целое - ЭЦП. Обо всем остальном позаботится CryptoAPI в связке с API твоего крипто-провайдера
...
Рейтинг: 0 / 0
CryptoAPI и privateKey
    #39784849
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg KhНо даже с ней я продвинулся недалеко. Видимо мой подход методологически неверен. Я пытаюсь реализовать метод, подсмотренный в парочке программ, а именно: у пользователя спрашивается папка с сертификатами, папка с приватным ключом. Затем для создания цифровой подписи берется ключ + пароль, видимо из папки подбирается нужный сертификат и потом формируется подпись.Так эти программы может вообще не cryptoAPI, а какой-нибудь openSSL используют
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / CryptoAPI и privateKey
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]