Существует более старая тема , которая, кажется, единственная релевантная дискуссия, которую мне удалось найти.
Я пытаюсь реализовать Kerberos с помощью Javamail (через IMAP), и я полностью запутался в том, что именно нужно делать с 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, startTLS для TLS / SSL и sasl для kerberos. Но, может быть, что-то перекрывает другое?