【问题标题】:SslStream AuthenticateAsServer The credentials supplied to the package were not recognizedSslStream AuthenticateAsServer 提供给包的凭据未被识别
【发布时间】:2016-06-08 18:50:42
【问题描述】:

使用 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 权限 -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 交换 -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 文件中以便它们解析。

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

【问题讨论】:

    标签: c# ssl sslstream


    【解决方案1】:

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

    【讨论】:

    • 这似乎也为我解决了,从本地机器中删除证书并安装到当前用户工作。我假设它是用于开发的,因为当我们从 VS 运行调试时,我们并没有作为本地系统运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2021-05-31
    • 2014-07-27
    • 2011-01-20
    • 2015-01-11
    相关资源
    最近更新 更多