使用Hibernate,Spring和JDBC配置SSL证书

我正在尝试从使用用户名和密码登录到我的MySQL数据库服务器的未加密JDBC连接转移到使用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)进行配置的教程吗?

回答:

MySQL指南包含有关在客户端执行的操作的信息,此错误还包含一些详细信息。

基本上完成以下步骤

  1. 使用客户证书创建密钥库和信任库
  2. 配置您的环境(或MysqlDataSource)以使用这些密钥库和信任库
  3. 正确配置连接URL(您显然已经完成了此操作)。

就是这样。关键是要在客户端具有正确的证书。

更多信息:

  1. 从GlassFish与MySQL的安全JDBC连接
  2. 从Java到MySQL的安全JDBC连接
  3. MySQL SSL文档

以上是 使用Hibernate,Spring和JDBC配置SSL证书 的全部内容, 来源链接: utcz.com/qa/399796.html

回到顶部