使用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文件中,以便他们解决。
注意 - 在证书管理器中,当我点击它们时,它们会说"您有一个与此证书相对应的私钥"。
答案 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