https使用手动ssl证书与kestrel useHttps

时间:2018-02-10 15:31:29

标签: c# ssl asp.net-web-api kestrel-http-server

我尝试使用https和.Net网络API设置一个简单的API。

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options =>
            {
                string key = {{private.key}} //is this the password it wants?
                options.Listen(IPAddress.Any, 50790);
                options.Listen(IPAddress.Any, 40354, listenOptions =>
                {
                    listenOptions.UseHttps("certificate.crt", key);
                });
            })
            .Build();

}

//{{private.key}} is the private key in a string.

使用它在启动和连接http时工作正常,但是一旦我尝试https,我就会收到很大的错误而且没有响应发送给客户端。

获得了来自加密的证书:ca_bundle.crt,certificate.crt和private.key。

这是我尝试使用https连接时出现的错误:

  

失败:Microsoft.AspNetCore.Server.Kestrel [0]来自的未捕获异常   IConnectionAdapter的OnConnectionAsync方法。   System.NotSupportedException:服务器模式SSL必须使用a   带有相关私钥的证书。在   System.Net.Security.SecureChannel.AcquireServerCredentials(字节[]&安培;   thumbPrint)在System.Net.Security.SecureChannel.GenerateToken(Byte []   输入,Int32偏移,Int32计数,字节[]&amp;输出)at   System.Net.Security.SecureChannel.NextMessage(字节[]传入,Int32   offset,Int32 count)at   System.Net.Security.SslState.StartSendBlob(Byte [] incoming,Int32   count,AsyncProtocolRequest asyncRequest)at   System.Net.Security.SslState.ProcessReceivedBlob(Byte []缓冲区,Int32   count,AsyncProtocolRequest asyncRequest)at   System.Net.Security.SslState.StartReadFrame(Byte []缓冲区,Int32   readBytes,AsyncProtocolRequest asyncRequest)at   System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest   asyncRequest)

我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:0)

问题是证书。

您需要在一个文件中包含带有关联私钥的证书才能使其生效。

所以jdehlin说here并创建一个包含证书和密钥的pfx文件。

执行此操作时,系统会要求您为pfx文件设置密码,这是您在密码字段中输入的密码,然后您只需链接pfx文件而不是crt文件。