Navy1228 2023-08-21 22:23 采纳率: 44.8%
浏览 3
已结题

请问 mysql 如何对发起通信的 java 客户端做证书验证

请问,我 mysql 生成了 ssl 相关证书和秘钥,也创建了需要 ssl 连接的账户,但是为啥在登录时直接添加【--ssl-mode=require】就可以了,为啥没有验证秘钥和证书的步骤


在 java 程序里也是,添加 useSSL=true 就可以正常连接了,我希望的效果是 mysql 要对发起通信请求的客户端做证书验证

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-22 08:09
    关注

    【以下回答由 GPT 生成】

    回答:

    首先,让我们来解释为什么在添加了--ssl-mode=require时可以成功连接MySQL而没有进行证书和秘钥的验证步骤。

    当你在MySQL连接字符串中添加了--ssl-mode=require参数时,MySQL会要求客户端使用SSL进行连接。但是,并没有指定要使用哪个SSL证书和秘钥,因此MySQL会默认使用系统的信任证书与客户端进行握手,而不要求进行客户端证书验证。

    要实现MySQL对Java客户端的证书验证,需要执行以下步骤:

    1. 将Java客户端的证书导出为PEM格式。你可以使用Java的keytool命令来完成这一步骤。假设你已经有一个Java密钥库文件(.jks或.p12格式),你可以使用以下命令导出证书:
    keytool -exportcert -keystore keystore.jks -alias client_alias -file client.pem
    
    1. 将PEM格式的Java客户端证书存储到MySQL服务器上。你可以将客户端证书存储在MySQL服务器的某个目录下,例如/etc/mysql/ssl

    2. 在MySQL配置文件中启用SSL。编辑MySQL配置文件(通常命名为my.cnfmy.ini),将以下内容添加到文件中:

    [mysqld]
    ssl-ca=/etc/mysql/ssl/ca-cert.pem
    ssl-cert=/etc/mysql/ssl/server-cert.pem
    ssl-key=/etc/mysql/ssl/server-key.pem
    ssl-verify-server-cert = true
    

    上述配置指定了MySQL服务器的证书和秘钥的路径,以及启用了服务器证书验证。

    1. 将Java程序与MySQL服务器建立安全连接。使用以下Java代码示例来建立安全连接:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Properties;
    
    public class MySQLConnection {
        public static void main(String[] args) {
            try {
                // 设置MySQL连接属性
                Properties prop = new Properties();
                prop.setProperty("user", "username");
                prop.setProperty("password", "password");
                prop.setProperty("useSSL", "true");
                prop.setProperty("requireSSL", "true");
                prop.setProperty("clientCertificateKeyStoreUrl", "file:/path/to/client.pem");
                prop.setProperty("clientCertificateKeyStorePassword", "keystore_password");
    
                // 连接MySQL服务器
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", prop);
    
                // 做你的操作...
    
                // 关闭连接
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    在上述代码中,你需要将usernamepassword替换为你的MySQL用户名和密码,将/path/to/client.pem替换为你导出的Java客户端证书的路径,将keystore_password替换为你客户端密钥库的密码。

    通过上述步骤,你就可以实现MySQL对Java客户端的证书验证了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月2日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)