如何在winrt应用程序中使用自签名证书进行https与iis的通信

时间:2014-11-19 23:15:05

标签: ssl windows-runtime ssl-certificate self-signed

我对洞穴认证领域很陌生,我目前正在粉碎我的winrt应用程序,以便在我的IIS网络服务器上通过https使用自签名证书。 这些是我目前的步骤。

创建证书:根证书,服务器证书和客户证书。

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\makecert" -r -pe -n "CN=appCA" -sr CurrentUser -a sha1 -sky signature -cy authority -sv appCA.pvk appCA.cer
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\makecert" -pe -n "CN=appServerCA" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic appCA.cer -iv appCA.pvk -sv appServerCA.pvk appServerCA.cer
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\makecert" -pe -n "CN=appclientCA" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.2 -ic appCA.cer -iv appCA.pvk -sv appclientCA.pvk appclientCA.cer
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\pvk2pfx" -pvk appServerCA.pvk -spc appServerCA.cer -pfx appServerCA.pfx
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\pvk2pfx" -pvk appclientCA.pvk -spc appclientCA.cer -pfx appclientCA.pfx

我在"受信任的根证书颁发机构"中安装了appCA.cer。 IIS服务器并使用IIS导入appServerCA.pfx。我使用appServerCA创建了https绑定。

在我在appxmanifest中添加的客户端WINRT应用

<!--Certificates Extension-->
<Extension Category="windows.certificates">
  <Certificates>
    <Certificate StoreName="Root" Content="appCA.cer" />
    <Certificate StoreName="My" Content="appclientCA.cer" />
    <TrustFlags ExclusiveTrust="true" />
    <SelectionCriteria AutoSelect="true" />
  </Certificates>
</Extension>

我还在HttpClient中添加了一个HttpClientHandler

HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
this.httpClient = new HttpClient(clientHandler, true);

但如果我拨打https网址,我会收到以下内部异常:

底层连接已关闭:无法为SSL / TLS安全通道建立信任关系。&#34;

1 个答案:

答案 0 :(得分:0)

我不了解WinRT,但客户端需要在受信任的根存储中拥有appCA.cer证书才能信任服务器。此外,如果您需要客户端使用证书进行身份验证,则需要使用与客户端证书相对应的私钥。在.NET中,可以使用X509Certificate2类,不知道WinRT世界中是否存在类似的东西。