首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在TLS握手期间,服务器模式SSL必须使用具有关联私钥的证书

在TLS握手期间,服务器模式SSL必须使用具有关联私钥的证书
EN

Stack Overflow用户
提问于 2015-07-31 03:23:15
回答 3查看 10K关注 0票数 4

我有一个证书someCert.cer。我使用MMC工具将其导入到我的本地证书存储中。我的C#应用程序可以使用以下代码访问它:

代码语言:javascript
运行
复制
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属性是空的。我是否导入了错误的证书,或者在将证书导入到存储区之前,我是否应该对证书执行某些操作?

我的服务器身份验证代码如下所示:

代码语言:javascript
运行
复制
stream.AuthenticateAsServerAsync(certificate, false, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12, true);
EN

回答 3

Stack Overflow用户

发布于 2015-07-31 03:35:41

对于正确的tls握手,服务器需要将私钥与嵌入在证书中的公钥配对。当客户端连接时,会向其提供证书。这允许基于对颁发机构的信任来验证服务器就是它所说的那个服务器。在握手期间,客户端将生成对称加密密钥,该对称加密密钥使用来自证书的公钥为服务器加密。服务器将使用私钥的一半来解密对称密钥。

我在这里大大简化了握手过程。因此,对以上内容持保留态度。(无加密双关语)

票数 2
EN

Stack Overflow用户

发布于 2020-02-18 06:10:12

在Jesse的评论和Dave的回答之间,我可以断定我以某种方式创建并安装了某种部分证书,有点半途而废。

我使用makecert.exe制作了一个证书,并设法将其安装并加载到Kestrel中,但当来自Chrome的请求进入时,它失败了。

我找不到一份pvk2pfx.exe的副本,以便从makecert.exe踢出的两个文件中生成PFX文件,所以我只是试着不使用它。

在那次失败之后,并阅读了上面的内容,我认为PFX步骤是强制性的。所以我使用了经典的PowerShell 4 (PS6内核不会加载模块):

代码语言:javascript
运行
复制
> $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让我继续,这样等我不是很累的时候,我会对它进行排序。

票数 2
EN

Stack Overflow用户

发布于 2020-04-26 16:01:46

您是如何创建证书的?创建证书时,还会使用私钥对其进行签名,这正是您需要的。如果您已经导出了证书,那么您可能可以选择在某个时候提供密码。如果在导出时未提供密码,则导出证书时不带私钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31732365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档