【发布时间】:2021-01-31 23:29:28
【问题描述】:
我正在研究 Spring Boot 中的相互身份验证,我可以在本地实现它并且运行平稳。
但我想从 Amazon/Google 证书中获取证书/存储经理或可能来自 s3 存储桶。
以前的配置
因为我在当地有商店,这样我就可以买到它们
#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 配置
@Value("${server.ssl.trust-store}")
private String trustStorePath;
@Value("${server.ssl.trust-store-password}")
private String trustStorePass;
@Value("${server.ssl.key-store}")
private String keyStorePath;
@Value("${server.ssl.key-store-password}")
private String keyStorePass;
@Value("${server.ssl.key-alias}")
@Bean
public RestTemplate restTemplate()
{
SSLContext sslContext = null;
SSLConnectionSocketFactory sslSocketFactory =
new SSLConnectionSocketFactory(sslContext,NoopHostnameVerifier.INSTANCE);
sslContext = new SSLContextBuilder()
.loadKeyMaterial(keystore, keyStorePassword)
.loadTrustMaterial(trustStore,new TrustSelfSignedStrategy())
.build();
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslSocketFactory).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
return new RestTemplate(requestFactory);
}
现在相同的信任库和密钥库在云中,我想 在应用程序加载/启动时获取它们。
我真的很困惑为什么我们在 config(appPropeties) 和 sslContext 中都使用存储。有什么不同 ?
我不能只将它们设置在 sslContext 吗?如果我能做到这一点,我可以从云中获取它们,将其处理到密钥库和信任库中,立即设置它们。
*有更好的工作方法吗?*
请原谅,如果这看起来很蹩脚,我是安全新手,所以我仍在弄清楚事情是如何运作的。
**还有一个问题**
- 在典型的客户端服务器设置(多台服务器)中,如果我想在双向 TLS 上与 server1 通信,在 http(无 ssl)上与 server2 通信,该怎么办
【问题讨论】:
标签: java spring ssl aws-secrets-manager mutual-authentication