Changeset

10463:fbeb7a3fc4eb

core.portmanager: Fix TLS context inheritance for SNI hosts (completes SNI support)
author Kim Alvefur <zash@zash.se>
date Fri, 29 Nov 2019 23:24:14 +0100
parents 10462:9af6ab2623b0
children 10464:8d3acf16c404
files core/certmanager.lua core/portmanager.lua
diffstat 2 files changed, 6 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/core/certmanager.lua	Fri Nov 29 23:22:29 2019 +0100
+++ b/core/certmanager.lua	Fri Nov 29 23:24:14 2019 +0100
@@ -252,4 +252,5 @@
 	create_context = create_context;
 	reload_ssl_config = reload_ssl_config;
 	find_cert = find_cert;
+	find_host_cert = find_host_cert;
 };
--- a/core/portmanager.lua	Fri Nov 29 23:22:29 2019 +0100
+++ b/core/portmanager.lua	Fri Nov 29 23:24:14 2019 +0100
@@ -230,19 +230,14 @@
 -- Event handlers
 
 local function add_sni_host(host, service)
-	-- local global_ssl_config = config.get(host, "ssl") or {};
 	for name, interface, port, n, active_service --luacheck: ignore 213
 		in active_services:iter(service, nil, nil, nil) do
 		if active_service.server.hosts and active_service.tls_cfg then
-			-- local config_prefix = (active_service.config_prefix or name).."_";
-			-- if config_prefix == "_" then
-				-- config_prefix = "";
-			-- end
-			-- local prefix_ssl_config = config.get(host, config_prefix.."ssl") or global_ssl_config;
-			-- FIXME only global 'ssl' settings are mixed in here
-			-- TODO per host and per service settings should be merged in,
-			-- without overriding the per-host certificate
-			local ssl, err, cfg = certmanager.create_context(host, "server");
+			local config_prefix = (active_service.config_prefix or name).."_";
+			if config_prefix == "_" then config_prefix = ""; end
+			local prefix_ssl_config = config.get(host, config_prefix.."ssl");
+			local autocert = certmanager.find_host_cert(host);
+			local ssl, err, cfg = certmanager.create_context(host, "server", prefix_ssl_config, autocert, active_service.tls_cfg);
 			if ssl then
 				active_service.server.hosts[host] = ssl;
 			else