복붙노트

[SPRING] SSL을 통해 mysql에 연결할 봄 구성

SPRING

SSL을 통해 mysql에 연결할 봄 구성

Java 응용 프로그램에서 SSL을 통해 MySQL에 연결하고 있습니다. SSL을 지원하고 클라이언트 인증서를 생성하도록 MYSQL을 구성했습니다. 서버 CA 인증서 및 클라이언트 인증서를 키 저장소로 가져 왔습니다. 내 코드가 현재 어떻게 보이는지

    String url = "jdbc:mysql://127.0.0.1:3306/MySampleDb? verifyServerCertificate =true&useSSL=true&requireSSL=true"

    System.setProperty("javax.net.ssl.keyStore","/home/cert/keystore");
    System.setProperty("javax.net.ssl.keyStorePassword","password");
    System.setProperty("javax.net.ssl.trustStore","/home/cert/truststore");
    System.setProperty("javax.net.ssl.trustStorePassword","password");

    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(url, user, password);

SSL을 통해 MYSQL에 연결하기 위해 C3p0과 함께 spring을 사용하고 싶습니다. 이것은 jdbc.properties에서 매개 변수를 읽는 스프링 구성 파일입니다.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    ........
</bean>

특성을 설정하기 위해 스프링을 어떻게 구성 할 수 있습니까? verifyServerCertificate = true useSSL = true requireSSL = true " 또한 스프링 설정 파일에서 keyStore 및 trustStore 값을 설정할 수도 있습니다.

해결법

  1. ==============================

    1.jdbc.properties의 jdbc.url 값은 다음과 같아야합니다.

    jdbc.properties의 jdbc.url 값은 다음과 같아야합니다.

    이러한 매개 변수는 MySQL의 URL에 직접 추가해야합니다. keyStore 및 trustStore의 매개 변수는 다음과 같이 시작시 JVM에 전달되어야합니다.

    -Djavax.net.ssl.keyStore=path_to_keystore_file
    -Djavax.net.ssl.keyStorePassword=password
    -Djavax.net.ssl.trustStore=path_to_truststore_file
    -Djavax.net.ssl.trustStorePassword=password
    

    Spring을 사용하여 시스템 속성을 설정할 수는 있지만 결코 사용하지 않을 것입니다. 너무 복잡합니다.

  2. ==============================

    2.Java 기반 구성을 사용하여 DataSource의 useSSl, requireSSL 및 verifyServerCertificate 등록 정보를 구성 할 수 있습니다. DataSource 클래스의 addDataSourceProperty 메서드는 아래 코드 스 니펫에 나와있는 것처럼 사용자에게 기능을 제공합니다 (HicariDataSource를 C3p0 인스턴스로 바꿀 수 있음)

    Java 기반 구성을 사용하여 DataSource의 useSSl, requireSSL 및 verifyServerCertificate 등록 정보를 구성 할 수 있습니다. DataSource 클래스의 addDataSourceProperty 메서드는 아래 코드 스 니펫에 나와있는 것처럼 사용자에게 기능을 제공합니다 (HicariDataSource를 C3p0 인스턴스로 바꿀 수 있음)

    MySQL Connector / J는 키 저장소의 구성 속성 (예 : trustCertificateKeyStoreUrl)을 노출하므로 addDataSourceProperty를 이러한 속성에도 사용할 수 있다고 가정합니다.

    XML 구성 스키마가 addDataSourceProperty에 해당하는 태그를 제공하는지 여부는 알 수 없습니다.

    public DataSource createPslDataSource(final MyDataSourceProperties myDataSourceProperties) {
    
        HikariDataSource dataSource = new HikariDataSource();
    
        dataSource.addDataSourceProperty("useSSL", true);
        dataSource.addDataSourceProperty("requireSSL", true);
        dataSource.addDataSourceProperty("verifyServerCertificate", true);
    
        dataSource.setJdbcUrl(myDataSourceProperties.getJdbcUrl());
        dataSource.setUsername(myDataSourceProperties.getUsername());
        dataSource.setPassword(myDataSourceProperties.getPassword());
    
        return dataSource;
    }
    
  3. ==============================

    3.Java 프로그램에 keyStore 및 trustStore를 건네 줄 필요는 없으며 연결 당 연결 속성을 통해 얻을 수있는 시스템 속성을 설정할 수도 있습니다.

    Java 프로그램에 keyStore 및 trustStore를 건네 줄 필요는 없으며 연결 당 연결 속성을 통해 얻을 수있는 시스템 속성을 설정할 수도 있습니다.

    따라서 서로 다른 연결 (응용 프로그램 서버에있는 경우 응용 프로그램)마다 다른 인증서를 사용할 수 있습니다.

    원문 답변 : https://stackoverflow.com/a/51879119/173149 관련 부분 :

    문서화 됨 :

  4. from https://stackoverflow.com/questions/14265115/configure-spring-to-connect-to-mysql-over-ssl by cc-by-sa and MIT license