Запись сертификата с закрытым ключем на Рутокен Lite
Подскажите пожалуйста, каким образом можно записать объект X509Certificate2 на Рутокен Lite ?
Может есть примеры на C++/C# ?
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Рутокен → Техническая поддержка разработчиков → Запись сертификата с закрытым ключем на Рутокен Lite
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Подскажите пожалуйста, каким образом можно записать объект X509Certificate2 на Рутокен Lite ?
Может есть примеры на C++/C# ?
Здравствуйте.
Подскажите пожалуйста, каким образом можно записать объект X509Certificate2 на Рутокен Lite ?
Может есть примеры на C++/C# ?
Уточните, пожалуйста, через какой интерфейс необходимо записывать? Для чего будет применяться?
Строгих зависимостей от интерфейса нет. Хотя чем выше по уровню интерфейс, тем лучше.
Пишется маленькая утилита для получения сертификатов из Службы сертификатов Active Directory и записи их на Рутокен Lite без участия пользователя, с занесением дополнительной информации в MS SQL.
Строгих зависимостей от интерфейса нет. Хотя чем выше по уровню интерфейс, тем лучше.
Пишется маленькая утилита для получения сертификатов из Службы сертификатов Active Directory и записи их на Рутокен Lite без участия пользователя, с занесением дополнительной информации в MS SQL.
Смотрите пример для CryptoAPI в нашем SDK.
Должно подойти!
Да это я видел. Но там закрытый ключ уже записан.
В данный момент проблема с вызовом функции
IntPtr hProv = IntPtr.Zero;
string cspName = "Aktiv ruToken CSP v1.0";
CryptAcquireContext(ref hProv, null, cspName, PROV_RSA_FULL, CRYPT_NEWKEYSET);
Она выдает ошибку
Набор ключей не определен (0x80090019)
Вообще, хочется повторить функцию утилиты certutil:
certutil -user -csp "Aktiv ruToken CSP v1.0" -importpfx pfx.pfx
Она делает так, что рутокен предлагает выбрать из нескольких носителей нужный.
Может кому пригодится подсказка как на C# записать сертификат (X509Certificate2) на токен. На этом форуме я такого не нашел.
Создаем контейнер
CryptAcquireContext(ref hProv, null, "Aktiv ruToken CSP v1.0", PROV_RSA_FULL, CRYPT_NEWKEYSET);
Вытаскиваем закрытый ключ из нашего объекта certificate
RSACryptoServiceProvider key = (RSACryptoServiceProvider) certificate.PrivateKey;
byte[] privateKeyBinary = key.ExportCspBlob(true);
Записываем его на токен
IntPtr hKey = IntPtr.Zero;
CryptImportKey(hProv, privateKeyBinary, (UInt32) privateKeyBinary.Length, IntPtr.Zero, 0, ref hKey);
Потом привязываем к ЗК сертификат
CryptSetKeyParam(hKey, KP_CERTIFICATE, certificate.RawData, 0)
И не забываем подчищать за собой
CryptDestroyKey(hKey);
CryptReleaseContext(hProv, 0);
Всевозможные проверки, для наглядности тут не показал.
Узнать имя контейнера, после его создания можно вот таким образом
uint stringLength = 0;
if (CryptGetProvParam(hProv, PP_CONTAINER, null, ref stringLength, 0))
{
StringBuilder name = new StringBuilder((int) (stringLength + 1));
if (CryptGetProvParam(hProv, PP_CONTAINER, name, ref stringLength, 0))
{
return name.ToString();
}
}
Спасибо что самостоятельно разобрались! :)
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Рутокен → Техническая поддержка разработчиков → Запись сертификата с закрытым ключем на Рутокен Lite