服务器模式SSL必须使用带有关联私钥的证书:X509Certificate2

4

我使用SslStream构建web服务器。不过,当进行AuthenticateAsServer操作时,下面的代码会抛出异常。

static X509Certificate cert;
protected virtual Stream GetStream(TcpClient client)
{
        var ss = new SslStream(client.GetStream(), false);
        if (cert == null)
        {
            cert = X509Certificate2.CreateFromCertFile("test.cer");
        }
        ss.AuthenticateAsServer(cert, false, System.Security.Authentication.SslProtocols.Tls, true);
        return ss;
}

我已经使用X509Certificate2加载了证书文件,为什么仍然会抛出异常(服务器模式SSL必须使用带有关联私钥的证书)?

该证书文件是使用以下命令创建的:

makecert    
    -pe                                     Exportable private key
    -n "CN=localhost"                       Subject name
    -ss my                                  Certificate store name
    -sr LocalMachine                        Certificate store location
    -a sha1                                 Signature algorithm
    -sky signature                          Subject key type is for signature purposes
    -r                                      Make a self-signed cert
    "test.cer"                            Output filename
1个回答

6
makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx -pi <password>

var certificate = new X509Certificate("path\server.pfx", "password");

谢谢,这个很好用。不过我必须使用新的X509Certificate2(而不是X509Certificate)。 - Drakarah
错误:无法为主题('server.pvk')创建文件。Windows 有一个 UI 来处理所有事情,他们不能在一秒钟内制作一个按钮来解决这个问题吗? - The Muffin Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接