Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用云驻留密钥库和信任库(Secret Manager)进行相互身份验证(双向TLS/SSL)-Spring引导_Java_Spring_Ssl_Aws Secrets Manager_Mutual Authentication - Fatal编程技术网

Java 使用云驻留密钥库和信任库(Secret Manager)进行相互身份验证(双向TLS/SSL)-Spring引导

Java 使用云驻留密钥库和信任库(Secret Manager)进行相互身份验证(双向TLS/SSL)-Spring引导,java,spring,ssl,aws-secrets-manager,mutual-authentication,Java,Spring,Ssl,Aws Secrets Manager,Mutual Authentication,我正在研究spring boot中的相互认证,我可以在本地实现,并且运行平稳。但我想从Amazon/Google证书管理器或s3 bucket中获取证书/存储 以前的配置 因为我在本地有商店,所以我可以通过这种方式获得它们 #ApplicationProperties.yaml server.ssl.enabled=true #KeyStore server.ssl.key-alias=1 server.ssl.key-store=classpath:clientKeystore.p12 ser


我正在研究spring boot中的相互认证,我可以在本地实现,并且运行平稳。
但我想从Amazon/Google证书管理器或s3 bucket中获取证书/存储

以前的配置
因为我在本地有商店,所以我可以通过这种方式获得它们

#ApplicationProperties.yaml
server.ssl.enabled=true
#KeyStore
server.ssl.key-alias=1
server.ssl.key-store=classpath:clientKeystore.p12
server.ssl.key-store-password=whatever

#TrustStore
server.ssl.trust-store=classpath:clientTrustStore.p12
server.ssl.trust-store-password=possiblyAnything
server.ssl.client-auth=need
RestTemplate配置

现在云中也有相同的信任库和密钥库,我想 在应用程序加载/启动时获取它们


我真的很困惑,为什么我们在config(appproperties)和sslContext中都使用存储。有什么区别<我不能把它们单独设置在sslContext吗?若我能做到这一点,我就可以从云中获取它们,将其处理到密钥库和信任库中,然后立即设置它们。
*有更好的工作方法吗*
请原谅,如果这看起来很蹩脚,我是安全新手,所以我仍然在弄清楚事情是如何运作的。

**还有一个问题**
  • 在典型的客户机-服务器设置(多个服务器)中,如果我希望在相互TLS上与server1通信,在http上与server2通信(无ssl),该怎么办

您的应用程序可能必须信任您正在与之通信的另一个应用程序使用的、由同一家公司管理的证书。在这种情况下,您可以在本地创建信任库并使用它。您不需要由公司签署的证书,这些证书通常用于网站

您不需要在这两个位置都设置keystore/truststore。设置密钥库和信任库的首选方法:

@Configuration
public class SSLConfig {
    @Autowired private Environment env;

    @PostConstruct
    private void configureSSL() {
        System.setProperty("javax.net.ssl.keyStore", env.getProperty("server.ssl.key-store"));
        System.setProperty("javax.net.ssl.keyStorePassword", env.getProperty("server.ssl.key-store-password"));
        System.setProperty("javax.net.ssl.trustStore", env.getProperty("server.ssl.trust-store"));
        System.setProperty("javax.net.ssl.trustStorePassword", env.getProperty("server.ssl.trust-store-password"));
    }
}
应用程序.properties
中:

server.ssl.key-store=keystores/client.jks
server.ssl.key-store-password=changeit
server.ssl.trust-store=keystores/mycustom.truststore
server.ssl.trust-store-password=changeit

可能会发生这样的情况:您的应用程序必须信任您正在与之通信的另一个应用程序所使用的、由同一家公司管理的证书。在这种情况下,您可以在本地创建信任库并使用它。您不需要由公司签署的证书,这些证书通常用于网站

您不需要在这两个位置都设置keystore/truststore。设置密钥库和信任库的首选方法:

@Configuration
public class SSLConfig {
    @Autowired private Environment env;

    @PostConstruct
    private void configureSSL() {
        System.setProperty("javax.net.ssl.keyStore", env.getProperty("server.ssl.key-store"));
        System.setProperty("javax.net.ssl.keyStorePassword", env.getProperty("server.ssl.key-store-password"));
        System.setProperty("javax.net.ssl.trustStore", env.getProperty("server.ssl.trust-store"));
        System.setProperty("javax.net.ssl.trustStorePassword", env.getProperty("server.ssl.trust-store-password"));
    }
}
应用程序.properties
中:

server.ssl.key-store=keystores/client.jks
server.ssl.key-store-password=changeit
server.ssl.trust-store=keystores/mycustom.truststore
server.ssl.trust-store-password=changeit

区别在于上游和下游配置

应用程序。属性:

将application.properties与
server.ssl.*
一起使用时,实际上是在配置服务器端。也就是说,您正在创建
server.port
以接受具有指定
server.ssl.key
的https通信
server.ssl.client auth=need
指定客户端浏览器(或其他应用程序)应使用客户端证书通过身份验证。和
server.ssl.trust store
指定受信任客户端的证书

sslContext:


使用
sslContext
时,您正在配置从java应用程序到外部服务的出站连接。您可以使用
loadKeyMaterial
loadTrustMaterial
在应用程序中使用某些第三方服务
loadTrustMaterial
指定您信任的服务器证书,
loadKeyMaterial
指定应用程序应使用哪个密钥连接到某些资源。

区别在于上游和下游配置

应用程序。属性:

将application.properties与
server.ssl.*
一起使用时,实际上是在配置服务器端。也就是说,您正在创建
server.port
以接受具有指定
server.ssl.key
的https通信
server.ssl.client auth=need
指定客户端浏览器(或其他应用程序)应使用客户端证书通过身份验证。和
server.ssl.trust store
指定受信任客户端的证书

sslContext:


使用
sslContext
时,您正在配置从java应用程序到外部服务的出站连接。您可以使用
loadKeyMaterial
loadTrustMaterial
在应用程序中使用某些第三方服务
loadTrustMaterial
指定您信任的服务器证书,并且
loadKeyMaterial
指定您的应用程序应该使用哪个密钥连接到某个资源。

嘿,但这不是我要找的。我根本不想弄乱应用程序属性。希望类文件中的所有内容都是自己的嘿,但这不是我要找的。我根本不想弄乱应用程序属性。想要类文件本身中的所有内容吗