Добавить сертификат X509 с парольным ключом в запрос веб-сервиса

У меня проблемы с добавлением нового SSL-сертификата в мой запрос webService.

                var client = new RestClient(tokenUrl);
                string certif = String.Format("{0}/client.cer", CertifPath);
                string key = String.Format("{0}/client.key", CertifPath);

                if (File.Exists(certif) && File.Exists(key))
                {

                    X509Certificate2 cert = new X509Certificate2(certif, key); 
                    X509CertificateCollection collection1 = new X509CertificateCollection();
                    collection1.Add(cert);
                    client.ClientCertificates = collection1; 
                }

Я получаю в ответ: 400 не требуется SSL сертификат был отправлен nginx!!!!.

Кроме того: Когда я использую PostMan или SoapUI . Я должен добавить третий секретный ключ (фразу-пароль), чтобы получить ответ. пример: Добавить сертификат через почтальона

Мой вопрос: как я могу добавить этот третий параметр (секретный ключ) в мой запрос C#?

Есть еще один способ реализовать сертификат на мой запрос???

2 ответа

Решение

Решение:

Я потратил много времени на поиск того, как включить три информации (Certificat.cer,certif.key и passphrase) в один вызов Rest. Решение было простым:

  1. Объект сертификата очень гибок: я могу инкапсулировать три информации в один сертификат, называемый (.pfx), используя OpenSSL.
  2. Вы можете установить OpenSSL через: http://slproweb.com/download/Win64OpenSSL_Light-1_1_0g.exe
  3. После этого комманд: openssl pkcs12 -export -out certificate.pfx -inkey client.key -in client.cer.
  4. Создается новый файл: certificate.pfx.
  5. Так что теперь я могу легко включить свой новый сертификат без каких-либо ошибок:) .

Можете ли вы использовать этот аккуратный маленький кусочек кода, который позволит вам сделать именно это:

byte[] certBuffer = Helpers.GetBytesFromPEM(publicCert, PemStringType.Certificate);
byte[] keyBuffer  = Helpers.GetBytesFromPEM(privateKey, PemStringType.RsaPrivateKey);

X509Certificate2 certificate = new X509Certificate2(certBuffer, password);

RSACryptoServiceProvider prov = Crypto.DecodeRsaPrivateKey(keyBuffer);
certificate.PrivateKey = prov;
Другие вопросы по тегам