【发布时间】:2019-12-26 07:48:23
【问题描述】:
我在我的 Spring Boot 应用程序中启用了 ssl,并且任何时候我想使用像 googleapis 或 facebook 这样的 Rest 服务,我都必须在信任库中添加证书。
我使用openssl获取证书:
openssl s_client -connect googleapis.com:443
然后我将它导入到信任库中:
keytool.exe -import -noprompt -trustcacerts -alias googleapis.com -file googleapis.com.cer -keystore app-server.p12 -storepass *****
问题是管理起来很不方便,当证书过期时,我每次都必须更新信任库中的证书。
此外,即使我添加了正确的证书,有时也会出现错误:
引起:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效认证路径
我知道这些证书是有效的,是否可以自动信任它们而不将它们添加到信任库中?
这是我的 ssl 配置
ssl:
enabled: true
key-store: classpath:keystore/app-server.p12
key-store-password: ******
key-alias: app-server
key-store-type: PKCS12
trust-store: classpath:keystore/app-server.p12
trust-store-password: *****
trust-store-type: PKCS12
keyStorePath: config/keystore/app-server.p12
我还必须在 main 方法中添加系统属性
private static String keyStorePath;
private static String keyStorePassword;
@Value("${server.ssl.keyStorePath}")
public void setKeyStorePath(String keyStorePath) {
ClientUiApplication.keyStorePath = keyStorePath;
}
@Value("${server.ssl.key-store-password}")
public void setKeyStorePassword(String keyStorePassword) {
ClientUiApplication.keyStorePassword = keyStorePassword;
}
public static void main(String[] args) {
SpringApplication.run(ClientUiApplication.class, args);
System.setProperty("javax.net.ssl.trustStore", keyStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", keyStorePassword);
}
另一个重要的细节,我需要一个信任库,因为我使用由 Keytool 生成的自签名证书。否则,我的服务将无法相互通信。
【问题讨论】:
-
为什么不喜欢?我的问题有什么问题?
-
@wargre 好的,这只是通常的 ssl 配置,所以我认为没有必要。
标签: spring-boot ssl