我对洞穴认证领域很陌生,我目前正在粉碎我的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;
答案 0 :(得分:0)
我不了解WinRT,但客户端需要在受信任的根存储中拥有appCA.cer证书才能信任服务器。此外,如果您需要客户端使用证书进行身份验证,则需要使用与客户端证书相对应的私钥。在.NET中,可以使用X509Certificate2
类,不知道WinRT世界中是否存在类似的东西。