Comparison

core/certmanager.lua @ 5822:970c666c5586

certmanager: Allow for specifying the dhparam option as a path to a file instead of a callback
author Kim Alvefur <zash@zash.se>
date Tue, 03 Sep 2013 15:43:59 +0200
parent 5821:7974683a9bb7
child 5872:1c3ebd3009fe
comparison
equal deleted inserted replaced
5821:7974683a9bb7 5822:970c666c5586
11 local ssl = ssl; 11 local ssl = ssl;
12 local ssl_newcontext = ssl and ssl.newcontext; 12 local ssl_newcontext = ssl and ssl.newcontext;
13 13
14 local tostring = tostring; 14 local tostring = tostring;
15 local pairs = pairs; 15 local pairs = pairs;
16 local type = type;
17 local io_open = io.open;
16 18
17 local prosody = prosody; 19 local prosody = prosody;
18 local resolve_path = configmanager.resolve_relative_path; 20 local resolve_path = configmanager.resolve_relative_path;
19 local config_path = prosody.paths.config; 21 local config_path = prosody.paths.config;
20 22
39 verifyext = { "lsec_continue", "lsec_ignore_purpose" }; 41 verifyext = { "lsec_continue", "lsec_ignore_purpose" };
40 curve = "secp384r1"; 42 curve = "secp384r1";
41 ciphers = "HIGH:!DSS:!aNULL@STRENGTH"; 43 ciphers = "HIGH:!DSS:!aNULL@STRENGTH";
42 } 44 }
43 local path_options = { -- These we pass through resolve_path() 45 local path_options = { -- These we pass through resolve_path()
44 key = true, certificate = true, cafile = true, capath = true 46 key = true, certificate = true, cafile = true, capath = true, dhparam = true
45 } 47 }
46 48
47 if ssl and not luasec_has_verifyext and ssl.x509 then 49 if ssl and not luasec_has_verifyext and ssl.x509 then
48 -- COMPAT mw/luasec-hg 50 -- COMPAT mw/luasec-hg
49 for i=1,#core_defaults.verifyext do -- Remove lsec_ prefix 51 for i=1,#core_defaults.verifyext do -- Remove lsec_ prefix
73 user_ssl_config[option] = default_value; 75 user_ssl_config[option] = default_value;
74 end 76 end
75 end 77 end
76 user_ssl_config.password = user_ssl_config.password or function() log("error", "Encrypted certificate for %s requires 'ssl' 'password' to be set in config", host); end; 78 user_ssl_config.password = user_ssl_config.password or function() log("error", "Encrypted certificate for %s requires 'ssl' 'password' to be set in config", host); end;
77 for option in pairs(path_options) do 79 for option in pairs(path_options) do
78 user_ssl_config[option] = user_ssl_config[option] and resolve_path(config_path, user_ssl_config[option]); 80 if type(user_ssl_config[option]) == "string" then
81 user_ssl_config[option] = resolve_path(config_path, user_ssl_config[option]);
82 end
79 end 83 end
80 84
81 if not user_ssl_config.key then return nil, "No key present in SSL/TLS configuration for "..host; end 85 if not user_ssl_config.key then return nil, "No key present in SSL/TLS configuration for "..host; end
82 if not user_ssl_config.certificate then return nil, "No certificate present in SSL/TLS configuration for "..host; end 86 if not user_ssl_config.certificate then return nil, "No certificate present in SSL/TLS configuration for "..host; end
87
88 -- LuaSec expects dhparam to be a callback that takes two arguments.
89 -- We ignore those because it is mostly used for having a separate
90 -- set of params for EXPORT ciphers, which we don't have by default.
91 if type(user_ssl_config.dhparam) == "string" then
92 local f, err = io_open(user_ssl_config.dhparam);
93 if not f then return nil, "Could not open DH parameters: "..err end
94 local dhparam = f:read("*a");
95 f:close();
96 user_ssl_config.dhparam = function() return dhparam; end
97 end
83 98
84 local ctx, err = ssl_newcontext(user_ssl_config); 99 local ctx, err = ssl_newcontext(user_ssl_config);
85 100
86 -- COMPAT Older LuaSec ignores the cipher list from the config, so we have to take care 101 -- COMPAT Older LuaSec ignores the cipher list from the config, so we have to take care
87 -- of it ourselves (W/A for #x) 102 -- of it ourselves (W/A for #x)