有一个older thread似乎是我所能找到的唯一相关讨论。使用Javamail实现Kerberos验证
我试图通过Javamail(通过IMAP)实现Kerberos,我已经弄清楚了究竟要用mail.imap.sasl.mechanisms完成什么工作。假设我给出了“GSS-API”的值,但是失去了从哪里去的地方。我注意到Javamail有一个IMAPSaslAuthernticator类。在我看来,这是需要的,但我可以在哪里或如何使用它,找到宝贵的小文档。
任何想法?
注:我想发布更多的代码为我的问题,但根据网站的指示,完整的职位只是答案。所以,我编辑了我最初发布的代码问题。
下面是真正的肉。现在,一旦我通过这一点,我从服务器获得消息[],并将大小打印到控制台。
SSL/TLS安全性是必需的,所以它在下面启用。在这个例子中,证书由Java中的可信密钥库管理。
private Folder folder;
private Session session;
private Store store;
public boolean connectToKerberosMail() {
if (folder != null && folder.isOpen()) {
return true;
}
Properties properties = new Properties();
properties.setProperty("mail.debug", "true");
properties.put("mail.imaps.connectiontimeout",600000);
properties.put("mail.imaps.timeout",601000);
properties.put("mail.imaps.fetchsize", 65000);
properties.put("mail.imaps.starttls.enable", "true");
properties.put("mail.imaps.starttls.required", "false");
properties.put("mail.imaps.sasl.enable","true");
properties.put("mail.imaps.sasl.mechanisms","GSSAPI");
properties.put("mail.imaps.sasl.authorizationid",<user>);
properties.put("mail.imaps.sasl.realm",<realm>);
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.krb5.realm",<realm>);
System.setProperty("java.security.krb5.kdc", <ip-address>);
System.setProperty("java.security.auth.login.config", "jaas.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
try {
session = Session.getInstance(properties);
} catch (Exception e) {
session = null;
return false;
}
session.setDebug(true);
URLName url = new URLName("imaps", <host>, <port>, "", <user>, <pass>);
store = new IMAPSSLStore(session, url);
try {
store.connect();
} catch (Exception e) {
e.printStackTrace();
store = null;
session = null;
return false;
}
return openFolder();
}
我Jaas.conf档案如下(票据缓存从收购的kinit):
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required
principal="<principal>"
ticketCache="<cache-path>"
doNotPrompt="true"
useTicketCache="true"
debug="true";
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
principal="<principal>"
ticketCache="<cache-path>"
doNotPrompt="true"
useTicketCache="true"
debug="true";
};
我最近张贴在这里的产量,但发现我的一些属性,其中指定“IMAP”而不是“imaps”。因此,在posintg输出将其更改之前,我正在进行更多测试。
在此期间,我有什么正确的?从我的理解,我必须启用imap的imap连接,启动TLS的TLS/SSL,和sasl kerberos。但也许有什么东西压倒另一个?
文档状态通过选择GSSAPI机制可以使用Kerberos,并且上述sasl属性位于IMAP api中,这需要诸如Kerberos等领域所需的东西。 我成功地运行了一个使用明确的用户名和密码直接连接到邮件服务器(IMAP)的javamail客户端。我还成功地重定向连接到Kerberos服务器,以请求[有用的博客]票(http://thejavamonkey.blogspot.com/2008/04/clientserver-hello-world-in-kerberos.html)。 所以所有的peices似乎都存在,但我不知道如何连接它们。 – amirsk 2012-02-22 06:51:00
同样,协议跟踪显示了什么? – 2012-02-22 20:34:04
找出Javamail和Kerberos的解决方案!我计划在这里为每个搜索代码示例的人发布信息。但是在我的解决方案完成之前,我有最后一个问题。我必须通过SSL与Kerberos一起工作。所以我使用IMAPSSLStore。但是URLName需要用户名和密码。当我提供它时,Javamail从Kerberos获取票据并使用它来联系IMAP服务器。 问题依然存在,我需要单点登录,用户永远不必提供用户/密码。但IMAPSSLStore需要它们并引发异常。 如何用javamail实现单点登录? – amirsk 2012-02-26 12:05:24