如何在不使用文件的情况下将 Java KeyStore 证书加载到 Tomcat 服务器中

问题描述 投票:0回答:1

我已从 Azure Key Vault 导入证书并将其加载到 Java KeyStore 对象中。我应该以编程方式将此对象导入到 Tomcat 服务器中,即不使用文件。这可行吗?如果可以,如何实现?

Azure 密钥保管库中的证书已成功加载到 Java KeyStore 对象中。但是,我不熟悉如何通过Java代码配置Tomcat。我尝试使用 ChatGPT 作为起点,它提出了以下建议:

    import org.apache.catalina.Context;
    import org.apache.catalina.connector.Connector;
    import org.apache.coyote.http11.Http11NioProtocol;
    import org.apache.tomcat.util.net.SSLHostConfig;
    import org.apache.tomcat.util.net.SSLHostConfigCertificate;
    import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
    import org.springframework.boot.web.server.ConfigurableWebServerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.security.KeyStore;
    
    @Configuration
    public class TomcatSslConfiguration {
    
        @Bean
        public ConfigurableWebServerFactory webServerFactory() {
            TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
                @Override
                protected void postProcessContext(Context context) {
                    // Programmatically configure SSL
                    configureSsl(context);
                }
            };
            return factory;
        }
    
        private void configureSsl(Context context) {
            // Create and load your KeyStore programmatically
            KeyStore keyStore = loadKeyStore();
    
            // Create an SSLHostConfigCertificate
            SSLHostConfigCertificate sslHostConfigCertificate = new SSLHostConfigCertificate();
            sslHostConfigCertificate.setCertificateKeystore(keyStore);
    
            // Create an SSLHostConfig
            SSLHostConfig sslHostConfig = new SSLHostConfig();
            sslHostConfig.addCertificate(sslHostConfigCertificate);
    
            // Set the SSLHostConfig in the Tomcat context
            context.addSslHostConfig(sslHostConfig);
        }
    
        private KeyStore loadKeyStore() {
            // Implement your custom logic to load the KeyStore
            // For example, you can use KeyStore.getInstance("JKS") and load it from a custom     source
            // KeyStore keyStore = ...
    
            return keyStore;
        }
    }

总之,

context.addSslHostConfig
似乎并不存在。我不确定这是否是一个好的起点。感谢您的任何建议。

java spring ssl tomcat keystore
1个回答
0
投票

我过去也尝试过使用自定义 ssl 配置,我不想将路径和密码指定为属性,而只是传递密钥库、密钥管理器/信任管理器,甚至已经初始化的 sslcontext。然而这是不可能的。另请参阅我的关于与您的问题类似的问题:使用 Tomcat 以编程方式配置 Spring Boot 服务器的 SSL 失败

我在Tomcat的GitHub上打开了一个pull request,参见这里:https://github.com/apache/tomcat/pull/673 看PR的评论,好像他们内部正在讨论要不要启用。

© www.soinside.com 2019 - 2024. All rights reserved.