Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将自定义信任库添加到imaps_Java_Ssl_Imap_Truststore - Fatal编程技术网

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

在java中将自定义信任库添加到imaps,java,ssl,imap,truststore,Java,Ssl,Imap,Truststore,我使用SMTP发送邮件,并使用imap(imap+ssl)检索邮件: 内部连接方法我做: private Session connect(SMTPTask task) { SSLSocketFactory factory = null; try { SSLContext ctx; KeyManagerFactory kmf; KeyStore ks; char[] passphrase = "changeit".t

我使用SMTP发送邮件,并使用imap(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中实现这一点:

但是如何将SSLSocketFactory与我的商店结合起来?所以我的商店使用自定义ssl连接

正确的做法是什么?如果不可能,是否有其他方法可以将我的信任库添加到java中的存储中

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


关于

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

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

有关完整的详细信息,请参阅底部的表格。

您可以通过用于创建
会话的属性映射传入套接字工厂

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

有关详细信息,请参阅底部的表格。

对于
imaps
协议,它是属性
mail.imaps.ssl.socketFactory
。对于
imaps
协议,它是属性
mail.imaps.ssl.socketFactory