Преобразование Pkcs11X509Certificate в X509Certificate2 для использования в качестве сертификата клиента ssl

Я новичок в этом... У меня есть сертификаты хранения safenet luna hsm. Мне нужно получить сертификат и использовать его в качестве клиентского сертификата в сеансе ssl. Я безуспешно пытаюсь использовать Pkcs11Interop (а также Pkcs11X509Store). Я не могу получить X509Certificate2 с закрытым ключом. вот что у меня есть: с Pkcs11X509Store:

      using (var store = new Pkcs11X509Store(@"c:\program files\Safenet\Lunaclient\cryptoki.dll", new ConstPinProvider(ConfigurationManager.AppSettings["pin"])))
        {
            Pkcs11X509Certificate cert = store.Slots[0].Token.Certificates.FirstOrDefault(p => p.Info.ParsedCertificate.SerialNumber.ToLower() == ConfigurationManager.AppSettings["certsn"].ToLower());
            //RSA rsaPrivateKey = cert.GetRSAPrivateKey();
            X509Certificate2 x509cert = cert.Info.ParsedCertificate;
            // here cert.HasPrivateKeyObject is true but x509cert.HasPrivateKey is false
        }

поэтому x509cert не работает как действительный сертификат для ssl...

с Pkcs11Interop:

      using (IPkcs11Library pkcs11Library = Settings.Factories.Pkcs11LibraryFactory.LoadPkcs11Library(Settings.Factories, Settings.Pkcs11LibraryPath, Settings.AppType))
            {
                ISlot slot = Helpers.GetUsableSlot(pkcs11Library);
                using (ISession session = slot.OpenSession(SessionType.ReadOnly))
                {
                    session.Login(CKU.CKU_USER, Settings.NormalUserPin);
                    List<IObjectAttribute> objectAttributes = new List<IObjectAttribute>();
                    objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE));
                    session.FindObjectsInit(objectAttributes);
                    X509Certificate2 x509cert  = new X509Certificate2();
                    List<IObjectHandle> foundObjects = session.FindAllObjects(objectAttributes);
                    string cka_id = "";
                    foreach (IObjectHandle foundObjectHandle in foundObjects)
                    {
                        List<IObjectAttribute> certAttributes = session.GetAttributeValue(foundObjectHandle, new List<CKA>() { CKA.CKA_VALUE, CKA.CKA_ID });
                        X509Certificate2 x509Cert2 = new X509Certificate2(certAttributes[0].GetValueAsByteArray());
                        if (x509Cert2.SerialNumber.ToLower() == ConfigurationManager.AppSettings["certsn"].ToLower())
                        {
                            cka_id = certAttributes[1].GetValueAsString();
                            x509cert  = x509Cert2;
                            break;
                        }
                    }
                    objectAttributes.Clear();
                    objectAttributes.Add(session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
                    foundObjects.Clear();
                    foundObjects = session.FindAllObjects(objectAttributes);
                    foreach (IObjectHandle foundObjectHandle in foundObjects)
                    {
                        List<IObjectAttribute> keyAttributes = session.GetAttributeValue(foundObjectHandle, new List<CKA>() { CKA.CKA_VALUE, CKA.CKA_ID });
                        if (cka_id == keyAttributes[1].GetValueAsString())
                        {
                            //how to assign private key to x509cert  ?
                            break;
                        }
                    }
                    session.FindObjectsFinal();

            

Есть ли способ получить X509Certificate2, который можно использовать позже в качестве сертификата клиента ssl?

Заранее благодарю за любую помощь.

/JS

1 ответ

Экземпляры классов, возвращаемыеPkcs11Interop.Storeбиблиотеку нельзя использовать в соединениях SSL. Это известное ограничение, вызванное ограниченной расширяемостью класса . Если вы хотите использоватьX509Certificate2объект с SSL-соединениями, вам нужно получить его из стандартного X509Store .

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