![](/img/trans.png)
[英]SslStream.AuthenticateAsServer throws The server mode SSL must use a certificate with the associated private key
[英]The server mode SSL must use a certificate with the associated private key - during TLS handshake
我有证书someCert.cer
。 我使用 MMC 实用程序将它导入到我的本地证书存储中。 我的 C# 应用程序可以使用以下代码访问它:
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
X509Certificate2 certificate = null;
store.Open(OpenFlags.ReadOnly);
try
{
var certificateCollection = store.Certificates.Find(X509FindType.FindByThumbprint, "THUMBPRINT", false);
certificate = certificateCollection[0];
}
finally
{
store.Close();
}
该应用程序公开 TCP 套接字,当我尝试使用客户端应用程序连接到它时,出现异常: The server mode SSL must use a certificate with the associated private key
事实上,我的证书的 PrivateKey 属性是空的。 我导入的证书不正确还是应该在将证书导入商店之前对其进行处理?
我的服务器身份验证代码如下所示:
stream.AuthenticateAsServerAsync(certificate, false, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12, true);
对于正确的 tls 握手,服务器需要具有与嵌入在证书中的公钥配对的私钥。 当客户端连接时,它会显示证书。 这允许基于颁发机构的信任来验证服务器就是它所说的那个人。 客户端在握手期间将生成一个对称密码密钥,该密钥使用证书中的公钥为服务器加密。 服务器将使用私钥解密对称密钥。
我在这里过分简化了握手过程。 因此,对上述内容持保留态度。 (没有加密双关语意图)
在 Jesse 的评论和 Dave 的回答之间,我可以确定我以某种方式创建并安装了某种部分证书,对它进行了排序。
我已经使用makecert.exe
制作了一个证书,并以某种方式设法安装它并将其加载到 Kestrel 中,但是当来自 Chrome 的请求进来时它失败了。
我找不到pvk2pfx.exe
的副本,以便从makecert.exe
踢出的两个文件中制作 PFX 文件,所以我只是尝试在没有它的情况下继续。
在失败并阅读上述内容之后,我认为 PFX 步骤是强制性的。 所以我使用了经典的 PowerShell 4(PS6 Core 不会加载模块):
> $cert = New-SelfSignedCertificate -certstorelocation cert:\currentuser\my -dnsname windows
> $pwd = ConvertTo-SecureString -String 'password1234' -Force -AsPlainText
> $path = 'cert:\currentuser\my\' + $cert.thumbprint
> Export-PfxCertificate -cert $path -FilePath c:\DATA\~Scrap\windows.pfx -Password $pwd
归功于https://medium.com/the-new-control-plane/generating-self-signed-certificates-on-windows-7812a600c2d8
Tbh,我最初做了一半。 我在第一个在我的商店中生成证书的命令后停止了,但是当我从 Chrome 命中时,给了我一个与 Kestrel 堆栈不同的奇怪错误。 同样,出于某种原因需要 PFX 步骤。
目前我找不到信任签名者的方法,但 Chrome 让我继续,所以当我不太累的时候我会解决这个问题。
你是如何创建证书的? 创建证书时,还使用私钥对其进行签名,这正是您所需要的。 如果您已导出证书,您可能可以选择在某个时候提供密码。 如果导出时未提供密码,则导出证书时不带私钥。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.