将带有密码短语密钥的证书X509添加到Webservice请求

时间:2018-03-15 18:32:24

标签: c# rest x509 passphrase

我在向我的webService请求添加新的SSL证书时遇到了问题。

                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时。我必须添加第三个密钥(密码)才能获得响应。 ex :Add certificate via postman

我的问题是如何在我的请求中添加第三个参数(密钥)?#。

还有另一种方法可以为我的请求实施证书???

2 个答案:

答案 0 :(得分:0)

你可以使用那些整齐的小代码,让你做到这一点:

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;

答案 1 :(得分:0)

解决方案:

我浪费了大量时间来搜索如何在一次Rest调用中包含三个信息(Certificat.cer,certif.key和passphrase)。 解决方案很简单:

  1. 证书对象非常灵活:我可以封装 一个证书中的三个信息,使用OpenSSL称为(.pfx)。
  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. 所以现在我可以轻松地包含我的新证书而不会出现任何错误:)。