private void ConfigureKestrel(KestrelServerOptions options) { var ipEndPointList = new List <IPEndPointConfig>(); foreach (var site in _sites) { foreach (string host in site.Config.Hosts) { string[] hostData = host.Split(":", 2); string ipAddress = hostData[0]; int port = int.Parse(hostData[1]); if (TryGetIPEndPoint(ipEndPointList, ipAddress, port, out var endPoint)) { foreach (var sslConfig in site.Config.SslConfigs) { endPoint.AddCertificate(sslConfig.GetCertificate()); } } else { endPoint = new IPEndPointConfig(ipAddress, port); foreach (var sslConfig in site.Config.SslConfigs) { endPoint.AddCertificate(sslConfig.GetCertificate()); } ipEndPointList.Add(endPoint); } } } foreach (var endPoint in ipEndPointList) { options.Listen(endPoint.IPAddress, endPoint.Port, listenOptions => { if (endPoint.Certificates.Count > 0) { Logger.LogInfo($"Listening https on '{endPoint.IPAddress}:{endPoint.Port}'"); foreach (var certificate in endPoint.Certificates) { listenOptions.UseHttps(certificate); } } else { Logger.LogInfo($"Listening http on '{endPoint.IPAddress}:{endPoint.Port}'"); } }); } }
private static bool TryGetIPEndPoint(IEnumerable <IPEndPointConfig> list, string address, int port, out IPEndPointConfig config) { foreach (var ipEndPointConfig in list) { if (!ipEndPointConfig.Equals(address, port)) { continue; } config = ipEndPointConfig; return(true); } config = null; return(false); }