如何在 WinRT 应用中使用自签名证书与 IIS 进行 HTTPS 通信



>我对洞认证世界很陌生,我目前正在砸我的 winrt 应用程序,以通过 https 将自签名证书与我的 IIS 网络服务器一起使用。这些是我目前的步骤。

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

"C:Program Files (x86)Microsoft SDKsWindowsv7.1ABinmakecert" -r -pe -n "CN=appCA" -sr CurrentUser -a sha1 -sky signature -cy authority -sv appCA.pvk appCA.cer
"C:Program Files (x86)Microsoft SDKsWindowsv7.1ABinmakecert" -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 SDKsWindowsv7.1ABinmakecert" -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 SDKsWindowsv7.1ABinpvk2pfx" -pvk appServerCA.pvk -spc appServerCA.cer -pfx appServerCA.pfx
"C:Program Files (x86)Microsoft SDKsWindowsv7.1ABinpvk2pfx" -pvk appclientCA.pvk -spc appclientCA.cer -pfx appclientCA.pfx

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

在客户端 WINRT 应用程序上,我在 appx清单中添加

<!--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 URL,我会得到以下内部异常:

基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。

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

最新更新