我尝试使用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)
我怎样才能使这个工作?
答案 0 :(得分:0)
问题是证书。
您需要在一个文件中包含带有关联私钥的证书才能使其生效。
所以jdehlin说here并创建一个包含证书和密钥的pfx文件。
执行此操作时,系统会要求您为pfx文件设置密码,这是您在密码字段中输入的密码,然后您只需链接pfx文件而不是crt文件。