[SPRING] SSL을 통해 mysql에 연결할 봄 구성
SPRINGSSL을 통해 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.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.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.Java 프로그램에 keyStore 및 trustStore를 건네 줄 필요는 없으며 연결 당 연결 속성을 통해 얻을 수있는 시스템 속성을 설정할 수도 있습니다.
Java 프로그램에 keyStore 및 trustStore를 건네 줄 필요는 없으며 연결 당 연결 속성을 통해 얻을 수있는 시스템 속성을 설정할 수도 있습니다.
따라서 서로 다른 연결 (응용 프로그램 서버에있는 경우 응용 프로그램)마다 다른 인증서를 사용할 수 있습니다.
원문 답변 : https://stackoverflow.com/a/51879119/173149 관련 부분 :
문서화 됨 :
from https://stackoverflow.com/questions/14265115/configure-spring-to-connect-to-mysql-over-ssl by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Hibernate와 Spring을 배우기위한 좋은 온라인 튜토리얼은 무엇입니까? [닫은] (0) | 2019.02.09 |
---|---|
[SPRING] JSF Managed Beans에 주입 된 스프링 빈 (0) | 2019.02.09 |
[SPRING] OpenEntityManagerInViewFilter 문제 (0) | 2019.02.09 |
[SPRING] 스프링 한계 최대 세션; 최대 사용자 수 제한 (0) | 2019.02.09 |
[SPRING] 액추에이터 / 새로 고침이 스프링 부트 2.0.1에서 제공되지 않음 (0) | 2019.02.09 |