Как получить kerberos сервисный билет через GSS-API?

14
задан Nathan Tuggy 4 May 2015 в 03:15
поделиться

1 ответ

Мое понимание получения сервисного билета было неправильным. Я не должен получать учетные данные от сервиса - это не возможно на клиенте, потому что клиент действительно не имеет TGT для сервера и поэтому не имеет прав получить сервисные учетные данные. Что просто отсутствует, здесь должен создать новый GSSContext и инициализировать его. Возвращаемое значение из этого метода содержит сервисный билет, если я понял это правильно. Вот рабочий пример кода. Это должно быть выполнено в PrivilegedAction от имени зарегистрированного предмета:

    GSSManager manager = GSSManager.getInstance();
    GSSName clientName = manager.createName("clientUser", GSSName.NT_USER_NAME);
    GSSCredential clientCred = manager.createCredential(clientName,
                                                        8 * 3600,
                                                        createKerberosOid(),
                                                        GSSCredential.INITIATE_ONLY);

    GSSName serverName = manager.createName("http@server", GSSName.NT_HOSTBASED_SERVICE);

    GSSContext context = manager.createContext(serverName,
                                               createKerberosOid(),
                                               clientCred,
                                               GSSContext.DEFAULT_LIFETIME);
    context.requestMutualAuth(true);
    context.requestConf(false);
    context.requestInteg(true);

    byte[] outToken = context.initSecContext(new byte[0], 0, 0);
    System.out.println(new BASE64Encoder().encode(outToken));
    context.dispose();

outToken содержит, затем содержит Сервисный Билет. Однако это не способ, которым GSS-API был предназначен, чтобы использоваться. Его цель состояла в том, чтобы скрыть те детали к коду, таким образом, лучше установить GSSContext использование GSS-API с обеих сторон. Иначе действительно необходимо знать то, что Вы делаете из-за потенциальных дыр в системе безопасности. Для получения дополнительной информации читайте Sun учебное руководство SSO с kerberos более тщательно, чем я.

РЕДАКТИРОВАНИЕ: Просто забыл, что я использую Windows XP с SP2. Существует новая "функция" в этой версии Windows, который запрещает использование TGT в Windows RAM. Необходимо отредактировать реестр для разрешения этого. Для получения дополнительной информации взгляните на тема страницы JGSS Troubleshooting в случае, если Вы испытываете "KrbException: KDC не имеет никакой поддержки типа шифрования (14)", как я сделал.

16
ответ дан 1 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: