[SPRING] Hibernate, Spring, JDBC로 SSL 인증서 구성
SPRINGHibernate, Spring, JDBC로 SSL 인증서 구성
사용자 이름과 암호를 사용하여 암호화되지 않은 JDBC 연결에서 내 MySQL 데이터베이스 서버에 로그인하고 SSL을 사용하는 연결 및 인증서 기반 인증으로 이동하려고합니다. Spring MVC로 Hibernate를 사용하고있다. 내 WebAppConfig 파일은 다음과 같습니다.
package com.****.PolicyManager.init;
import java.util.Properties;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
@Configuration
@ComponentScan("com.sprhib")
@EnableWebMvc
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
public class WebAppConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.urlSSL";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(
PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
sessionFactoryBean.setHibernateProperties(hibProperties());
return sessionFactoryBean;
}
private Properties hibProperties() {
Properties properties = new Properties();
properties.put(PROPERTY_NAME_HIBERNATE_DIALECT,
env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL,
env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
return properties;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager =
new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
그리고 내 속성 설정 파일 (application.properties)은 다음과 같습니다 :
#DB properties:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/PolicyManager
db.urlSSL=jdbc:mysql://localhost:3306/PolicyManager?autoReconnect=true&verifyServerCertificate=false&useSSL=true&requireSSL=true
db.username=myuser
db.password=mypass
#Hibernate Configuration:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
entitymanager.packages.to.scan=com.****.PolicyManager.model
나는 / etc / mysql / certs에 올바른 인증서를 생성하고 my.cnf를 편집하여 인증서를 기반으로 인증을 사용하는 데이터베이스 초기화 방법을 온라인에서 찾을 수 없습니다. 내 데이터베이스 사용자 이름과 암호를 일반 텍스트로 서버에 저장할 필요성을 제거하십시오.
누구든지 해결책을 제안하거나 구성을 위해이 WebAppConfig.java 파일 (hib 속성, DriverManagerDataSource 및 LocalSessionFactoryBean)을 사용하는 자습서를 가르쳐 주시겠습니까?
해결법
-
==============================
1.MySQL 가이드에는 클라이언트 측에서 수행 할 작업에 대한 정보가 있으며이 버그에도 몇 가지 세부 정보가 있습니다.
MySQL 가이드에는 클라이언트 측에서 수행 할 작업에 대한 정보가 있으며이 버그에도 몇 가지 세부 정보가 있습니다.
기본적으로 다음 단계를 수행합니다.
그리고 그것은 그것이어야합니다. 열쇠는 클라이언트 측에서 올바른 인증서를 갖는 것입니다.
추가 정보 :
from https://stackoverflow.com/questions/18615774/configure-ssl-certificates-with-hibernate-spring-and-jdbc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Boot - 다른 데이터베이스에 대해 동일한 저장소와 동일한 엔티티 (0) | 2019.04.14 |
---|---|
[SPRING] Spring의 트랜잭션 및 스트림 (0) | 2019.04.14 |
[SPRING] "java.net.BindException : 이미 사용중인 주소 : JVM_Bind"이클립스 화성에서 부두를 시작할 때 (0) | 2019.04.14 |
[SPRING] Eclipse Maven Spring : 서버로 실행하려고 할 때의 서버 오류 (Tomcat 7) (0) | 2019.04.14 |
[SPRING] 퀴즈 게임 - 관리자를위한 질문, 답변 및 기록 만들기 (0) | 2019.04.14 |