如何以编程方式使用 Spring Boot 和 Tomcat 提供密钥库文件?

Posted

技术标签:

【中文标题】如何以编程方式使用 Spring Boot 和 Tomcat 提供密钥库文件?【英文标题】:How can I programmatically supply the keystore file with Spring Boot and Tomcat? 【发布时间】:2020-11-25 03:27:28 【问题描述】:

我知道我们可以使用配置密钥库的文件位置

server.ssl.key-store=file:/path/to/file.p12

出于安全考虑,我们希望删除磁盘上的 P12 文件,并直接从云提供商的保管库中获取它。 由于keystore的密码是可以配置的,所以我可以使用https://***.com/a/44971126/4460877来设置

是否有类似的方法来配置密钥库文件,而不是通过从云提供商获取文件位置来配置它?

【问题讨论】:

【参考方案1】:

我能够使用WebServerFactoryCustomizer 以编程方式设置密钥库文件,如下所示

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatSslStoreCustomizer() 
        // Supply key store password
        String keyStorePassword;
        // Supply key store file as a stream
        InputStream keyStoreFile;
        KeyStore keyStore;

        try (InputStream is = keyStoreFile) 
            keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
            keyStore.load(is, keyStorePassword.toCharArray());
        
        catch (Exception e) 
            throw new RuntimeException("Cannot load keystore file; cause: " + e.getMessage(), e);
        

        return tomcat -> tomcat.setSslStoreProvider(new SslStoreProvider() 
            @Override
            public KeyStore getKeyStore() 
                return keyStore;
            

            @Override
            public KeyStore getTrustStore() 
                return null;
            
        );
    

【讨论】:

以上是关于如何以编程方式使用 Spring Boot 和 Tomcat 提供密钥库文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

Spring Boot MVC - 如何以编程方式生成实体的 etag 值?

在 Spring Boot 中使用默认模式以编程方式配置 OracleDataSource

使用 spring-boot 以编程方式添加另一个属性资源配置器

Spring Boot 以编程方式设置配置文件