当前位置: 首页 > 知识库问答 >
问题:

Spring Boot自定义SSL密钥存储加载逻辑

黄弘深
2023-03-14

要启用SSL很简单:只需填充以下属性:

server.port=443
server.ssl.keyStoreType=PKCS12
server.ssl.key-store=classpath:keystore/mycertificate.p12
server.ssl.key-store-password=mypassword
security.require-ssl=true

但是我需要这种额外的行为:我需要一个自定义的加载逻辑,而不是从特定路径(server.ssl.key-store)加载证书:我需要使用例如AWS秘密服务或类似的方法来实现这种自定义方式。

那么,有可能吗?是否有可能在Spring中扩展这种默认行为,指定自定义加载器或类似的东西?

共有1个答案

空枫涟
2023-03-14

spring boot默认情况下使用tomcat,tomcat只能使用您在问题中提到的属性进行配置。所以它不灵活,我认为用Tomcat的默认Spring Boot配置不可能实现这一点。我也面临着类似的挑战,我应用的解决方案是用Jetty替换嵌入式tomcat服务器。使用Jetty,可以在运行时配置ssl属性,同时从例如aws秘密服务获得ssl属性。以这个项目为例:https://github.com/hakky54/java-tutorials/tree/main/instant-server-ssl-reloading/server

因此,我可以推荐的是首先将tomcat从依赖项中排除:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

将Jetty服务器包含到Spring Boot:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
@Bean
public SslContextFactory.Server sslContextFactory() {
    return fooService.createSslContextFactory();
}
@Bean
public ConfigurableServletWebServerFactory webServerFactory(SslContextFactory.Server sslContextFactory) {
    JettyServletWebServerFactory factory = new JettyServletWebServerFactory();

    JettyServerCustomizer jettyServerCustomizer = server -> {
        ServerConnector serverConnector = new ServerConnector(server, sslContextFactory);
        serverConnector.setPort(8443);
        server.setConnectors(new Connector[]{serverConnector});
    };
    factory.setServerCustomizers(Collections.singletonList(jettyServerCustomizer));

    return factory;
}
 类似资料:
  • 问题内容: 我想使用URLFetch服务在Google App Engine应用程序中打开 HTTPS* 连接。为了能够 验证我的应用正在 与之通信 的服务器的SSL证书,我使用了自己的密钥库文件 。我希望在加载我的应用程序时(即在执行任何HTTPS请求之前)在热身请求中读取此文件。密钥库文件是我的WAR文件的一部分。 * 但是,我不能使用这种方法,因为HttpURLConnection在GAE的

  • 我想用AES加密实现一个自定义密钥,我找到了下面的实现和细节。 但我有以下几点疑虑: 如果我要使用典型的示例代码,例如: null https://www.securecoding.cert.org/confluence/display/java/msc61-j.+do+not+use+insecure+or+weak+cryptographic+算法 如何在Java中生成SALT值?

  • 我正在使用ionic开发一个android应用程序。我用一个新的密钥库错误地给我的应用程序签名。当我将应用程序上传到PlayStore时发现证书不相等时,我使用了与PlayStore中所需证书相同的备份keystore文件。 现在,如果我想用命令对我的。apk进行jarsign 我得到以下错误 我谷歌了很多,但我不确定是否有任何解决方案可以帮助我。我必须使用我的旧证书,不能使用一个新的,因为我不能

  • 三个月前我得到了我应用程序的发布密钥。现在我格式化了我的计算机,当我用我的releasekey签名我的应用程序时,我得到了错误:java.lang.runtimeException:keystore Load:无效的keystore格式。 我应该如何解决这个错误? 该命令是:jarsigner-verbose-keystore“d:\releasekey.keystore”“d:\myapp.ap

  • 我有一个premium storage account,在创建这个帐户后我就启用了加密,我找到了这个链接https://docs.microsoft.com/en-us/azure/storage/storage-service-encryption来检查blob是否加密。 现在,如果我使用Azure key vault加密OS盘和数据盘,它也用于保护静止数据,但加密存储帐户也会做同样的事情。有谁

  • 我正在尝试实现AES自定义密码加密,并希望了解下面的代码。 我不太理解为什么需要指定密钥大小256“pbekeyspec(password,salt,65536,256)”,而我已经使用了“pbkdf2withHMACSHA256”,它应该生成256位的SecretKey。 并且在使用我的密码+salt生成密钥之后,为什么我需要将它与SecretKeySpec作为AES算法关联起来。