使用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