gpt4 book ai didi

java - javax.net.ssl.trustStore 上的并发?

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:35 27 4
gpt4 key购买 nike

我有一个 Web 应用程序,它使用 3rd 方 jar 提供银行卡支付。通过 SSL 进行通信。

我还实现了在付款后发送确认电子邮件 (JavaMail) 的功能,代码如下:

// property list
Properties properties = new Properties();

// host
properties.setProperty("mail.smtp.host", smptServer);
// authorization
properties.setProperty("mail.smtp.auth", "true");
// STARTTLS
properties.setProperty("mail.smtp.starttls.enable", "true");
// port
properties.setProperty("mail.smtp.port", "587");
// trust all certificates
properties.setProperty("mail.smtp.ssl.trust", "*");
// debug
properties.setProperty("mail.debug", "true");

问题是:银行软件设置了这样的系统参数:

javax.net.ssl.trustStorePassword
javax.net.ssl.keyStore
javax.net.ssl.keyStoreType
javax.net.ssl.trustStore
javax.net.ssl.keyStorePassword

包含证书的自定义 keystore 。

结果我遇到了这样一种情况,银行软件可以运行,但我无法发送电子邮件,或者邮件可以运行,但银行软件不能:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

简而言之,据我了解,JavaMail 必须访问 Java cacerts (java/jre/lib/security/cacerts),但银行软件必须使用自定义 keystore ...但 javax.net.ssl 参数只能链接到一个 keystore 。如果我在银行 keystore 中导入 SMTP 服务器证书,则会出现 PKIX 错误。

如何解决?

最佳答案

您应该能够将所有证书放在一个信任库中。如果这不起作用,您可能需要安全专家的帮助。参见 SSLNOTES.txt有关调试这些问题的提示。

作为最后的手段,您可以使用 MailSSLSocketFactory设置您自己的 TrustManager,或将 mail..ssl.trust 属性设置为您要信任的服务器。

关于java - javax.net.ssl.trustStore 上的并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com