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

Spring boot ssl如何信任所有有效证书

刘子实
2023-03-14

我已经在我的spring boot应用程序中启用了ssl,并且任何时候我想使用像GooglePis或facebook这样的Rest服务,我都必须在TrustStore中添加证书。

我使用openssl获取证书:

openssl s_client-connect googleapis.com:443

并将其导入truststore:

keytool.exe-import-noprompt-trustcacerts-alias googleapis.com-file googleapis.com.cer-keystore app-server.p12-storePass*****

问题是很不方便管理,当证书过期时,我必须每次更新truststore中的证书。

另外,即使我添加了正确的证书,有时也会出现错误:

原因: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);
}

共有1个答案

燕文昌
2023-03-14

你给出代码:

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);
}

这意味着您强制java信任存储区成为您提供的信任存储区。默认信任存储区不再使用。

因此,是的,您必须在此信任存储区中添加所有所需的根证书,以避免出现您描述的问题。

为什么需要有特定的信任存储?

  • 如果没有用,请删除它。
  • 如果您有一个必须信任的特定附加证书,则最好将该证书添加到默认信任存储区(jre/lib/security/cacerts文件)
 类似资料:
  • 我已经看到了一些使用X509TrustManager实现TrustManager的示例,尽管显然Java7不支持这些约定,X509TrustManager本身也被弃用。 感谢您的建议和任何在Java7上工作的代码示例。

  • 当我尝试安装扩展时,出现以下错误: 我已经知道问题是我们的内部网络结构,它用我们自己的SSL证书包装每个SSL证书,而不是每个应用程序都信任我们的证书。 是否可以在Visual Studio代码中设置属性Trust all SSL证书? 谢啦

  • 我认为,到目前为止,几乎每个有SSL证书信任错误经验的Java程序员都使用过或至少遇到过以下代码: 到目前为止,我已经成功地使用了这段代码来忽略通过其IP地址访问HTTPs站点时的证书不匹配(不要问我为什么这样做,这是一个完全不同的故事)。然而,我尝试对另一个HTTPs站点执行相同的操作,发现此代码失败,出现以下异常: 所以,问题是,出了什么问题,我能做些什么?

  • 我有一个服务器根证书即将使用SHA1过期,并使用SH256获得了一个新的服务器根证书,使用寿命更长。我们希望在我们的客户机信任存储中包括这两个方面,以便在prod环境切换证书时能够顺利过渡。 通过javax加载信任存储,我们在代码中提供了信任管理器。网ssl。TrustManagerFactory,然后我们在运行客户端应用程序时看到一个错误: 这两个受信任证书的颁发者相同,但过期日期和签名算法不同

  • 问题内容: 我需要与远程服务器创建Https连接,然后检索并验证证书。 我已经建立好连接: 但似乎方法未由类型定义。 那么,如何检索服务器证书链?我的理解是应该返回一个对象数组,并且该类具有可用于询问证书的方法。 我需要验证: 证书有效且受信任, 根据证书序列号检查“证书吊销列表分发点” 确保它没有过期, 检查证书中的URL是否与另一个URL(我已经检索到)匹配。 我迷路了,非常感谢您的帮助! 问