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

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


创建一个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

创建服务器证书:


  “ 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

创建客户端证书:


  “ 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



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

注意-在证书管理器中,当我单击它们时,他们会说“您具有与此证书对应的私钥”。

最佳答案

我想我知道了。这是一个权限问题,我将它们导入到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

10-08 16:43