我已经在我的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);
}
你给出代码:
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(我已经检索到)匹配。 我迷路了,非常感谢您的帮助! 问