如何在X509Certificate中设置pkcs8私钥

时间:2017-06-14 15:49:19

标签: c# x509certificate dotnet-httpclient mutual-authentication pkcs#8

我正在为C#中的相互通信编写客户端(实际上是clr / cli)。这样做我面临着问题。当我运行它。

我在post方法中写了以下代码: -

    System::Net::ServicePointManager::SecurityProtocol = SecurityProtocolType::Tls12;

    HttpClient^ httpClient;
    Task<HttpResponseMessage ^> ^ resultTask;

    WebRequestHandler ^ clientHandler = gcnew WebRequestHandler();
    clientHandler->ClientCertificates->Add(state->ptrClientCert);//add certificate of client provided by server
    clientHandler->AuthenticationLevel = System::Net::Security::AuthenticationLevel::MutualAuthRequired;
    httpClient = gcnew HttpClient(clientHandler);

            httpClient->DefaultRequestHeaders->Accept->Add("application/octet-stream");

            HttpContent ^ httpContent = gcnew ByteArrayContent(state->postBody);
    httpContent->Headers->ContentType = gcnew MediaTypeHeaderValue("application/octet-stream");
  resultTask = httpClient->PostAsync(state->httpRequest, httpContent);   
    if (resultTask->Wait(DefaultTimeOut))
    //wait for finish
    {
    HttpResponseMessage ^ response = resultTask->Result;
    SetResponse(response, state->darkClientRef, state->ptrHttprequest, state->appLog);
    }

现在这个代码没有工作,因为它抛出了套接字异常“无法从传输连接读取数据:现有连接被远程主机连接强行关闭”。我的理解是,可能的原因可能是我无法在请求中设置我的私钥,因为服务器提供的客户端证书只有公钥。

现在我的问题是如何在此请求中设置我的私钥(采用PKCS8格式)?

我正在使用.Net framework 4.5.2。

编辑:

经过我的研究,我发现问题是,我没有在我的X509Certificate中设置我的私钥。我从不同的组件接收私钥。根据我的理解,以下方式是设置私钥的正确方法。

WebRequestHandler ^ clientHandler = gcnew WebRequestHandler();
            X509Certificates::X509Certificate2^ modCert = gcnew X509Certificates::X509Certificate2(state->ptrClientCert);
RSACryptoServiceProvider ^ rsaProvider;
rsaProvider = RSAConverter::DecodePrivateKeyInfo(privateKey); 
            modCert->PrivateKey = rsaProvider;
            clientHandler->ClientCertificates->Add(modCert);

我使用以下链接实现了DecodePrivateKeyInfo函数: -

http://www.jensign.com/opensslkey/opensslkey.cs

但是这个函数无法解析我的私钥(由openssl创建),因为它在CompareBytearrays函数中失败了。 有人可以帮我说明如何在X509证书中设置这个PKCS8格式密钥?

0 个答案:

没有答案