连接 JDBC MS SQL Server 时证书不符合算法约束

Posted

技术标签:

【中文标题】连接 JDBC MS SQL Server 时证书不符合算法约束【英文标题】:Certificates does not conform to algorithm constraints when connecting to JDBC MS SQL Server 【发布时间】:2016-12-19 22:48:03 【问题描述】:

我正在尝试将我的 Spring 应用程序连接到 Microsoft SQL Server 数据库,但出现以下错误:

Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection] with root cause
 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

我已经尝试将 JDK 的 certpath 设置删除为空白,例如:jdk.certpath.disabledAlgorithms=

这是我的配置:

@Configuration
@EnableJpaRepositories("com.abc.cet.eai.repository.sql")
@PropertySource("classpath:eai.application.properties")
public class JpaConfig 

    @Bean
    public DataSource dataSource() 
        SQLServerDataSource dataSource = new SQLServerDataSource();
        dataSource.setServerName("SERVERNAME");
        dataSource.setUser("USERNAME");
        dataSource.setPassword("PASSWORD");
        dataSource.setDatabaseName("DATABASE_NAME");
        return dataSource;
    

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() 
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setPackagesToScan("com.abc.cet.eai.domain");
        factory.setDataSource(dataSource());
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setJpaProperties(additionalProperties());

        return factory;
    

    @Bean
    public PlatformTransactionManager transactionManager() 
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory().getObject());
        return txManager;
    

    public Properties additionalProperties() 
        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServer2008Dialect");
        return properties;
    

有没有人解决过类似的问题?

【问题讨论】:

【参考方案1】:

您遇到的问题与我在WAGON-470 中遇到的问题基本相同。使用 MD5 创建的证书被现代 Java 拒绝。您应该检查证书本身、服务器提供的密码并启用 JSSE 调试选项。您可能需要使用更安全的方法(如 SHA256)更新/交换您的证书。

【讨论】:

以上是关于连接 JDBC MS SQL Server 时证书不符合算法约束的主要内容,如果未能解决你的问题,请参考以下文章

什么是MS SQL Server 2005 Express的jTDS JDBC Connect URL

用dbvisualizer 怎么连接 MS SQL Server

Window 2008 Tomcat 7 MS SQL Server 2008R2 - 无法识别JNDI JDBC驱动程序

(转) java 通过 jdbc 链接 ms sql server 中出现 "no suitable driver for ..."

jdbc连接sql Server 数据库时用的数据库名是指实例名吗?

从 Camel 和 Spring Boot 到 MS SQL Server 的 JDBC