SslStream AuthenticateAsServer无法识别提供给包的凭据

时间:2016-06-08 18:50:42

标签: c# ssl sslstream

使用c#通过SSL与SslStream进行通信。我正在使用自己生成的证书并导入到带有certlm.msc的Windows证书库中。我收到以下异常"提供给包的凭据无法识别"在SslStream.AuthenticateAsServer()。

它似乎工作了一会儿,但随后停止了。这令人非常沮丧。我在这里阅读了很多文章,但没有找到我需要重新创建证书并导入它们的解决方案。我创建了这样的证书:

  1. 创建了CA:

      

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ makecert.exe" ^   -n" CN = CARoot" -r -pe -a sha512 -len 4096 -cy authority -sv CARoot.pvk ^   -ss -sr CARoot.cer

         

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ pvk2pfx.exe" ^   -pvk CARoot.pvk -spc CARoot.cer -pfx CARoot.pfx -po Test123

  2. 创建服务器证书:

      

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ makecert.exe" ^   -n" CN =%1" -iv CARoot.pvk -ic CARoot.cer -pe -a sha512 -len 4096 ^   -sky exchange -eku 1.3.6.1.5.5.7.3.1 -sv SslServer.pvk SslServer.cer

         

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ pvk2pfx.exe" ^   -pvk SslServer.pvk -spc SslServer.cer -pfx SslServer.pfx ^   -po Test123

  3. 创建客户端证书:

      

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ makecert.exe" ^   -n" CN =%1" -iv CARoot.pvk -ic CARoot.cer -pe -a sha512 ^   -len 4096 -sky exchange -eku 1.3.6.1.5.5.7.3.2 -sv SslClient.pvk ^   SslClient.cer

         

    " C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x64 \ pvk2pfx.exe" ^   -pvk SslClient.pvk -spc SslClient.cer -pfx SslClient.pfx -po Test123

  4. 我基本上是使用MSDN中的示例代码,我将SslServer和SslClient都放在我的lmhosts文件中,以便他们解决。

    注意 - 在证书管理器中,当我点击它们时,它们会说"您有一个与此证书相对应的私钥"。

1 个答案:

答案 0 :(得分:3)

我想我明白了。这是一个权限问题,我将它们导入localMachine证书管理器(certlm.msc),并且在我重启机器之后它没有工作,除非我以管理员的身份运行我的应用程序。从那里删除并使用currentUser Cert Man(certmgr.msc)进行安装。

注意 - 我也以稍微不同的方式制作证书,不确定这是否重要:

    makecert -ic CARoot.cer -iv CARoot.pvk -n "CN=SslServer2" -sv SslServer2.pvk -pe -sky exchange SslServer2.cer

    cert2spc SslServer2.cer SslServer2.spc

    pvk2pfx -pvk SslServer2.pvk -spc SslServer2.spc -pfx SslServer2.pfx -f