La base de datos mysql usa useSSL=true y configura el certificado ca y la conexión clave

Referencia: Mysql5.7 abre SSL y admite la autenticación de cliente Springboot
https://blog.csdn.net/weixin_42911645/article/details/127070812

Premisa: La base de datos ha sido instalada, aquí tome mysql5.7 como ejemplo

1. Configurar el servidor mysql

  1. Para confirmar la ubicación del directorio de la base de datos, puede ingresar el siguiente comando para ver:
show variables like 'datadir';

inserte la descripción de la imagen aquí
Después de instalar la base de datos, hay archivos de certificados generados de forma predeterminada en el directorio de la base de datos:
ca.pem, ca-key.pem, client-cert.pem, client-key.pem, server-cert.pem, server-key.pem
si no hay archivos anteriores, deben generarse manualmente, -> [Crear certificado]

  1. Modifique el archivo de configuración mysql y agregue la configuración de llamadas ssl
[client]
ssl-cert = "C:/ProgramData/MySQL/MySQL Server 5.7/Data/client-cert.pem"
ssl-key = "C:/ProgramData/MySQL/MySQL Server 5.7/Data/client-key.pem"
注意:如果是做了主从,需要把主的证书拷贝到从
    
[mysqld]
ssl-ca="C:/ProgramData/MySQL/MySQL Server 5.7/Data/ca.pem"
ssl-cert="C:/ProgramData/MySQL/MySQL Server 5.7/Data/server-cert.pem"
ssl-key="C:/ProgramData/MySQL/MySQL Server 5.7/Data/server-key.pem"
  1. Reinicie el servicio mysql, verifique si la base de datos ssl está habilitada, los valores have_openssl y have_ssl son SÍ, lo que indica que ssl está habilitado correctamente
show variables like '%ssl%';
show variables like 'have%ssl%';
  1. A través de la prueba de conexión de la clave del cliente y el certificado ssl+contraseña, y ver las propiedades
    Especifique la ubicación del archivo del certificado client-cert.pem, client-key.pem.
mysql -uroot -proot -h 127.0.0.1 -P 13306 --ssl-cert=D:/server/config/client-cert.pem --ssl-key=D:/server/config/client-key.pem

Para determinar si la conexión actual al servidor usa cifrado, verifique el valor de sesión de la variable de estado Ssl_cipher. Si el valor está vacío, la conexión no está cifrada. De lo contrario, la conexión se cifra y el valor indica la contraseña de cifrado. Por ejemplo:

mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';

+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| Ssl_cipher    | DHE-RSA-AES128-GCM-SHA256 |
+---------------+---------------------------+

Para el cliente mysql, otra forma es usar el comando STATUSor\s y verificar esta línea SSL:

# 1.未使用
mysql> \s
...
SSL: Not in use
...
 
 # 2.已使用
mysql> \s
...
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256  
...

2. El cliente JAVA se conecta a la base de datos

  1. Busque el servidor para proporcionar tres archivos originales.
    inserte la descripción de la imagen aquí
    En el directorio de archivos original, ejecute las siguientes instrucciones para generar keystoremysqly truststoremysqlarchivar.
    Puede modificar la contraseña usted mismo, la predeterminada es123456
1. 生成truststore文件

keytool -importcert -alias Cacert -file ca.pem -keystore truststoremysql -storepass 123456

2. 生成中间文件

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:123456 -out client-keystore.p12

3. 生成keystore文件

keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore keystoremysql -deststoretype JKS -deststorepass 123456

以上两个文件生成的参数可以自己修改,windows环境中没有openssl,在linux环境中执行。密码注意自行更改为统一的值,后续配置要用到
Resultados generados:
inserte la descripción de la imagen aquí
Otro:
Para mayor comodidad, las instrucciones anteriores se han empaquetado como secuencias de comandos:
inserte la descripción de la imagen aquí
create.sh:

#!/bin/bash

passwd=$1
outpath=$(pwd)/out
echo "outpath: ${outpath}"

if [ -z "$passwd" ];then
  echo '密码不能为空,使用示例:./create 123456'
  exit 0
fi

rm -rf $outpath
if [ ! -d $outpath ];then
  mkdir $outpath
fi



echo '1【生成truststore文件...】'
keytool -importcert -alias Cacert -file ca.pem -keystore ${outpath}/truststoremysql -storepass ${passwd}

echo '2【生成中间文件...】'
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:${passwd} -out ${outpath}/client-keystore.p12

echo '3【生成keystore文件...】'
keytool -importkeystore -srckeystore ${outpath}/client-keystore.p12 -srcstoretype pkcs12 -srcstorepass ${passwd} -destkeystore ${outpath}/keystoremysql -deststoretype JKS -deststorepass ${passwd}

echo " "
echo "=======文件生成成功======"
echo "请拷贝目录${outpath}下的 truststoremysql 和 keystoremysql 文件"
echo "========================="
  1. Usar archivos de destino keystoremysqly truststoremysqlcontraseñas 123456para enlaces de clientes
    El siguiente es un ejemplo del archivo de configuración de Spring application.properties:
# 目标文件目录(keystoremysql、truststoremysql)
ssl.cert.path=C:\\Users\\cmc\\Desktop

# 生成目标文件时填写的密码
ssl.password=123456

ssl.config=useSSL=true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=${ssl.password}&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=${ssl.password}

# datasource配置:
spring.datasource.master.url=jdbc:mysql://127.0.0.1:13306/db1?nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8&${ssl.config}

Supongo que te gusta

Origin blog.csdn.net/u014438244/article/details/127699992
Recomendado
Clasificación