mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-01 11:32:25 +00:00
Fix TLS port binding behavior as well as reload behavior:
* Removes references to tlsbindport from http.conf.sample and manager.conf.sample * Properly bind to port specified in tlsbindaddr, using the default port if specified. * On a reload, properly close socket if the service has been disabled. A note has been added to UPGRADE.txt to indicate how ports must be set for TLS. (closes issue ASTERISK-16959) reported by Olaf Holthausen (closes issue ASTERISK-19201) reported by Chris Mylonas (closes issue ASTERISK-19204) reported by Chris Mylonas Review: https://reviewboard.asterisk.org/r/1709 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@353770 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -20,6 +20,12 @@
|
||||
|
||||
From 1.6.2 to 1.8:
|
||||
|
||||
* When using TLS with Manager and the HTTP server, the desired port
|
||||
must be specified in the tlsbindaddr setting. If no port is specified,
|
||||
then the default port will be used. See the sample config file to know
|
||||
the default ports. Settings like "sslbindport" and "tlsbindport" have
|
||||
no effect.
|
||||
|
||||
* chan_sip no longer sets HASH(SIP_CAUSE,<chan name>) on channels by default.
|
||||
This must now be enabled by setting 'sipstorecause' to 'yes' in sip.conf.
|
||||
This carries a performance penalty.
|
||||
|
||||
@@ -54,8 +54,7 @@ bindaddr=127.0.0.1
|
||||
; explicitly enable tls, define the port to use,
|
||||
; and have a certificate somewhere.
|
||||
;tlsenable=yes ; enable tls - default no.
|
||||
;tlsbindport=4433 ; port to use - default is 8089
|
||||
;tlsbindaddr=0.0.0.0 ; address to bind to - default is bindaddr.
|
||||
;tlsbindaddr=0.0.0.0:8089 ; address and port to bind to - default is bindaddr and port 8089.
|
||||
;
|
||||
;tlscertfile=</path/to/certificate.pem> ; path to the certificate file (*.pem) only.
|
||||
;tlsprivatekey=</path/to/private.pem> ; path to private key file (*.pem) only.
|
||||
|
||||
@@ -33,8 +33,7 @@ bindaddr = 0.0.0.0
|
||||
; openssl s_client -connect my_host:5039
|
||||
;
|
||||
;tlsenable=no ; set to YES to enable it
|
||||
;tlsbindport=5039 ; the port to bind to
|
||||
;tlsbindaddr=0.0.0.0 ; address to bind to, default to bindaddr
|
||||
;tlsbindaddr=0.0.0.0:5039 ; address and port to bind to, default to bindaddr and port 5039
|
||||
;tlscertfile=/tmp/asterisk.pem ; path to the certificate.
|
||||
;tlsprivatekey=/tmp/private.pem ; path to the private key, if no private given,
|
||||
; if no tlsprivatekey is given, default is to search
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
|
||||
#define AMI_VERSION "1.1"
|
||||
#define DEFAULT_MANAGER_PORT 5038 /* Default port for Asterisk management via TCP */
|
||||
#define DEFAULT_MANAGER_TLS_PORT 5039 /* Default port for Asterisk management via TCP */
|
||||
|
||||
/*! \name Constant return values
|
||||
*\note Currently, returning anything other than zero causes the session to terminate.
|
||||
|
||||
29
main/http.c
29
main/http.c
@@ -61,6 +61,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
#define MAX_PREFIX 80
|
||||
#define DEFAULT_SESSION_LIMIT 100
|
||||
|
||||
#define DEFAULT_HTTP_PORT 8080
|
||||
#define DEFAULT_HTTPS_PORT 8089
|
||||
|
||||
/* See http.h for more information about the SSL implementation */
|
||||
#if defined(HAVE_OPENSSL) && (defined(HAVE_FUNOPEN) || defined(HAVE_FOPENCOOKIE))
|
||||
#define DO_SSL /* comment in/out if you want to support ssl */
|
||||
@@ -1022,20 +1025,18 @@ static int __ast_http_load(int reload)
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
struct sockaddr_in tmp = {0,};
|
||||
struct sockaddr_in tmp2 = {0,};
|
||||
int http_tls_was_enabled = 0;
|
||||
|
||||
cfg = ast_config_load2("http.conf", "http", config_flags);
|
||||
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEUNCHANGED || cfg == CONFIG_STATUS_FILEINVALID) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* default values */
|
||||
tmp.sin_family = AF_INET;
|
||||
tmp.sin_port = htons(8088);
|
||||
ast_sockaddr_from_sin(&http_desc.local_address, &tmp);
|
||||
http_tls_was_enabled = (reload && http_tls_cfg.enabled);
|
||||
|
||||
tmp2.sin_family = AF_INET;
|
||||
tmp2.sin_port = htons(8089);
|
||||
ast_sockaddr_from_sin(&https_desc.local_address, &tmp2);
|
||||
tmp.sin_family = AF_INET;
|
||||
tmp.sin_port = htons(DEFAULT_HTTP_PORT);
|
||||
ast_sockaddr_from_sin(&http_desc.local_address, &tmp);
|
||||
|
||||
http_tls_cfg.enabled = 0;
|
||||
if (http_tls_cfg.certfile) {
|
||||
@@ -1059,6 +1060,8 @@ static int __ast_http_load(int reload)
|
||||
}
|
||||
AST_RWLIST_UNLOCK(&uri_redirects);
|
||||
|
||||
ast_sockaddr_setnull(&https_desc.local_address);
|
||||
|
||||
if (cfg) {
|
||||
v = ast_variable_browse(cfg, "general");
|
||||
for (; v; v = v->next) {
|
||||
@@ -1107,13 +1110,16 @@ static int __ast_http_load(int reload)
|
||||
|
||||
ast_config_destroy(cfg);
|
||||
}
|
||||
/* if the https addres has not been set, default is the same as non secure http */
|
||||
/* if the https address has not been set, default is the same as non secure http */
|
||||
ast_sockaddr_to_sin(&http_desc.local_address, &tmp);
|
||||
ast_sockaddr_to_sin(&https_desc.local_address, &tmp2);
|
||||
if (!tmp2.sin_addr.s_addr) {
|
||||
tmp2.sin_addr = tmp.sin_addr;
|
||||
ast_sockaddr_from_sin(&https_desc.local_address, &tmp2);
|
||||
}
|
||||
if (!tmp2.sin_port) {
|
||||
tmp2.sin_port = htons(DEFAULT_HTTPS_PORT);
|
||||
}
|
||||
ast_sockaddr_from_sin(&https_desc.local_address, &tmp2);
|
||||
if (!enabled) {
|
||||
ast_sockaddr_setnull(&http_desc.local_address);
|
||||
ast_sockaddr_setnull(&https_desc.local_address);
|
||||
@@ -1123,7 +1129,10 @@ static int __ast_http_load(int reload)
|
||||
}
|
||||
enablestatic = newenablestatic;
|
||||
ast_tcptls_server_start(&http_desc);
|
||||
if (ast_ssl_setup(https_desc.tls_cfg)) {
|
||||
/* If https was enabled previously but now is not, then stop the service */
|
||||
if (http_tls_was_enabled && !http_tls_cfg.enabled) {
|
||||
ast_tcptls_server_stop(&https_desc);
|
||||
} else if (ast_ssl_setup(https_desc.tls_cfg)) {
|
||||
ast_tcptls_server_start(&https_desc);
|
||||
}
|
||||
|
||||
|
||||
@@ -6491,6 +6491,7 @@ static int __init_manager(int reload)
|
||||
char a1_hash[256];
|
||||
struct sockaddr_in ami_desc_local_address_tmp = { 0, };
|
||||
struct sockaddr_in amis_desc_local_address_tmp = { 0, };
|
||||
int tls_was_enabled = 0;
|
||||
|
||||
if (!registered) {
|
||||
/* Register default actions */
|
||||
@@ -6556,11 +6557,16 @@ static int __init_manager(int reload)
|
||||
|
||||
/* default values */
|
||||
ast_copy_string(global_realm, S_OR(ast_config_AST_SYSTEM_NAME, DEFAULT_REALM), sizeof(global_realm));
|
||||
memset(&ami_desc.local_address, 0, sizeof(struct sockaddr_in));
|
||||
memset(&amis_desc.local_address, 0, sizeof(amis_desc.local_address));
|
||||
amis_desc_local_address_tmp.sin_port = htons(5039);
|
||||
ast_sockaddr_setnull(&ami_desc.local_address);
|
||||
ast_sockaddr_setnull(&amis_desc.local_address);
|
||||
|
||||
ami_desc_local_address_tmp.sin_family = AF_INET;
|
||||
amis_desc_local_address_tmp.sin_family = AF_INET;
|
||||
|
||||
ami_desc_local_address_tmp.sin_port = htons(DEFAULT_MANAGER_PORT);
|
||||
|
||||
tls_was_enabled = (reload && ami_tls_cfg.enabled);
|
||||
|
||||
ami_tls_cfg.enabled = 0;
|
||||
if (ami_tls_cfg.certfile) {
|
||||
ast_free(ami_tls_cfg.certfile);
|
||||
@@ -6634,8 +6640,7 @@ static int __init_manager(int reload)
|
||||
}
|
||||
}
|
||||
|
||||
ami_desc_local_address_tmp.sin_family = AF_INET;
|
||||
amis_desc_local_address_tmp.sin_family = AF_INET;
|
||||
ast_sockaddr_to_sin(&amis_desc.local_address, &amis_desc_local_address_tmp);
|
||||
|
||||
/* if the amis address has not been set, default is the same as non secure ami */
|
||||
if (!amis_desc_local_address_tmp.sin_addr.s_addr) {
|
||||
@@ -6643,6 +6648,10 @@ static int __init_manager(int reload)
|
||||
ami_desc_local_address_tmp.sin_addr;
|
||||
}
|
||||
|
||||
if (!amis_desc_local_address_tmp.sin_port) {
|
||||
amis_desc_local_address_tmp.sin_port = htons(DEFAULT_MANAGER_TLS_PORT);
|
||||
}
|
||||
|
||||
if (manager_enabled) {
|
||||
ast_sockaddr_from_sin(&ami_desc.local_address, &ami_desc_local_address_tmp);
|
||||
ast_sockaddr_from_sin(&amis_desc.local_address, &amis_desc_local_address_tmp);
|
||||
@@ -6897,7 +6906,9 @@ static int __init_manager(int reload)
|
||||
manager_event(EVENT_FLAG_SYSTEM, "Reload", "Module: Manager\r\nStatus: %s\r\nMessage: Manager reload Requested\r\n", manager_enabled ? "Enabled" : "Disabled");
|
||||
|
||||
ast_tcptls_server_start(&ami_desc);
|
||||
if (ast_ssl_setup(amis_desc.tls_cfg)) {
|
||||
if (tls_was_enabled && !ami_tls_cfg.enabled) {
|
||||
ast_tcptls_server_stop(&amis_desc);
|
||||
} else if (ast_ssl_setup(amis_desc.tls_cfg)) {
|
||||
ast_tcptls_server_start(&amis_desc);
|
||||
}
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user