mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
MEDIUM: cli/ssl: configure ssl on server at runtime
in the context of a progressive backend migration, we want to be able to activate SSL on outgoing connections to the server at runtime without reloading. This patch adds a `set server ssl` command; in order to allow that: - add `srv_use_ssl` to `show servers state` command for compatibility, also update associated parsing - when using default-server ssl setting, and `no-ssl` on server line, init SSL ctx without activating it - when triggering ssl API, de/activate SSL connections as requested - clean ongoing connections as it is done for addr/port changes, without checking prior server state example config: backend be_foo default-server ssl server srv0 127.0.0.1:6011 weight 1 no-ssl show servers state: 5 be_foo 1 srv0 127.0.0.1 2 0 1 1 15 1 0 4 0 0 0 0 - 6011 - -1 where srv0 can switch to ssl later during the runtime: set server be_foo/srv0 ssl on 5 be_foo 1 srv0 127.0.0.1 2 0 1 1 15 1 0 4 0 0 0 0 - 6011 - 1 Also update existing tests and create a new one. Signed-off-by: William Dauchy <wdauchy@gmail.com>
This commit is contained in:
parent
fc52f524b0
commit
f63704488e
@ -13552,6 +13552,10 @@ no-ssl
|
|||||||
It may also be used as "default-server" setting to reset any previous
|
It may also be used as "default-server" setting to reset any previous
|
||||||
"default-server" "ssl" setting.
|
"default-server" "ssl" setting.
|
||||||
|
|
||||||
|
Note that using `default-server ssl` setting and `no-ssl` on server will
|
||||||
|
however init SSL connection, so it can be later be enabled through the
|
||||||
|
runtime API: see `set server` commands in management doc.
|
||||||
|
|
||||||
no-ssl-reuse
|
no-ssl-reuse
|
||||||
This option disables SSL session reuse when SSL is used to communicate with
|
This option disables SSL session reuse when SSL is used to communicate with
|
||||||
the server. It will force the server to perform a full handshake for every
|
the server. It will force the server to perform a full handshake for every
|
||||||
|
@ -1861,6 +1861,9 @@ set server <backend>/<server> fqdn <FQDN>
|
|||||||
Change a server's FQDN to the value passed in argument. This requires the
|
Change a server's FQDN to the value passed in argument. This requires the
|
||||||
internal run-time DNS resolver to be configured and enabled for this server.
|
internal run-time DNS resolver to be configured and enabled for this server.
|
||||||
|
|
||||||
|
set server <backend>/<server> ssl [ on | off ]
|
||||||
|
This option configures SSL ciphering on outgoing connections to the server.
|
||||||
|
|
||||||
set severity-output [ none | number | string ]
|
set severity-output [ none | number | string ]
|
||||||
Change the severity output format of the stats socket connected to for the
|
Change the severity output format of the stats socket connected to for the
|
||||||
duration of the current session.
|
duration of the current session.
|
||||||
@ -2416,6 +2419,7 @@ show servers state [<backend>]
|
|||||||
srv_fqdn: Server FQDN.
|
srv_fqdn: Server FQDN.
|
||||||
srv_port: Server port.
|
srv_port: Server port.
|
||||||
srvrecord: DNS SRV record associated to this SRV.
|
srvrecord: DNS SRV record associated to this SRV.
|
||||||
|
srv_use_ssl: use ssl for server connections.
|
||||||
|
|
||||||
show sess
|
show sess
|
||||||
Dump all known sessions. Avoid doing this on slow connections as this can
|
Dump all known sessions. Avoid doing this on slow connections as this can
|
||||||
|
@ -123,10 +123,11 @@ enum srv_initaddr {
|
|||||||
"srv_f_forced_id " \
|
"srv_f_forced_id " \
|
||||||
"srv_fqdn " \
|
"srv_fqdn " \
|
||||||
"srv_port " \
|
"srv_port " \
|
||||||
"srvrecord"
|
"srvrecord " \
|
||||||
|
"srv_use_ssl"
|
||||||
|
|
||||||
#define SRV_STATE_FILE_MAX_FIELDS 20
|
#define SRV_STATE_FILE_MAX_FIELDS 21
|
||||||
#define SRV_STATE_FILE_NB_FIELDS_VERSION_1 19
|
#define SRV_STATE_FILE_NB_FIELDS_VERSION_1 20
|
||||||
#define SRV_STATE_LINE_MAXLEN 512
|
#define SRV_STATE_LINE_MAXLEN 512
|
||||||
|
|
||||||
/* server flags -- 32 bits */
|
/* server flags -- 32 bits */
|
||||||
|
@ -65,6 +65,7 @@ const char *ssl_sock_get_proto_version(struct connection *conn);
|
|||||||
int ssl_sock_parse_alpn(char *arg, char **alpn_str, int *alpn_len, char **err);
|
int ssl_sock_parse_alpn(char *arg, char **alpn_str, int *alpn_len, char **err);
|
||||||
void ssl_sock_set_alpn(struct connection *conn, const unsigned char *, int);
|
void ssl_sock_set_alpn(struct connection *conn, const unsigned char *, int);
|
||||||
void ssl_sock_set_servername(struct connection *conn, const char *hostname);
|
void ssl_sock_set_servername(struct connection *conn, const char *hostname);
|
||||||
|
void ssl_sock_set_srv(struct server *s, signed char use_ssl);
|
||||||
|
|
||||||
int ssl_sock_get_cert_used_sess(struct connection *conn);
|
int ssl_sock_get_cert_used_sess(struct connection *conn);
|
||||||
int ssl_sock_get_cert_used_conn(struct connection *conn);
|
int ssl_sock_get_cert_used_conn(struct connection *conn);
|
||||||
|
@ -112,6 +112,6 @@ syslog S -wait
|
|||||||
|
|
||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
send "show servers state"
|
send "show servers state"
|
||||||
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n2 be1 1 srv0 ${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} -\n2 be1 2 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} -\n2 be1 3 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_port} -\n2 be1 4 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} -\n2 be1 5 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} -\n2 be1 6 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} -\n2 be1 7 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} -\n2 be1 8 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} -\n2 be1 9 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} -\n2 be1 10 srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} -\n2 be1 11 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} -\n2 be1 12 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} -\n2 be1 13 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} -\n2 be1 14 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} -\n2 be1 15 srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} -\n2 be1 16 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} -\n2 be1 17 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port} -\n2 be1 18 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} -\n2 be1 19 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} -\n2 be1 20 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port} -\n2 be1 21 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} -\n2 be1 22 srv21 ${s21_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} -\n2 be1 23 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} -\n2 be1 24 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s23_port} -\n2 be1 25 srv24 ${s24_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} -\n2 be1 26 srv25 ${s25_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} -\n2 be1 27 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_port} -\n2 be1 28 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s27_port} -\n2 be1 29 srv28 ${s28_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} -\n2 be1 30 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} -\n2 be1 31 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s30_port} -\n2 be1 32 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} -\n2 be1 33 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} -\n2 be1 34 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_port} -\n2 be1 35 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s34_port} -\n2 be1 36 srv35 ${s35_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} -\n2 be1 37 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} -\n2 be1 38 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s37_port} -\n2 be1 39 srv38 ${s38_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} -\n2 be1 40 srv39 ${s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} -\n"
|
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl\n2 be1 1 srv0 ${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0\n2 be1 2 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} - 0\n2 be1 3 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_port} - 0\n2 be1 4 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} - 0\n2 be1 5 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0\n2 be1 6 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} - 0\n2 be1 7 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} - 0\n2 be1 8 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} - 0\n2 be1 9 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} - 0\n2 be1 10 srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} - 0\n2 be1 11 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} - 0\n2 be1 12 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} - 0\n2 be1 13 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} - 0\n2 be1 14 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} - 0\n2 be1 15 srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} - 0\n2 be1 16 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} - 0\n2 be1 17 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port} - 0\n2 be1 18 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} - 0\n2 be1 19 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} - 0\n2 be1 20 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port} - 0\n2 be1 21 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} - 0\n2 be1 22 srv21 ${s21_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0\n2 be1 23 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} - 0\n2 be1 24 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s23_port} - 0\n2 be1 25 srv24 ${s24_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} - 0\n2 be1 26 srv25 ${s25_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} - 0\n2 be1 27 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_port} - 0\n2 be1 28 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s27_port} - 0\n2 be1 29 srv28 ${s28_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0\n2 be1 30 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} - 0\n2 be1 31 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s30_port} - 0\n2 be1 32 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0\n2 be1 33 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0\n2 be1 34 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_port} - 0\n2 be1 35 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s34_port} - 0\n2 be1 36 srv35 ${s35_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0\n2 be1 37 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} - 0\n2 be1 38 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s37_port} - 0\n2 be1 39 srv38 ${s38_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} - 0\n2 be1 40 srv39 ${s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} - 0\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,6 +633,6 @@ server s39 -wait
|
|||||||
|
|
||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
send "show servers state"
|
send "show servers state"
|
||||||
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n2 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} -\n2 be1 2 srv0 ${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} -\n3 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} -\n3 be3 2 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_port} -\n4 be5 1 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} -\n4 be5 2 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} -\n5 be7 1 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} -\n5 be7 2 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} -\n6 be9 1 srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} -\n6 be9 2 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} -\n7 be11 1 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} -\n7 be11 2 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} -\n8 be13 1 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} -\n8 be13 2 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} -\n9 be15 1 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} -\n9 be15 2 srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} -\n10 be17 1 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} -\n10 be17 2 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port} -\n11 be19 1 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port} -\n11 be19 2 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} -\n12 be21 1 srv21 ${s21_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} -\n12 be21 2 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} -\n13 be23 1 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s23_port} -\n13 be23 2 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} -\n14 be25 1 srv25 ${s25_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} -\n14 be25 2 srv24 ${s24_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} -\n15 be27 1 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s27_port} -\n15 be27 2 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_port} -\n16 be29 1 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} -\n16 be29 2 srv28 ${s28_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} -\n17 be31 1 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} -\n17 be31 2 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s30_port} -\n18 be33 1 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_port} -\n18 be33 2 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} -\n19 be35 1 srv35 ${s35_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} -\n19 be35 2 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s34_port} -\n20 be37 1 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s37_port} -\n20 be37 2 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} -\n21 be39 1 srv39 ${s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} -\n21 be39 2 srv38 ${s38_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} -\n"
|
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl\n2 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s1_port} - 0\n2 be1 2 srv0 ${s0_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s0_port} - 0\n3 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s3_port} - 0\n3 be3 2 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s2_port} - 0\n4 be5 1 srv5 ${s5_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s5_port} - 0\n4 be5 2 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s4_port} - 0\n5 be7 1 srv7 ${s7_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s7_port} - 0\n5 be7 2 srv6 ${s6_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s6_port} - 0\n6 be9 1 srv9 ${s9_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s9_port} - 0\n6 be9 2 srv8 ${s8_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s8_port} - 0\n7 be11 1 srv11 ${s11_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s11_port} - 0\n7 be11 2 srv10 ${s10_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s10_port} - 0\n8 be13 1 srv13 ${s13_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s13_port} - 0\n8 be13 2 srv12 ${s12_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s12_port} - 0\n9 be15 1 srv15 ${s15_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s15_port} - 0\n9 be15 2 srv14 ${s14_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s14_port} - 0\n10 be17 1 srv17 ${s17_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s17_port} - 0\n10 be17 2 srv16 ${s16_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s16_port} - 0\n11 be19 1 srv19 ${s19_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s19_port} - 0\n11 be19 2 srv18 ${s18_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s18_port} - 0\n12 be21 1 srv21 ${s21_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s21_port} - 0\n12 be21 2 srv20 ${s20_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s20_port} - 0\n13 be23 1 srv23 ${s23_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s23_port} - 0\n13 be23 2 srv22 ${s22_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s22_port} - 0\n14 be25 1 srv25 ${s25_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s25_port} - 0\n14 be25 2 srv24 ${s24_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s24_port} - 0\n15 be27 1 srv27 ${s27_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s27_port} - 0\n15 be27 2 srv26 ${s26_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s26_port} - 0\n16 be29 1 srv29 ${s29_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s29_port} - 0\n16 be29 2 srv28 ${s28_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s28_port} - 0\n17 be31 1 srv31 ${s31_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s31_port} - 0\n17 be31 2 srv30 ${s30_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s30_port} - 0\n18 be33 1 srv33 ${s33_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s33_port} - 0\n18 be33 2 srv32 ${s32_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s32_port} - 0\n19 be35 1 srv35 ${s35_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s35_port} - 0\n19 be35 2 srv34 ${s34_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s34_port} - 0\n20 be37 1 srv37 ${s37_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s37_port} - 0\n20 be37 2 srv36 ${s36_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s36_port} - 0\n21 be39 1 srv39 ${s39_addr} 2 0 1 1 [[:digit:]]+ 6 ([[:digit:]]+ ){3}0 0 0 - ${s39_port} - 0\n21 be39 2 srv38 ${s38_addr} 2 0 1 1 [[:digit:]]+ 1 0 1 0 0 0 0 - ${s38_port} - 0\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ haproxy h1 -conf {
|
|||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
barrier b1 sync
|
barrier b1 sync
|
||||||
send "show servers state"
|
send "show servers state"
|
||||||
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s4_port} -"
|
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s1_port} - 0\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s2_port} - 0\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s3_port} - 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 [67] 0 0 0 - ${s4_port} - 0"
|
||||||
}
|
}
|
||||||
|
|
||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
@ -165,7 +165,7 @@ haproxy h1 -cli {
|
|||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
barrier b1 sync
|
barrier b1 sync
|
||||||
send "show servers state"
|
send "show servers state"
|
||||||
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s4_port} -"
|
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl\n6 be1 1 srv1 ${s1_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s1_port} - 0\n7 be2 1 srv2 ${s2_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s2_port} - 0\n8 be3 1 srv3 ${s3_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s3_port} - 0\n9 be4 1 srv4 ${s4_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 1[45] 0 0 0 - ${s4_port} - 0"
|
||||||
}
|
}
|
||||||
|
|
||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
@ -191,7 +191,7 @@ haproxy h1 -cli {
|
|||||||
haproxy h1 -cli {
|
haproxy h1 -cli {
|
||||||
barrier b1 sync
|
barrier b1 sync
|
||||||
send "show servers state"
|
send "show servers state"
|
||||||
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s4_port} -"
|
expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s1_port} - 0\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s2_port} - 0\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s3_port} - 0\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s4_port} - 0"
|
||||||
}
|
}
|
||||||
|
|
||||||
syslog S1 -wait
|
syslog S1 -wait
|
||||||
|
54
reg-tests/server/cli_set_ssl.vtc
Normal file
54
reg-tests/server/cli_set_ssl.vtc
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
varnishtest "Set server ssl via CLI"
|
||||||
|
|
||||||
|
feature ignore_unknown_macro
|
||||||
|
|
||||||
|
# for "set server <srv> ssl"
|
||||||
|
#REQUIRE_VERSION=2.4
|
||||||
|
#REGTEST_TYPE=bug
|
||||||
|
|
||||||
|
# Do nothing. Is there only to create s1_* macros
|
||||||
|
server s1 {
|
||||||
|
} -start
|
||||||
|
|
||||||
|
haproxy h1 -conf {
|
||||||
|
global
|
||||||
|
ssl-server-verify none
|
||||||
|
|
||||||
|
defaults
|
||||||
|
mode http
|
||||||
|
${no-htx} option http-use-htx
|
||||||
|
timeout connect 1s
|
||||||
|
timeout client 1s
|
||||||
|
timeout server 1s
|
||||||
|
|
||||||
|
frontend myfrontend
|
||||||
|
bind "fd@${my_fe}"
|
||||||
|
default_backend test0
|
||||||
|
|
||||||
|
backend test0
|
||||||
|
default-server ssl
|
||||||
|
server www0 ${s1_addr}:${s1_port} no-ssl
|
||||||
|
|
||||||
|
backend test1
|
||||||
|
server www0 ${s1_addr}:${s1_port} no-ssl
|
||||||
|
} -start
|
||||||
|
|
||||||
|
haproxy h1 -cli {
|
||||||
|
# supported case
|
||||||
|
send "show servers state test0"
|
||||||
|
expect ~ "test0 1 www0 ${s1_addr} .* - ${s1_port} - -1"
|
||||||
|
send "set server test0/www0 ssl on"
|
||||||
|
expect ~ "server ssl setting updated"
|
||||||
|
send "show servers state test0"
|
||||||
|
expect ~ "test0 1 www0 ${s1_addr} .* - ${s1_port} - 1"
|
||||||
|
send "set server test0/www0 ssl off"
|
||||||
|
expect ~ "server ssl setting updated"
|
||||||
|
send "show servers state test0"
|
||||||
|
expect ~ "test0 1 www0 ${s1_addr} .* - ${s1_port} - 0"
|
||||||
|
|
||||||
|
# unsupported case
|
||||||
|
send "show servers state test1"
|
||||||
|
expect ~ "test1 1 www0 ${s1_addr} .* - ${s1_port} - -1"
|
||||||
|
send "set server test1/www0 ssl on"
|
||||||
|
expect ~ "'set server <srv> ssl' cannot be set"
|
||||||
|
} -wait
|
@ -1483,9 +1483,14 @@ static int srv_parse_no_send_proxy_cn(char **args, int *cur_arg, struct proxy *p
|
|||||||
/* parse the "no-ssl" server keyword */
|
/* parse the "no-ssl" server keyword */
|
||||||
static int srv_parse_no_ssl(char **args, int *cur_arg, struct proxy *px, struct server *newsrv, char **err)
|
static int srv_parse_no_ssl(char **args, int *cur_arg, struct proxy *px, struct server *newsrv, char **err)
|
||||||
{
|
{
|
||||||
newsrv->use_ssl = -1;
|
/* if default-server have use_ssl, prepare ssl settings */
|
||||||
|
if (newsrv->use_ssl == 1)
|
||||||
|
ssl_sock_init_srv(newsrv);
|
||||||
|
else {
|
||||||
free(newsrv->ssl_ctx.ciphers);
|
free(newsrv->ssl_ctx.ciphers);
|
||||||
newsrv->ssl_ctx.ciphers = NULL;
|
newsrv->ssl_ctx.ciphers = NULL;
|
||||||
|
}
|
||||||
|
newsrv->use_ssl = -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3127,8 +3127,13 @@ int check_config_validity()
|
|||||||
newsrv->minconn = newsrv->maxconn;
|
newsrv->minconn = newsrv->maxconn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this will also properly set the transport layer for prod and checks */
|
/* this will also properly set the transport layer for
|
||||||
if (newsrv->use_ssl == 1 || newsrv->check.use_ssl == 1 || (newsrv->proxy->options & PR_O_TCPCHK_SSL)) {
|
* prod and checks
|
||||||
|
* if default-server have use_ssl, prerare ssl init
|
||||||
|
* without activating it */
|
||||||
|
if (newsrv->use_ssl == 1 || newsrv->check.use_ssl == 1 ||
|
||||||
|
(newsrv->proxy->options & PR_O_TCPCHK_SSL) ||
|
||||||
|
(newsrv->use_ssl != 1 && curproxy->defsrv.use_ssl == 1)) {
|
||||||
if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->prepare_srv)
|
if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->prepare_srv)
|
||||||
cfgerr += xprt_get(XPRT_SSL)->prepare_srv(newsrv);
|
cfgerr += xprt_get(XPRT_SSL)->prepare_srv(newsrv);
|
||||||
}
|
}
|
||||||
|
@ -1799,14 +1799,15 @@ static int dump_servers_state(struct stream_interface *si)
|
|||||||
"%d %s %s "
|
"%d %s %s "
|
||||||
"%d %d %d %d %ld "
|
"%d %d %d %d %ld "
|
||||||
"%d %d %d %d %d "
|
"%d %d %d %d %d "
|
||||||
"%d %d %s %u %s"
|
"%d %d %s %u "
|
||||||
|
"%s %d"
|
||||||
"\n",
|
"\n",
|
||||||
px->uuid, px->id,
|
px->uuid, px->id,
|
||||||
srv->puid, srv->id, srv_addr,
|
srv->puid, srv->id, srv_addr,
|
||||||
srv->cur_state, srv->cur_admin, srv->uweight, srv->iweight, (long int)srv_time_since_last_change,
|
srv->cur_state, srv->cur_admin, srv->uweight, srv->iweight, (long int)srv_time_since_last_change,
|
||||||
srv->check.status, srv->check.result, srv->check.health, srv->check.state, srv->agent.state,
|
srv->check.status, srv->check.result, srv->check.health, srv->check.state, srv->agent.state,
|
||||||
bk_f_forced_id, srv_f_forced_id, srv->hostname ? srv->hostname : "-", srv->svc_port,
|
bk_f_forced_id, srv_f_forced_id, srv->hostname ? srv->hostname : "-", srv->svc_port,
|
||||||
srvrecord ? srvrecord : "-");
|
srvrecord ? srvrecord : "-", srv->use_ssl);
|
||||||
} else {
|
} else {
|
||||||
/* show servers conn */
|
/* show servers conn */
|
||||||
int thr;
|
int thr;
|
||||||
|
41
src/server.c
41
src/server.c
@ -38,6 +38,7 @@
|
|||||||
#include <haproxy/queue.h>
|
#include <haproxy/queue.h>
|
||||||
#include <haproxy/sample.h>
|
#include <haproxy/sample.h>
|
||||||
#include <haproxy/server.h>
|
#include <haproxy/server.h>
|
||||||
|
#include <haproxy/ssl_sock.h>
|
||||||
#include <haproxy/stats-t.h>
|
#include <haproxy/stats-t.h>
|
||||||
#include <haproxy/stream.h>
|
#include <haproxy/stream.h>
|
||||||
#include <haproxy/stream_interface.h>
|
#include <haproxy/stream_interface.h>
|
||||||
@ -2579,6 +2580,9 @@ static void srv_update_state(struct server *srv, int version, char **params)
|
|||||||
const char *port_str;
|
const char *port_str;
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
char *srvrecord;
|
char *srvrecord;
|
||||||
|
#ifdef USE_OPENSSL
|
||||||
|
int use_ssl;
|
||||||
|
#endif
|
||||||
|
|
||||||
fqdn = NULL;
|
fqdn = NULL;
|
||||||
port = 0;
|
port = 0;
|
||||||
@ -2603,6 +2607,7 @@ static void srv_update_state(struct server *srv, int version, char **params)
|
|||||||
* srv_fqdn: params[13]
|
* srv_fqdn: params[13]
|
||||||
* srv_port: params[14]
|
* srv_port: params[14]
|
||||||
* srvrecord: params[15]
|
* srvrecord: params[15]
|
||||||
|
* srv_use_ssl: params[16]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* validating srv_op_state */
|
/* validating srv_op_state */
|
||||||
@ -2742,6 +2747,10 @@ static void srv_update_state(struct server *srv, int version, char **params)
|
|||||||
if (srvrecord && *srvrecord != '_')
|
if (srvrecord && *srvrecord != '_')
|
||||||
srvrecord = NULL;
|
srvrecord = NULL;
|
||||||
|
|
||||||
|
#ifdef USE_OPENSSL
|
||||||
|
use_ssl = strtol(params[16], &p, 10);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* don't apply anything if one error has been detected */
|
/* don't apply anything if one error has been detected */
|
||||||
if (msg->data)
|
if (msg->data)
|
||||||
goto out;
|
goto out;
|
||||||
@ -2941,6 +2950,13 @@ static void srv_update_state(struct server *srv, int version, char **params)
|
|||||||
|
|
||||||
if (port_str)
|
if (port_str)
|
||||||
srv->svc_port = port;
|
srv->svc_port = port;
|
||||||
|
|
||||||
|
#ifdef USE_OPENSSL
|
||||||
|
/* configure ssl if connection has been initated at startup */
|
||||||
|
if (srv->ssl_ctx.ctx != NULL)
|
||||||
|
ssl_sock_set_srv(srv, use_ssl);
|
||||||
|
#endif
|
||||||
|
|
||||||
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
|
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -4396,10 +4412,29 @@ static int cli_parse_set_server(char **args, char *payload, struct appctx *appct
|
|||||||
if (warning)
|
if (warning)
|
||||||
cli_msg(appctx, LOG_WARNING, warning);
|
cli_msg(appctx, LOG_WARNING, warning);
|
||||||
}
|
}
|
||||||
else {
|
else if (strcmp(args[3], "ssl") == 0) {
|
||||||
|
#ifdef USE_OPENSSL
|
||||||
|
if (sv->ssl_ctx.ctx == NULL) {
|
||||||
|
cli_err(appctx, "'set server <srv> ssl' cannot be set. "
|
||||||
|
" default-server should define ssl settings\n");
|
||||||
|
goto out_unlock;
|
||||||
|
} else if (strcmp(args[4], "on") == 0) {
|
||||||
|
ssl_sock_set_srv(sv, 1);
|
||||||
|
} else if (strcmp(args[4], "off") == 0) {
|
||||||
|
ssl_sock_set_srv(sv, 0);
|
||||||
|
} else {
|
||||||
|
cli_err(appctx, "'set server <srv> ssl' expects 'on' or 'off'.\n");
|
||||||
|
goto out_unlock;
|
||||||
|
}
|
||||||
|
srv_cleanup_connections(sv);
|
||||||
|
cli_msg(appctx, LOG_NOTICE, "server ssl setting updated.\n");
|
||||||
|
#else
|
||||||
|
cli_msg(appctx, LOG_NOTICE, "server ssl setting not supported.\n");
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
cli_err(appctx,
|
cli_err(appctx,
|
||||||
"'set server <srv>' only supports 'agent', 'health', 'state',"
|
"'set server <srv>' only supports 'agent', 'health', 'state',"
|
||||||
" 'weight', 'addr', 'fqdn' and 'check-port'.\n");
|
" 'weight', 'addr', 'fqdn', 'check-port' and 'ssl'.\n");
|
||||||
}
|
}
|
||||||
out_unlock:
|
out_unlock:
|
||||||
HA_SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
HA_SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
||||||
@ -4633,7 +4668,7 @@ static struct cli_kw_list cli_kws = {{ },{
|
|||||||
{ { "enable", "health", NULL }, "enable health : enable health checks (use 'set server' instead)", cli_parse_enable_health, NULL },
|
{ { "enable", "health", NULL }, "enable health : enable health checks (use 'set server' instead)", cli_parse_enable_health, NULL },
|
||||||
{ { "enable", "server", NULL }, "enable server : enable a disabled server (use 'set server' instead)", cli_parse_enable_server, NULL },
|
{ { "enable", "server", NULL }, "enable server : enable a disabled server (use 'set server' instead)", cli_parse_enable_server, NULL },
|
||||||
{ { "set", "maxconn", "server", NULL }, "set maxconn server : change a server's maxconn setting", cli_parse_set_maxconn_server, NULL },
|
{ { "set", "maxconn", "server", NULL }, "set maxconn server : change a server's maxconn setting", cli_parse_set_maxconn_server, NULL },
|
||||||
{ { "set", "server", NULL }, "set server : change a server's state, weight or address", cli_parse_set_server },
|
{ { "set", "server", NULL }, "set server : change a server's state, weight, address or ssl", cli_parse_set_server },
|
||||||
{ { "get", "weight", NULL }, "get weight : report a server's current weight", cli_parse_get_weight },
|
{ { "get", "weight", NULL }, "get weight : report a server's current weight", cli_parse_get_weight },
|
||||||
{ { "set", "weight", NULL }, "set weight : change a server's weight (deprecated)", cli_parse_set_weight },
|
{ { "set", "weight", NULL }, "set weight : change a server's weight (deprecated)", cli_parse_set_weight },
|
||||||
|
|
||||||
|
@ -6901,6 +6901,23 @@ static void __ssl_sock_deinit(void)
|
|||||||
BIO_meth_free(ha_meth);
|
BIO_meth_free(ha_meth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Activate ssl on server <s>.
|
||||||
|
* do nothing if there is no change to apply
|
||||||
|
*
|
||||||
|
* Must be called with the server lock held.
|
||||||
|
*/
|
||||||
|
void ssl_sock_set_srv(struct server *s, signed char use_ssl)
|
||||||
|
{
|
||||||
|
if (s->use_ssl == use_ssl)
|
||||||
|
return;
|
||||||
|
|
||||||
|
s->use_ssl = use_ssl;
|
||||||
|
if (s->use_ssl == 1)
|
||||||
|
s->xprt = &ssl_sock;
|
||||||
|
else
|
||||||
|
s->xprt = s->check.xprt = s->agent.xprt = xprt_get(XPRT_RAW);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* Local variables:
|
||||||
* c-indent-level: 8
|
* c-indent-level: 8
|
||||||
|
Loading…
Reference in New Issue
Block a user