JDBC使用SSL连接mysql(包含ssl_type=x509)

前言

因为工作中上层领导发话,保密级别高的数据库交互需要用SSL连接,然后集体懵逼了,都没有弄过,问过自己的朋友也都没搞过这些,网上找的案例总是失败,最后参照MySql官网终于打通了x509的连接,接下来上实例

将客户端密钥和证书文件转换为 PKCS #12 存档

首先准备好client-cert.pem和client-key.pem文件(客户端发起SSL连接的依据),然后文件目录下执行以下指令,如果windows系统没有安装openssl可以下载安装或着在linux上执行,然后download生成的p12文件

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

将客户端密钥和证书导入 Java 密钥库:

Windows系统下进入安装jdk的bin目录下(或者将client-keystore.p12文件复制到bin目录)运行以下指令得到keystore文件,并设置密码为mypassword

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

client-keystore.p12如果在其他文件夹需要指定文件路径

windows运行如果出现以下异常信息,需要下载新的jdk,作者下载的是jdk16

keytool 错误: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)

将生成的keystore文件上传到服务器

配置连接

这是最后一步,可以通过三种方式实现:

1.使用 Java 命令行参数

-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=mypassword

2.直接在客户端代码中设置系统属性:

System.setProperty("javax.net.ssl.keyStore","keystore文件路径"); 
System.setProperty("javax.net.ssl.keyStorePassword","mypassword");

3.通过 Connector/J 连接属性:

clientCertificateKeyStoreUrl=file:生成的keystore路径
clientCertificateKeyStorePassword=mypassword

4.jdbc链接拼接

return "&useSSL=true&verifyServerCertificate=false&requireSSL=true&clientCertificateKeyStoreUrl=file:"+po.getKeystoreUrl()+"&clientCertificateKeyStorePassword="+po.getKeystorePassword();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值