Поиск закрытого ключа и сертификата на токене
Добрый день. При работе с токеном, получаю слот и успешно логинюсь. При поиске закрытого ключа и сертификата, ничего не находит, как можно локализовать проблему? Может что-то в реализации? Во время использовании Панели управления Рутокен пишет, что есть сертификат с ключами. Использую следующую реализацию:
using (var pkcs11 = new Pkcs11(Settings.RutokenEcpDllDefaultPath, AppType.MultiThreaded))
{
// Получить доступный слот
Console.WriteLine("Checking tokens available");
Slot slot = GetUsableSlot(pkcs11);
List<CKM> mechanisms = slot.GetMechanismList();
foreach (var item in mechanisms)
{
Console.WriteLine(item);
}
using (Session session = slot.OpenSession(SessionType.ReadWrite))
{
// Выполнить аутентификацию Пользователя
Console.WriteLine("User authentication");
session.Login(CKU.CKU_USER, "123456");
try
{
// Поиск закрытого ключа на токене
Console.WriteLine(" Getting private key...");
List<ObjectHandle> privateKeys = session.FindAllObjects(PrivateKeyAttributes);
// Поиск сертификата на токене
Console.WriteLine(" Getting certificate...");
List<ObjectHandle> certificates = session.FindAllObjects(CertificateAttributes);
// Подпись данных
byte[] signature = session.PKCS7Sign(file, certificates[0], privateKeys[0], null, SampleConstants.UseHardwareHash);
File.WriteAllBytes(FilePath + "test.pdf.sig", signature);
}
finally
{
session.Logout();
}
}
}
// Шаблон для поиска закрытого ключа ГОСТ Р 34.10-2001
static readonly List<ObjectAttribute> PrivateKeyAttributes = new List<ObjectAttribute>
{
// Объект закрытого ключа
new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY),
// Закрытый ключ является объектом токена
new ObjectAttribute(CKA.CKA_TOKEN, true),
// Идентификатор искомой пары
new ObjectAttribute(CKA.CKA_ID, SampleConstants.GostKeyPairId1),
};
// Шаблон для поиска сертификата ключа подписи
static readonly List<ObjectAttribute> CertificateAttributes = new List<ObjectAttribute>
{
// Объект сертификата
new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE),
// Сертификат является объектом токена
new ObjectAttribute(CKA.CKA_TOKEN, true),
// Идентификатор сертификата
new ObjectAttribute(CKA.CKA_ID, SampleConstants.GostKeyPairId1),
// Тип сертификата - X.509
new ObjectAttribute(CKA.CKA_CERTIFICATE_TYPE, CKC.CKC_X_509),
// Категория сертификата - пользовательский
new ObjectAttribute(CKA.CKA_CERTIFICATE_CATEGORY, SampleConstants.TokenUserCertificate)
};
При запросе механизмов получаю это (
CKM_RSA_PKCS_KEY_PAIR_GEN
CKM_RSA_PKCS
CKM_RSA_X_509
CKM_RSA_PKCS_OAEP
CKM_MD5
CKM_SHA_1
CKM_SHA224
CKM_SHA256
CKM_SHA384
CKM_SHA512
CKM_GOSTR3410_KEY_PAIR_GEN
CKM_GOSTR3410
CKM_GOSTR3410_DERIVE
CKM_GOSTR3411
CKM_GOST28147_KEY_WRAP
CKM_GOST28147_ECB
CKM_GOST28147
CKM_GOST28147_KEY_GEN
CKM_GOST28147_MAC
CKM_GOSTR3411_HMAC)