gpt4 book ai didi

java - 将自定义信任库添加到 java 中的 imaps

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

我使用 SMTP 发送邮件并使用 imaps (imap + ssl) 检索邮件:

我做的内部连接方法:

private Session connect(SMTPTask task) {

SSLSocketFactory factory = null;
try {
SSLContext ctx;
KeyManagerFactory kmf;
KeyStore ks;
char[] passphrase = "changeit".toCharArray();

ctx = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("JKS");

ks.load(new FileInputStream("truststore.jks"), passphrase);

kmf.init(ks, passphrase);
ctx.init(kmf.getKeyManagers(), null, null);

factory = ctx.getSocketFactory();
} catch (Exception e) {
log.error("Error with SSLFactory",e);
}

String host = getHost();
String port = String.valueOf(getPort());

Authenticator authenticator = new Authenticator(task);


Properties properties = new Properties();
properties.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName());
properties.setProperty("mail.smtp.auth", "true");
//properties.setProperty("mail.imap.auth.login.disable", "true");
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", port);
properties.put("mail.imaps.ssl.socketFactory", factory);
properties.setProperty("mail.imap.port", "993");

Properties systemProps = System.getProperties();
systemProps.put( "javax.net.ssl.trustStore", "truststore.jks");
systemProps.put( "javax.net.ssl.trustStorePassword", "changeit");
System.setProperties(systemProps);

return Session.getInstance(properties, authenticator);

还有我在其他地方做的:

...
store.connect(getHost(),getUser(),getPass());
...

编辑: 在这里我得到以下异常:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

现在我想添加一个带有自己证书的自定义信任库。另一篇文章展示了如何在 Java 中执行此操作:Add trustStore for client authentication

但是我怎样才能将 SSLSocketFactory 与我的 Store 结合起来呢?所以我的商店使用自定义 ssl 连接?

正确的做法是什么?如果那不可能,是否有另一种方法可以将我的信任库添加到 Java 中的商店?

编辑:我遗漏了什么,或者我在属性中做错了什么?

问候

最佳答案

您通过用于创建 Session 的属性映射传入套接字工厂

Properties props = new Properties();
// other properties as usual
props.put("mail.imaps.ssl.socketFactory", new MyCustomSSLSocketFactory());
Session sess = Session.getInstance(props);

请参阅 com.sun.mail.imap package summary 底部的表格了解全部详情。

关于java - 将自定义信任库添加到 java 中的 imaps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787294/

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