Ошибка в надувном замке!открытый ключ сертификата не соответствует указанному значению - PullRequest
4 голосов
/ 17 мая 2011

помогите мне; я использую надувной замок для создания сертификата x.509 с частным / публичным ключом DSA, следующий код - то, что я использую:

SecureRandom randomdsa = новый SecureRandom ();

            DateTime startDatedsa = DateTime.Today;

            DateTime expiryDatedsa = DateTime.Today.AddYears(2); // Set whatever expiration date you want

            BigInteger serialNumberdsa = new BigInteger(1, BitConverter.GetBytes(DateTime.Now.Ticks));


            DsaKeyPairGenerator generatordsa = new DsaKeyPairGenerator();

            DsaParametersGenerator paramgen = new DsaParametersGenerator();

            paramgen.Init(512, 100, new SecureRandom());

            DsaKeyGenerationParameters genParamdsa = new DsaKeyGenerationParameters(new SecureRandom(), paramgen.GenerateParameters());

            generatordsa.Init(genParamdsa);


            AsymmetricCipherKeyPair keyPairdsa = generatordsa.GenerateKeyPair();

            DsaPrivateKeyParameters dsaprivkey2=  ((DsaPrivateKeyParameters) keyPairdsa.Private);


            X509V3CertificateGenerator certGendsa = new X509V3CertificateGenerator();

            X509Name dnNamedsa = new X509Name("CN= DSA with private ");

            certGendsa.SetSerialNumber(serialNumberdsa);

            certGendsa.SetIssuerDN(cert.IssuerDN); // a name of the issuer
            certGendsa.SetSubjectDN(dnNamedsa);

            certGendsa.SetPublicKey(keyPairdsa.Public);

            certGendsa.SetSignatureAlgorithm("sha512WithRSA");

            certGendsa.SetNotBefore(startDatedsa);

            certGendsa.SetNotAfter(expiryDatedsa);

            Org.BouncyCastle.X509.X509Certificate certdsa = certGendsa.Generate(ackp.Private); // a private key of the issuer

certGendsa.AddExtension (X509Extensions.AuthorityKeyIdentifier, true, new AuthorityKeyIdentifierStructure (cert)); // сертификат является полномочием

        certGendsa.AddExtension(X509Extensions.ExtendedKeyUsage, false, new ExtendedKeyUsage(us));
        certGendsa.AddExtension(X509Extensions.KeyUsage, true, new KeyUsage(KeyUsage. CrlSign|KeyUsage.KeyCertSign));
        certGendsa.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(false));

// приватные параметры:

            DSACryptoServiceProvider rcspdsa = new DSACryptoServiceProvider();
            DSAParameters parmsdsa = new DSAParameters();
            parmsdsa.X = dsaprivkey2.X.ToByteArrayUnsigned();
            parmsdsa.P= dsaprivkey2.Parameters.P.ToByteArrayUnsigned();
            parmsdsa.Q= dsaprivkey2.Parameters.Q.ToByteArrayUnsigned();
            parmsdsa.G= dsaprivkey2.Parameters.G.ToByteArrayUnsigned(); 

            rcspdsa.ImportParameters(parmsdsa);

            Pkcs12Store pkcs12Storedsa = new Pkcs12StoreBuilder().Build();

            byte[] importcertds = DotNetUtilities.ToX509Certificate(certdsa).Export(System.Security.Cryptography.X509Certificates.X509ContentType.Pkcs12, "password");
            var importcertdsa = new X509Certificate2(importcertds, "password");

            X509CertificateEntry cedsa = new X509CertificateEntry(DotNetUtilities.FromX509Certificate(importcertdsa));
            pkcs12Storedsa.SetCertificateEntry("DSACertificate", cedsa);
            pkcs12Storedsa.SetKeyEntry("DSAPrivKey", new AsymmetricKeyEntry(DotNetUtilities.GetDsaKeyPair(rcspdsa).Private), new[] { cedsa });

            pkcs12Storedsa.Save(File.Open("dsacert.pfx", FileMode.OpenOrCreate), "password".ToCharArray(), new SecureRandom());

            rcspdsa.PersistKeyInCsp = true;

            DSACryptoServiceProvider.UseMachineKeyStore = true;
            importcertdsa.PrivateKey = rcspdsa;// hear is the exception

// добавление сертификата текущему пользователю:

              var storedsa = new X509Store("Root", StoreLocation.CurrentUser);
              storedsa.Open(OpenFlags.ReadWrite);
            storedsa.Add(importcertdsa);
            storedsa.Close();

проблема в том, что я получаю исключение:

CryptographicUnexpectedOperationException: Сертификат не соответствует стандарту (открытый ключ сертификата не соответствует указанному значению ) Исключением является брошенная инструкция:

importcertdsa.PrivateKey = rcspdsa;

есть кто-нибудь, кто может мне помочь?

большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...