MySQL configura SSL y modifica la configuración de la conexión JDBC

1. Utilice OpenSSL para crear un certificado SSL y una clave privada

  • Descargue la instalación de Win (xx) OpenSSL según su sistema operativo
  • Cree un nuevo directorio para almacenar el certificado generado y la clave privada
//生成一个 CA 私钥
openssl genrsa 2048 > cert/ca-key.pem
//使用私钥生成一个新的数字证书,执行这个命令时, 会需要填写一些问题, 随便填写就可以了
openssl req -sha1 -new -x509 -nodes -days 3650 -key ./cert/ca-key.pem > cert/ca-cert.pem
//创建服务器端RSA 私钥和数字证书,这个命令会生成一个新的私钥(server-key.pem), 同时会使用这个新私钥来生成一个证书请求文件(server-req.pem).
//这个命令同样需要回答几个问题, 随便填写即可. 不过需要注意的是, A challenge password 这一项需要为空
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout cert/server-key.pem > cert/server-req.pem
//将生成的私钥转换为 RSA 私钥文件格式
openssl rsa -in cert/server-key.pem -out cert/server-key.pem
//使用原先生成的 CA 证书来生成一个服务器端的数字证书
openssl x509 -sha1 -req -in cert/server-req.pem -days 3650 -CA cert/ca-cert.pem -CAkey cert/ca-key.pem -set_serial 01 > cert/server-cert.pem
//创建客户端的 RSA 私钥和数字证书
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout cert/client-key.pem > cert/client-req.pem
//将生成的私钥转换为 RSA 私钥文件格式
openssl rsa -in cert/client-key.pem -out cert/client-key.pem
//为客户端创建一个数字证书
openssl x509 -sha1 -req -in cert/client-req.pem -days 3650 -CA cert/ca-cert.pem -CAkey cert/ca-key.pem -set_serial 01 > cert/client-cert.pem

1.1 configuración SSL

En los pasos anteriores, hemos generado 8 archivos, que son:

  • ca-cert.pem: certificado de CA, utilizado para generar certificados digitales del lado del servidor / del lado del cliente.
  • ca-key.pem: clave privada de CA, utilizada para generar certificado digital de servidor / cliente.
  • server-key.pem: clave privada RSA del servidor
  • server-req.pem: archivo de solicitud de certificado del lado del servidor, utilizado para generar el certificado digital del lado del servidor.
  • server-cert.pem: el certificado digital del servidor.
  • client-key.pem: clave privada RSA del cliente
  • client-req.pem: archivo de solicitud de certificado del cliente, que se utiliza para generar el certificado digital del cliente.
  • client-cert.pem: el certificado digital del cliente.

2. Verifique si la base de datos admite SSL

Primero ejecute el siguiente comando en MySQL para verificar si MySQL es compatible con SSL:

mysql> SHOW VARIABLES LIKE 'have_ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+
1 row in set (0.02 sec)

Cuando have_ssl es YES, significa que el servicio MySQL ya es compatible con SSL. Si es DESABLE, debe habilitar la función SSL al iniciar el servicio MySQL.

2.1 Establecer el archivo de configuración de MySQL y habilitar la autenticación SSL

vi my.cnf

# 在mysqld下面添加如下配置
[mysqld]
require_secure_transport = ON

2.2 Configurar SSL para MySQL

A continuación, debemos configurar el servidor y el cliente por separado:

  • Configuración del lado del
    servidor El lado del servidor necesita usar tres archivos, a saber: certificado de CA, clave privada RSA del lado del servidor, certificado digital del lado del servidor, necesitamos agregar el siguiente contenido bajo el dominio de configuración [mysqld]:
[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

Luego también podemos cambiar la dirección de enlace para que el servicio MySQL pueda recibir clientes de todas las direcciones IP, a saber:

bind-address = *

Cuando la configuración está completa, necesitamos reiniciar el servicio MySQL.En el
paso final, agregamos una cuenta que requiere SSL para iniciar sesión para verificar si la configuración SSL que hemos configurado surte efecto:

GRANT ALL PRIVILEGES ON *.* TO 'ssl_test'@'%' IDENTIFIED BY 'ssl_test' REQUIRE SSL;
FLUSH PRIVILEGES;
  • Verifique si el usuario está usando ssl
SELECT ssl_type From mysql.user Where user="ssler"

ssl_type es una cadena vacía, lo que indica que el usuario no está obligado a utilizar una conexión ssl.

  • Configurar usuarios para que usen ssl para conectarse
ALTER USER 'ssler'@'%' REQUIRE SSL;
FLUSH PRIVILEGES

Ejecutar en este momento SELECT ssl_type From mysql.user Where user="ssler"
Inserte la descripción de la imagen aquí
ANYsignifica que debe usar una conexión ssl.

Cuando esté configurado, use root para iniciar sesión en MySQL

mysql --ssl-ca="D:/Program Files/OpenSSL-Win64/bin/cert/ca-cert.pem" --ssl-cert="D:/Program Files/OpenSSL-Win64/bin/cert/client-cert.pem" --ssl-key="D:/Program Files/OpenSSL-Win64/bin/cert/client-key.pem"  -u coisini -p

Cuando la conexión es exitosa, cuando ejecutamos las variables show como la instrucción '% ssl%', se mostrará el siguiente resultado:

mysql> show variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.01 sec)

Tres, configuración JAVA-JDBC

Utilice la herramienta de claves que viene con jdk para importar el certificado de cliente mysql al almacén de claves y generar un archivo de claves.

De acuerdo con el ca.pem encontrado arriba, cópielo en el host de destino y luego ejecute el siguiente comando

  • Utilice este comando para generar los archivos necesarios para que Java utilice la conexión SSL:
keytool -importcert -alias MySQLCACert -file "D:\Program Files\OpenSSL-Win64\bin\cert\ca-cert.pem" -keystore truststore -storepass 密码
  • Verifique que el certificado se importe mediante instrucciones
$ keytool -list -keystore mysql.ks
输入密钥库口令:
密钥库类型: jks
密钥库提供方: SUN

您的密钥库包含 1 个条目

mysql, 2020-6-9, trustedCertEntry,
证书指纹 (SHA1): 6B:EE:FE:B4:74:89:A3:88:6C:49:22:44:6D:FB:88:DE:18:6A:7A:F6
  • Configurar las variables de entorno del sistema para los archivos generados
名:JAVA_OPTS 
值:-Djavax.net.ssl.trustStore="上一步中生成文件的本地路径" -Djavax.net.ssl.trustStorePassword="密码"
  • Conexión de configuración JDBC
##jdbc.properties:
yxaq.dz=jdbc:mysql://127.0.0.1:3306/yxaqgl?verifyServerCertificate=true&useSSL=true&requireSSL=true

Supongo que te gusta

Origin blog.csdn.net/An1090239782/article/details/111638075
Recomendado
Clasificación