Невозможно получить закрытый ключ от Luna HSM через X509Store

Мне нужно использовать сертификат RA, хранящийся в SafeNet Luna HSM, чтобы добавить вторую подпись и сертификат RA в CSR в формате CMC, сгенерированные из клиентского приложения. Я стараюсь избегать использования CryptoAPI или CNG, поэтому решил попробовать Pkcs11Interop.Net.

После выполнения команд OpenSSL для обработки сертификата RA в формате .pfx я получил закрытый ключ в формате PKCS8, а затем импортировал сертификат RA и закрытый ключ в HSM.

С помощью X509CertificateParser, X509Certificate, AsymmetricKeyParameter а также RsaKeyParameter из BouncyCastle я получил открытый ключ.

      IObjectHandle publicKeyHandle = session.CreateObject(publicKeyAttributes);

С участием sourceDataполученный из запроса CMC, я мог получить дескриптор закрытого ключа, а затем и подпись после успешного установления сеанса. Нет проблем с проверкой подписи.

      byte[] sourceData = ConvertUtils.Base64StringToBytes(inputRequestCmc.RawData);
byte[] signature = session.Sign(mechanism, privateKeyHandles[0], sourceData);
session.Verify(mechanism, publicKeyHandle, sourceData, signature, out isValid);

Мой следующий шаг - завершить CSR... но у меня отсутствует загадка: x509Cert не имеет импортированного закрытого ключа.

      SignedCms finalCmc = new SignedCms();
finalCmc.Decode(Convert.FromBase64String(inputRequestCmc.RawData));

CmsSigner signer = new CmsSigner();
signer.Certificate = x509cert;

finalCmc.ComputeSignature(signer);
var cosignedCmc = finalCmc.Encode();

Пока я читаю, Как использовать закрытый ключ, который хранится в HSM и защищен паролем пользователя через Pkcs11Interop ИЛИ CNG?, Я понял, что не могу использовать privateKeyHandles для получения закрытого ключа, а затем нашел Pkcs11Interop.X509Store через Как мне преобразовать закрытый ключ, хранящийся в HSM, в SignedXml.SigningKey на C#.

Я все еще не могу получить закрытый ключ в X509Store. Согласно выпуску X509Store №1 , я дважды проверил, что CKA_LABEL а также CKA_IDимеют одинаковые значения для всех 3 объектов (закрытый ключ, открытый ключ и сертификат). В Pkcs11Admin я увидел все 3 объекта после того, как вошел в свой HSM через меню Token> Login> User login.

Затем я попробовал следующий код с Luna HSM...

          var store = new Pkcs11X509Store(LunaHsmManager.LibraryPath, LunaHsmManager.PinProvider);
    Pkcs11X509Certificate cert = store.Slots[0].Token.Certificates[0];

Мне удалось получить сертификат и открытый ключ. В cert.Info.KeyType значение - RSA, но cert.HasPrivateKeyObject по-прежнему показывает ЛОЖЬ и cert.GetRSAPrivateKey() возвращает NULL.

Итак, что мне не хватает в моем коде?

Спасибо

0 ответов

Другие вопросы по тегам