Commit 5a44e1a4 authored by Sergei Golubchik's avatar Sergei Golubchik

tests for MDEV-7937: Enforce SSL when --ssl client option is used

* add a test when server certificate is verified successfully
* one test with two combinations (instead of two tests)
* verbose tets: make it print what it is doing
* fix the test to work with yassl and no-ssl builds
parent 80f6b225
if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME like 'have_ssl' and VARIABLE_VALUE like 'DISABLED'`)
{
--skip Test requires ssl to be disabled.
}
Variable_name Value create procedure have_ssl()
Ssl_cipher select if(variable_value > '','yes','no') as 'have_ssl'
from information_schema.session_status
where variable_name='ssl_cipher';
mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
have_ssl
no
mysql --ssl -e "call test.have_ssl()"
have_ssl
no
mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it
Variable_name Value mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
Ssl_cipher
ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it ERROR 2026 (HY000): SSL connection error: SSL is required, but the server does not support it
drop procedure have_ssl;
Variable_name Value create procedure have_ssl()
Ssl_cipher DHE-RSA-AES256-GCM-SHA384 select if(variable_value > '','yes','no') as 'have_ssl'
# from information_schema.session_status
Variable_name Value where variable_name='ssl_cipher';
Ssl_cipher DHE-RSA-AES256-GCM-SHA384 mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
# have_ssl
ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate yes
# mysql --ssl -e "call test.have_ssl()"
have_ssl
yes
mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
have_ssl
yes
mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate
drop procedure have_ssl;
[ssl]
--loose-enable-ssl
[nossl]
--loose-disable-ssl --loose-disable-ssl
source include/have_ssl_communication.inc; #
# MDEV-7937: Enforce SSL when --ssl client option is used
#
let $mysql_ssl_cert=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1; source include/have_ssl_crypto_functs.inc;
let $mysql_ssl_no_cert=$MYSQL --ssl -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
let $mysql_ssl_no_cert_ver=$MYSQL --ssl --ssl-verify-server-cert -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
let $mysql_ssl_cert_ver=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem --ssl-verify-server-cert -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
--exec $mysql_ssl_cert; # create a procedure instead of SHOW STATUS LIKE 'ssl_cipher'
--echo # # because the cipher depends on openssl (or yassl) version,
--exec $mysql_ssl_no_cert; # and it's actual value doesn't matter here anyway
--echo # create procedure have_ssl()
--error 1 select if(variable_value > '','yes','no') as 'have_ssl'
--exec $mysql_ssl_no_cert_ver; from information_schema.session_status
--echo # where variable_name='ssl_cipher';
--error 1
--exec $mysql_ssl_cert_ver;
--disable_abort_on_error
--echo mysql --ssl-ca=cacert.pem -e "call test.have_ssl()"
--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem -e "call test.have_ssl()" 2>&1
--echo mysql --ssl -e "call test.have_ssl()"
--exec $MYSQL --ssl -e "call test.have_ssl()" 2>&1
--echo mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
--exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()" 2>&1
--echo mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
# this is the test where certificate verification fails.
# but yassl doesn't support certificate verification, so
# we fake the test result for yassl
let yassl=`select variable_value='Unknown' from information_schema.session_status where variable_name='Ssl_session_cache_mode'`;
if (!$yassl) {
--exec $MYSQL --ssl --ssl-verify-server-cert -e "call test.have_ssl()" 2>&1
}
if ($yassl) {
--echo ERROR 2026 (HY000): SSL connection error: Failed to verify the server certificate
}
drop procedure have_ssl;
source include/have_ssl_disabled.inc;
# SSL not mandatory here.
let $mysql_ssl_cert=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
# SSL mandatory with verify server cert
let $mysql_ssl_cert_ver=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem --ssl_verify_server_cert -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
--exec $mysql_ssl_cert;
--error 1
--exec $mysql_ssl_cert_ver;
# SSL not mandatory again
let $mysql_no_ssl_but_ver=$MYSQL --ssl_verify_server_cert -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
--exec $mysql_no_ssl_but_ver;
# SSL mandatory but no specifications for ssl parameters
let $mysql_ssl_no_spec_ver=$MYSQL --ssl --ssl_verify_server_cert -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
--error 1
--exec $mysql_ssl_no_spec_ver
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment