Я пытаюсь использовать S4U2Proxy, введенный в Java 8. К сожалению, мне не удалось найти много примеров. Мое требование заключается в том, что клиент отправит свой сертификат. Затем я должен делегировать (используя kerberos) его запрос, подключиться к KDC, получить TGT, получить билет на обслуживание, чтобы связаться с другим сервером от имени пользователя, а затем, наконец, связаться с фактическим сервисом, предоставив билет обслуживания. Если java 8 не обеспечивает чистый подход, можете ли вы указать мне другие утилиты, которые могут решить мои требования.
Subject.doAs(subject, new PrivilegedAction<Object>() {
@Override
public Object run() {
GSSManager manager = GSSManager.getInstance();
GSSCredential self = null;
try {
GSSName selfUser = manager.createName("serviceWhoWantstoImpersonate", GSSName.NT_USER_NAME);
Oid krb5Oid = new Oid( "1.2.840.113554.1.2.2");
self = manager.createCredential(selfUser.canonicalize(krb5Oid), GSSCredential.DEFAULT_LIFETIME, krb5Oid, GSSCredential.INITIATE_ONLY);
GSSName user = manager.createName(clientName, GSSName.NT_USER_NAME);
GSSCredential impCred = ((ExtendedGSSCredential) self).impersonate(user);
} catch (GSSException e) {
e.printStackTrace();
}
return null;
}
});
Очевидно, будут вопросы о том, как SPN был установлен в KDC? Разрешена ли учетная запись службы для делегирования? Был ли назначен SPN для этой учетной записи службы? Когда пользователь "обезьяна" отрицает всякую делегацию? и т.д. Сейчас я чувствую, что внес правильные настройки в KDC. Моя проблема заключается в том, что это происходит еще до того, как она попадает в KDC. Любые действительные входы помогут.
EDIT: После некоторого повторного поиска я смог выполнить S4u2self и s4u2proxy с помощью java 8. Выжил, что по крайней мере один пример должен был быть предоставлен документацией Oracle. Во всяком случае, я сейчас перехожу к следующему этапу. Теперь другой сценарий, который мне нужно обработать, - это делегирование сертификата между серверами kerberos. Из документации java 8, которую я видел до сих пор, она указывает, что в настоящее время межрежим не поддерживается. Это правда?