15-create-connection-tls.td 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. > CREATE SECRET mysqlpass AS '${arg.mysql-root-password}'
  10. #
  11. # Validate MySQL server CA and client TLS/SSL client options
  12. #
  13. > CREATE SECRET ssl_ca AS '${arg.ssl-ca}'
  14. > CREATE SECRET ssl_client_cert AS '${arg.ssl-client-cert}'
  15. > CREATE SECRET ssl_client_key AS '${arg.ssl-client-key}'
  16. > CREATE SECRET ssl_wrong_ca AS '${arg.ssl-wrong-ca}'
  17. > CREATE SECRET ssl_wrong_client_cert AS '${arg.ssl-wrong-client-cert}'
  18. > CREATE SECRET ssl_wrong_client_key AS '${arg.ssl-wrong-client-key}'
  19. > CREATE SECRET mysqluserpass AS '${arg.mysql-user-password}'
  20. $ mysql-connect name=mysql url=mysql://root@mysql password=${arg.mysql-root-password}
  21. $ mysql-execute name=mysql
  22. CREATE USER 'norm_user' IDENTIFIED BY '${arg.mysql-user-password}';
  23. CREATE USER 'tls_user' IDENTIFIED BY '${arg.mysql-user-password}' REQUIRE SSL;
  24. CREATE USER 'tls_cert_user' IDENTIFIED BY '${arg.mysql-user-password}' REQUIRE X509;
  25. # Success: Disabled SSL Mode with normal user
  26. > CREATE CONNECTION mysq_tls TO MYSQL (
  27. HOST mysql,
  28. USER norm_user,
  29. PASSWORD SECRET mysqluserpass,
  30. SSL MODE disabled
  31. )
  32. > DROP CONNECTION mysq_tls;
  33. # Error: Disabled SSL Mode with required TLS user
  34. ! CREATE CONNECTION mysq_tls TO MYSQL (
  35. HOST mysql,
  36. USER tls_user,
  37. PASSWORD SECRET mysqluserpass,
  38. SSL MODE disabled
  39. )
  40. contains:Access denied for user
  41. # Success: Required SSL mode with required TLS user
  42. > CREATE CONNECTION mysq_tls TO MYSQL (
  43. HOST mysql,
  44. USER tls_user,
  45. PASSWORD SECRET mysqluserpass,
  46. SSL MODE required
  47. )
  48. > DROP CONNECTION mysq_tls;
  49. # Error: Required SSL mode with required x509 Cert user
  50. ! CREATE CONNECTION mysq_tls TO MYSQL (
  51. HOST mysql,
  52. USER tls_cert_user,
  53. PASSWORD SECRET mysqluserpass,
  54. SSL MODE required
  55. )
  56. contains:Access denied for user
  57. # Success: Required SSL mode + client cert with required x509 Cert user
  58. > CREATE CONNECTION mysq_tls TO MYSQL (
  59. HOST mysql,
  60. USER tls_cert_user,
  61. PASSWORD SECRET mysqluserpass,
  62. SSL MODE required,
  63. SSL CERTIFICATE SECRET ssl_client_cert,
  64. SSL KEY SECRET ssl_client_key
  65. )
  66. > DROP CONNECTION mysq_tls;
  67. # Error: Required SSL mode + wrong client cert with required x509 Cert user
  68. ! CREATE CONNECTION mysq_tls TO MYSQL (
  69. HOST mysql,
  70. USER tls_cert_user,
  71. PASSWORD SECRET mysqluserpass,
  72. SSL MODE required,
  73. SSL CERTIFICATE SECRET ssl_wrong_client_cert,
  74. SSL KEY SECRET ssl_wrong_client_key
  75. )
  76. contains:Input/output error
  77. # Success: Verify_CA SSL mode
  78. > CREATE CONNECTION mysq_tls TO MYSQL (
  79. HOST mysql,
  80. USER tls_user,
  81. PASSWORD SECRET mysqluserpass,
  82. SSL MODE verify_ca,
  83. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  84. )
  85. > DROP CONNECTION mysq_tls;
  86. # Error: Verify_CA SSL mode without providing Server CA
  87. ! CREATE CONNECTION mysq_tls TO MYSQL (
  88. HOST mysql,
  89. USER tls_user,
  90. PASSWORD SECRET mysqluserpass,
  91. SSL MODE verify_ca
  92. )
  93. contains:TLS error
  94. # Error: Verify_CA SSL mode with wrong Server CA
  95. ! CREATE CONNECTION mysq_tls TO MYSQL (
  96. HOST mysql,
  97. USER tls_user,
  98. PASSWORD SECRET mysqluserpass,
  99. SSL MODE verify_ca,
  100. SSL CERTIFICATE AUTHORITY SECRET ssl_wrong_ca
  101. )
  102. contains:TLS error
  103. # Error: Verify_CA SSL mode with required x509 Cert user and no client cert
  104. ! CREATE CONNECTION mysq_tls TO MYSQL (
  105. HOST mysql,
  106. USER tls_cert_user,
  107. PASSWORD SECRET mysqluserpass,
  108. SSL MODE verify_ca,
  109. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  110. )
  111. contains:Access denied for user
  112. # Success: Verify_CA SSL mode with required x509 Cert user
  113. > CREATE CONNECTION mysq_tls TO MYSQL (
  114. HOST mysql,
  115. USER tls_cert_user,
  116. PASSWORD SECRET mysqluserpass,
  117. SSL MODE verify_ca,
  118. SSL CERTIFICATE AUTHORITY SECRET ssl_ca,
  119. SSL CERTIFICATE SECRET ssl_client_cert,
  120. SSL KEY SECRET ssl_client_key
  121. )
  122. > DROP CONNECTION mysq_tls;
  123. # Success: Verify_CA SSL mode with required x509 Cert user and wrong client cert
  124. ! CREATE CONNECTION mysq_tls TO MYSQL (
  125. HOST mysql,
  126. USER tls_cert_user,
  127. PASSWORD SECRET mysqluserpass,
  128. SSL MODE verify_ca,
  129. SSL CERTIFICATE AUTHORITY SECRET ssl_ca,
  130. SSL CERTIFICATE SECRET ssl_wrong_client_cert,
  131. SSL KEY SECRET ssl_wrong_client_key
  132. )
  133. contains: Input/output error
  134. # TODO: Figure out how to test the Verify_Identity SSL Mode with the auto-generated certs
  135. # created by MySQL. They use an odd CN value in the CA cert:
  136. # https://dev.mysql.com/doc/refman/8.3/en/creating-ssl-rsa-files-using-mysql.html#creating-ssl-rsa-files-using-mysql-ssl-and-rsa-file-characteristics