263 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			263 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # Tests for SSL connections, only run if mysqld is compiled | ||
|  | # with support for SSL. | ||
|  | 
 | ||
|  | --source include/have_ssl.inc | ||
|  | 
 | ||
|  | # Save the initial number of concurrent sessions | ||
|  | --source include/count_sessions.inc | ||
|  | 
 | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1(f1 int); | ||
|  | insert into t1 values (5); | ||
|  | 
 | ||
|  | grant select on test.* to ssl_user1@localhost require SSL; | ||
|  | grant select on test.* to ssl_user2@localhost require cipher "DHE-RSA-AES256-SHA"; | ||
|  | grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB"; | ||
|  | grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB"; | ||
|  | grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx"; | ||
|  | flush privileges; | ||
|  | 
 | ||
|  | connect (con1,localhost,ssl_user1,,,,,SSL); | ||
|  | connect (con2,localhost,ssl_user2,,,,,SSL); | ||
|  | connect (con3,localhost,ssl_user3,,,,,SSL); | ||
|  | connect (con4,localhost,ssl_user4,,,,,SSL); | ||
|  | --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT | ||
|  | --error ER_ACCESS_DENIED_ERROR | ||
|  | connect (con5,localhost,ssl_user5,,,,,SSL); | ||
|  | 
 | ||
|  | connection con1; | ||
|  | # Check ssl turned on | ||
|  | SHOW STATUS LIKE 'Ssl_cipher'; | ||
|  | select * from t1; | ||
|  | --error ER_TABLEACCESS_DENIED_ERROR | ||
|  | delete from t1; | ||
|  | 
 | ||
|  | connection con2; | ||
|  | # Check ssl turned on | ||
|  | SHOW STATUS LIKE 'Ssl_cipher'; | ||
|  | select * from t1; | ||
|  | --error ER_TABLEACCESS_DENIED_ERROR | ||
|  | delete from t1; | ||
|  | 
 | ||
|  | connection con3; | ||
|  | # Check ssl turned on | ||
|  | SHOW STATUS LIKE 'Ssl_cipher'; | ||
|  | select * from t1; | ||
|  | --error ER_TABLEACCESS_DENIED_ERROR | ||
|  | delete from t1; | ||
|  | 
 | ||
|  | connection con4; | ||
|  | # Check ssl turned on | ||
|  | SHOW STATUS LIKE 'Ssl_cipher'; | ||
|  | select * from t1; | ||
|  | --error ER_TABLEACCESS_DENIED_ERROR | ||
|  | delete from t1; | ||
|  | 
 | ||
|  | connection default; | ||
|  | disconnect con1; | ||
|  | disconnect con2; | ||
|  | disconnect con3; | ||
|  | disconnect con4; | ||
|  | drop user ssl_user1@localhost, ssl_user2@localhost, | ||
|  | ssl_user3@localhost, ssl_user4@localhost, ssl_user5@localhost; | ||
|  | 
 | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # End of 4.1 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Test that we can't open connection to server if we are using | ||
|  | # a different cacert | ||
|  | # | ||
|  | --exec echo "this query should not execute;" > $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | --replace_regex /2026 SSL connection error.*/2026 SSL connection error: xxxx/ | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-ca=$MYSQL_TEST_DIR/std_data/untrusted-cacert.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Test that we can't open connection to server if we are using | ||
|  | # a blank ca | ||
|  | # | ||
|  | --replace_regex /2026 SSL connection error.*/2026 SSL connection error: xxxx/ | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-ca= --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Test that we can't open connection to server if we are using | ||
|  | # a nonexistent ca file | ||
|  | # | ||
|  | --replace_regex /2026 SSL connection error.*/2026 SSL connection error: xxxx/ | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-ca=nonexisting_file.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | --echo | ||
|  | 
 | ||
|  | # | ||
|  | # Test that we can't open connection to server if we are using | ||
|  | # a blank client-key | ||
|  | # | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-key= --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | # | ||
|  | # Test that we can't open connection to server if we are using | ||
|  | # a blank client-cert | ||
|  | # | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-cert= --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#21611 Slave can't connect when master-ssl-cipher specified | ||
|  | # - Apparently selecting a cipher doesn't work at all | ||
|  | # - Usa a cipher that both yaSSL and OpenSSL supports | ||
|  | # | ||
|  | --exec echo "SHOW STATUS LIKE 'Ssl_cipher'; exit;" > $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | --exec $MYSQL_TEST --ssl-cipher=DHE-RSA-AES256-SHA < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#25309 SSL connections without CA certificate broken since MySQL 5.0.23 | ||
|  | # | ||
|  | # Test that we can open encrypted connection to server without | ||
|  | # verification of servers certificate by setting both ca certificate | ||
|  | # and ca path to NULL | ||
|  | # | ||
|  | --exec $MYSQL --ssl --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 | ||
|  | --echo End of 5.0 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#26174 Server Crash: INSERT ... SELECT ... FROM I_S.GLOBAL_STATUS in | ||
|  | # Event (see also information_schema.test for the other part of test for | ||
|  | # this bug). | ||
|  | # | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS thread_status; | ||
|  | DROP EVENT IF EXISTS event_status; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | SET GLOBAL event_scheduler=1; | ||
|  | 
 | ||
|  | DELIMITER $$; | ||
|  | 
 | ||
|  | CREATE EVENT event_status | ||
|  |  ON SCHEDULE AT NOW() | ||
|  |  ON COMPLETION NOT PRESERVE | ||
|  |  DO | ||
|  | BEGIN | ||
|  |   CREATE TABLE thread_status | ||
|  |   SELECT variable_name, variable_value | ||
|  |   FROM information_schema.session_status | ||
|  |   WHERE variable_name LIKE 'SSL_ACCEPTS' OR | ||
|  |   variable_name LIKE 'SSL_CALLBACK_CACHE_HITS'; | ||
|  | END$$ | ||
|  | 
 | ||
|  | DELIMITER ;$$ | ||
|  | 
 | ||
|  | let $wait_condition=select count(*) = 0 from information_schema.events where event_name='event_status'; | ||
|  | --source include/wait_condition.inc | ||
|  | 
 | ||
|  | # The actual value doesn't matter and can vary based on test ordering and on ssl library. | ||
|  | --replace_column 2 # | ||
|  | SELECT variable_name, variable_value FROM thread_status; | ||
|  | 
 | ||
|  | DROP TABLE thread_status; | ||
|  | SET GLOBAL event_scheduler=0; | ||
|  | 
 | ||
|  | # | ||
|  | # Test to connect using a list of ciphers | ||
|  | # | ||
|  | --exec echo "SHOW STATUS LIKE 'Ssl_cipher'; exit;" > $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | --exec $MYSQL_TEST --ssl-cipher=UNKNOWN-CIPHER:AES128-SHA < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | 
 | ||
|  | # Test to connect using a specifi cipher | ||
|  | # | ||
|  | --exec echo "SHOW STATUS LIKE 'Ssl_cipher'; exit;" > $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | --exec $MYSQL_TEST --ssl-cipher=AES128-SHA < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | # Test to connect using an unknown cipher | ||
|  | # | ||
|  | --exec echo "SHOW STATUS LIKE 'Ssl_cipher'; exit" > $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | --error 1 | ||
|  | --exec $MYSQL_TEST --ssl-cipher=UNKNOWN-CIPHER < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#27669 mysqldump: SSL connection error when trying to connect | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1(a int); | ||
|  | INSERT INTO t1 VALUES (1), (2); | ||
|  | 
 | ||
|  | # Run mysqldump | ||
|  | --exec $MYSQL_DUMP --skip-create --skip-comments --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test t1 | ||
|  | 
 | ||
|  | --exec $MYSQL_DUMP --skip-create --skip-comments --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test | ||
|  | 
 | ||
|  | --exec $MYSQL_DUMP --skip-create --skip-comments --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test | ||
|  | 
 | ||
|  | # With wrong parameters | ||
|  | --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR | ||
|  | --error 2 | ||
|  | --exec $MYSQL_DUMP --skip-create --skip-comments --ssl --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem test 2>&1 | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | --remove_file $MYSQLTEST_VARDIR/tmp/test.sql | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#39172 Asking for DH+non-RSA key with server set to use other key caused | ||
|  | #           YaSSL to crash the server. | ||
|  | # | ||
|  | 
 | ||
|  | # Common ciphers to openssl and yassl | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=DHE-RSA-AES256-SHA | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=EDH-RSA-DES-CBC3-SHA | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=EDH-RSA-DES-CBC-SHA | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl_cipher';" --ssl-cipher=RC4-SHA | ||
|  | --disable_query_log | ||
|  | --disable_result_log | ||
|  | 
 | ||
|  | # Below here caused crashes.  ################ | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=NOT----EXIST | ||
|  | # These probably exist but the server's keys can't be used to accept these kinds of connections. | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=DHE-DSS-AES128-RMD | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=DHE-DSS-AES128-SHA | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=DHE-DSS-AES256-RMD | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=DHE-DSS-AES256-SHA | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=DHE-DSS-DES-CBC3-RMD | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=EDH-DSS-DES-CBC3-SHA | ||
|  | --error 1,0 | ||
|  | --exec $MYSQL --host=localhost -e "SHOW STATUS LIKE 'Ssl-cipher';" --ssl-cipher=EDH-DSS-DES-CBC-SHA | ||
|  | # End of crashers.  ########################## | ||
|  | 
 | ||
|  | # If this gives a result, then the bug is fixed. | ||
|  | --enable_result_log | ||
|  | --enable_query_log | ||
|  | select 'is still running; no cipher request crashed the server' as result from dual; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#42158: leak: SSL_get_peer_certificate() doesn't have matching X509_free() | ||
|  | # | ||
|  | 
 | ||
|  | GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509; | ||
|  | FLUSH PRIVILEGES; | ||
|  | connect(con1,localhost,bug42158,,,,,SSL); | ||
|  | SHOW STATUS LIKE 'Ssl_cipher'; | ||
|  | disconnect con1; | ||
|  | connection default; | ||
|  | DROP USER bug42158@localhost; | ||
|  | 
 | ||
|  | --echo End of 5.1 tests | ||
|  | 
 | ||
|  | # Wait till we reached the initial number of concurrent sessions | ||
|  | --source include/wait_until_count_sessions.inc |