Выдать сертификат с унаследованным субъектом и провайдером криптографии - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть действующий сертификат в аппаратном токене, и я хочу создать еще один. Я использую оригинальный сертификат в качестве нового лица, подписавшего сертификат. новый сертификат должен наследовать поле темы и поставщика криптографии от исходного сертификата, но он должен иметь новую пару ключей. это мой код Он генерирует новый сертификат в моей системе и не наследует поставщика криптографии. Я хочу создать новый сертификат в аппаратном маркере в качестве исходного сертификата.

   X509Store store = new X509Store(StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly);
        foreach (X509Certificate2 c in store.Certificates)
        {
            var cert2 = c.Subject;
            if (cert2.Contains("CN=test"))
            {
                var objPkcs72 = new CX509CertificateRequestPkcs7();
                string strCertificate = Convert.ToBase64String(c.RawData);
                var inheritOptions = X509RequestInheritOptions.InheritNewSimilarKey & X509RequestInheritOptions.InheritSubjectFlag;
                objPkcs72.InitializeFromCertificate(X509CertificateEnrollmentContext.ContextUser, false, strCertificate,
                    EncodingType.XCN_CRYPT_STRING_BASE64,
                    inheritOptions);
                ISignerCertificate signer = new CSignerCertificate();
                CERTENROLLLib.CSignerCertificate signer2 = new CERTENROLLLib.CSignerCertificate();
                signer2.Initialize(false, X509PrivateKeyVerify.VerifyAllowUI, EncodingType.XCN_CRYPT_STRING_BASE64, strCertificate);
                objPkcs72.SignerCertificate = signer2;
                string c2 = "";
                objEnroll.InitializeFromRequest(objPkcs72);
                var message2 = objEnroll.CreateRequest(EncodingType.XCN_CRYPT_STRING_BASE64);
                var iDisposition = objCertRequest.Submit(CR_IN_BASE64 | CR_IN_FORMATANY, message2, templateName, CAAddress);
                string c3 = objCertRequest.GetCertificate(CR_IN_BASE64 | CR_IN_FORMATANY);

                X509Certificate2 cert = new X509Certificate2(LoadFromCertBase64String(c2));

                objEnroll.InstallResponse(InstallResponseRestrictionFlags.AllowNone, c3, EncodingType.XCN_CRYPT_STRING_BASE64, "");
            }

, и когда я использую var varititOptions = X509RequestInheritOptions.InheritNewS SimilarKey, встраиваемый var varitititptions = X509RequestInheritOptions.InheritNewSdentifKey & X50itubjectInher.her CertEnroll :: CX509CertificateRequestPkcs7 :: InitializeFromCertificate: запрошенное значение свойства пустое. 0x80094004 (-2146877436 CERTSRV_E_PROPERTY_EMPTY) "

...