Интерфейс GSSContext
- Все известные подинтерфейсы:
ExtendedGSSContext
public interface GSSContext
Если вызывающий элемент создаёт контекст, используя экземпляр по умолчанию GSSManager, механизм GSS-API Kerberos v5 гарантированно доступен для создания контекста. Этот механизм идентифицируется с помощью Oid "1.2.840.113554.1.2.2" и определён в RFC 1964.
Перед началом фазы создания контекста инициатор контекста может запросить определённые характеристики желаемого контекста. Не все основанные механизмы поддерживают все характеристики, которые может потребовать вызывающий элемент. После создания контекста вызывающий элемент может проверить фактические характеристики и службы, предлагаемые этим контекстом, с помощью различных методов запроса. При использовании механизма Kerberos v5 GSS-API, предлагаемого экземпляром по умолчанию GSSManager, все необязательные службы будут доступны локально. К ним относятся взаимная аутентификация, делегирование учетных данных, защита конфиденциальности и целостности, а также обнаружение и упорядочивание повторов сообщений. Обратите внимание, что в GSS-API целостность сообщения является предпосылкой для конфиденциальности сообщения.
Создание контекста происходит в цикле, где инициатор вызывает initSecContext, а акцептор вызывает acceptSecContext, пока контекст не будет создан. В этом цикле методы initSecContext и acceptSecContext производят токены, которые приложение отправляет своему партнёру. Партнёр передает любой такой токен в качестве входных данных своему методу acceptSecContext или initSecContext, в зависимости от ситуации.
Во время фазы создания контекста можно вызвать метод isProtReady для определения возможности использования контекста для операций по сообщениям wrap и getMIC. Это позволяет приложениям использовать операции по сообщениям в контекстах, которые ещё не полностью созданы.
После создания контекста или возврата значения true методом isProtReady, можно вызвать процедуры запроса для определения фактических характеристик и служб созданного контекста. Приложение также может начать использовать методы по сообщениям wrap и getMIC для получения криптографических операций над данными, предоставленными приложением.
Когда контекст больше не нужен, приложение должно вызвать dispose для освобождения любых системных ресурсов, которые использует контекст.
Контекст безопасности обычно сохраняет информацию о последовательности и обнаружении повторов относительно токенов, которые он обрабатывает. Поэтому порядок, в котором токены представлены этому контексту для обработки, может иметь значение. Также обратите внимание, что ни один из методов в этом интерфейсе не является синхронизированным. Поэтому не рекомендуется совместно использовать GSSContext между несколькими потоками, если не реализована какая-либо синхронизация на уровне приложения.
Потоковые методы интерфейса GSSContext устарели в Java SE 11. Эти методы также были удалены из RFC 8353: Обновление Java-привязок к API общих служб безопасности версии 2 по следующим причинам (см. раздел 11): «Перегруженные методы GSSContext, использующие потоки ввода и вывода для передачи токенов аутентификации и GSS-API по сообщениям, как описано в разделе 5.15 RFC 5653, удалены в этом обновлении, поскольку протокол связи должен определяться приложением, а не библиотекой. Также невозможно корректно реализовать эти методы, когда токен не имеет самоопределения (где конец не может быть определён) или библиотека не имеет знаний о формате токена (например, в качестве моста, взаимодействующего с другой библиотекой GSS).» К таким методам относятся initSecContext(InputStream, OutputStream), acceptSecContext(InputStream, OutputStream), wrap(InputStream, OutputStream, MessageProp), unwrap(InputStream, OutputStream, MessageProp), getMIC(InputStream, OutputStream, MessageProp) и verifyMIC(InputStream, InputStream, MessageProp).
Приведенный ниже пример кода демонстрирует использование интерфейса GSSContext для инициализируемого узла. Представлены различные операции с объектом GSSContext, включая: создание объекта, установку желаемых флагов, создание контекста, запрос фактических флагов контекста, операции по сообщениям над данными приложения и, наконец, удаление контекста.
// Create a context using default credentials
// and the implementation specific default mechanism
GSSManager manager = ...
GSSName targetName = ...
GSSContext context = manager.createContext(targetName, null, null,
GSSContext.INDEFINITE_LIFETIME);
// set desired context options prior to context establishment
context.requestConf(true);
context.requestMutualAuth(true);
context.requestReplayDet(true);
context.requestSequenceDet(true);
// establish a context between peers
byte[] inToken = new byte[0];
byte[] outToken;
// Loop while there still is a token to be processed
while (!context.isEstablished()) {
outToken = context.initSecContext(inToken, 0, inToken.length);
// send the output token if generated
if (outToken != null) {
sendToken(outToken);
}
if (!context.isEstablished()) {
inToken = readToken();
}
}
// display context information
System.out.println("Remaining lifetime in seconds = "
+ context.getLifetime());
System.out.println("Context mechanism = " + context.getMech());
System.out.println("Initiator = " + context.getSrcName());
System.out.println("Acceptor = " + context.getTargName());
if (context.getConfState()) {
System.out.println("Confidentiality (i.e., privacy) is available");
}
if (context.getIntegState()) {
System.out.println("Integrity is available");
}
// perform wrap on an application supplied message, appMsg,
// using QOP = 0, and requesting privacy service
byte[] appMsg = ...
MessageProp mProp = new MessageProp(0, true);
outToken = context.wrap(appMsg, 0, appMsg.length, mProp);
sendToken(outToken);
// perform unwrap on an incoming application message, and check
// its privacy state and supplementary information
inToken = readToken();
mProp = new MessageProp(0, true);
appMsg = context.unwrap(inToken, 0, inToken.length, mProp);
System.out.println("Was it encrypted? " + mProp.getPrivacy());
System.out.println("Duplicate Token? " + mProp.isDuplicateToken());
System.out.println("Old Token? " + mProp.isOldToken());
System.out.println("Unsequenced Token? " + mProp.isUnseqToken());
System.out.println("Gap Token? " + mProp.isGapToken());
// the application determines if the privacy state and supplementary
// information are acceptable
// release the local-end of the context
context.dispose();
- С:
- 1.4
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
DEFAULT_LIFETIME |
Постоянная, представляющая стандартную продолжительность жизни контекста. |
static final int |
INDEFINITE_LIFETIME |
Постоянная, представляющая неопределённую продолжительность жизни контекста. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
byte[] |
acceptSecContext |
Вызывается приёмником контекста при получении токена от партнёра. |
void |
acceptSecContext |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
void |
dispose() |
Освобождает системные ресурсы и криптографическую информацию, хранящиеся в объекте контекста, и делает контекст недействительным. |
byte[] |
export() |
Экспортирует этот контекст, чтобы другой процесс мог его импортировать. |
boolean |
getAnonymityState() |
Определяет, аутентифицирован ли инициатор контекста анонимно для приёмника контекста. |
boolean |
getConfState() |
Определяет, доступна ли конфиденциальность данных через контекст. |
boolean |
getCredDelegState() |
Определяет, включена ли делегация учетных данных в этом контексте. |
GSSCredential |
getDelegCred() |
Получает учетные данные, делегированные инициатором контекста приёмнику контекста. |
boolean |
getIntegState() |
Определяет, доступна ли целостность данных через контекст. |
int |
getLifetime() |
Определяет оставшуюся продолжительность жизни этого контекста. |
Oid |
getMech() |
Определяет используемый механизм для этого контекста. |
byte[] |
getMIC |
Возвращает токен, содержащий криптографический код целостности сообщения (MIC) для предоставленного сообщения, для передачи приложению-партнёру. |
void |
getMIC |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
boolean |
getMutualAuthState() |
Определяет, включена ли взаимная аутентификация в этом контексте. |
boolean |
getReplayDetState() |
Определяет, включено ли обнаружение повторов для служб безопасности по сообщениям из этого контекста. |
boolean |
getSequenceDetState() |
Определяет, включена ли проверка последовательности для служб безопасности по сообщениям из этого контекста. |
GSSName |
getSrcName() |
Возвращает имя инициатора контекста. |
GSSName |
getTargName() |
Возвращает имя приёмника контекста. |
int |
getWrapSizeLimit |
Используется для определения ограничений на размер сообщения, которое может быть передано в wrap. |
byte[] |
initSecContext |
Вызывается инициатором контекста для запуска фазы создания контекста и обработки любых токенов, сгенерированных методом партнёра acceptSecContext. |
int |
initSecContext |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
boolean |
isEstablished() |
Используется во время создания контекста для определения состояния контекста. |
boolean |
isInitiator() |
Определяет, является ли это контекстом инициатора. |
boolean |
isProtReady() |
Определяет, готов ли контекст для использования операций по сообщениям. |
boolean |
isTransferable() |
Определяет, может ли контекст передаваться другим процессам с помощью метода export. |
void |
requestAnonymity |
Запрашивает, чтобы идентификатор инициатора не был раскрыт приёмнику. |
void |
requestConf |
Запрашивает включение конфиденциальности данных для метода wrap. |
void |
requestCredDeleg |
Запрашивает делегирование учетных данных инициатора приёмнику во время создания контекста. |
void |
requestInteg |
Запрашивает включение целостности данных для методов wrap и getMIC. |
void |
requestLifetime |
Запрашивает продолжительность жизни контекста в секундах. |
void |
requestMutualAuth |
Запрашивает взаимную аутентификацию во время создания контекста. |
void |
requestReplayDet |
Запрашивает включение обнаружения повторов для служб безопасности по сообщениям после создания контекста. |
void |
requestSequenceDet |
Запрашивает включение проверки последовательности для служб безопасности по сообщениям после создания контекста. |
void |
setChannelBinding |
Устанавливает канальные связи, используемые во время создания контекста. |
byte[] |
unwrap |
Используется для обработки токенов, сгенерированных методом wrap на другой стороне контекста. |
void |
unwrap |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
void |
verifyMIC |
Проверяет криптографический MIC, содержащийся в параметре токена, по предоставленному сообщению. |
void |
verifyMIC |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
byte[] |
wrap |
Применяет службы безопасности по сообщениям над созданным контекстом безопасности. |
void |
wrap |
Устарело. Методы, основанные на потоках, удалены из RFC 8353. |
Подробное описание полей
DEFAULT_LIFETIME
static final int DEFAULT_LIFETIME
- См. также:
INDEFINITE_LIFETIME
static final int INDEFINITE_LIFETIME
Integer.MAX_VALUE.- См. также:
Подробное описание методов
initSecContext
byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
acceptSecContext партнёра. Этот метод может вернуть выходной токен, который приложение должно отправить партнёру для обработки его методом acceptSecContext. Приложение может вызвать isEstablished, чтобы определить, завершилась ли фаза установления контекста на этой стороне контекста. Возвращаемое значение false от isEstablished указывает, что ожидаются дополнительные токены для initSecContext. После завершения установления контекста доступные параметры контекста можно запросить с помощью методов get. Обратите внимание, что метод initSecContext может вернуть токен для партнёра, а isEstablished также вернуть true. Это указывает, что токен необходимо отправить партнёру, но локальный конец контекста теперь полностью установлен.
- Параметры:
-
inputBuf- токен, сгенерированный партнёром. Этот параметр игнорируется при первом вызове, так как токен не был получен от партнёра. -
offset- смещение в inputBuf, где начинается токен. -
len- длина токена. - Возвращает:
- массив байтов, содержащий токен, который необходимо отправить партнёру.
nullуказывает, что токен не генерируется. - Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.NO_CRED,GSSException.CREDENTIALS_EXPIRED,GSSException.BAD_BINDINGS,GSSException.OLD_TOKEN,GSSException.DUPLICATE_TOKEN,GSSException.BAD_NAMETYPE,GSSException.BAD_MECH,GSSException.FAILURE
initSecContext
@Deprecated(since="11") int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
initSecContext(byte[], int, int) вместо этого.acceptSecContext партнёра, с использованием потоков. Этот метод может записать выходной токен в OutpuStream, который приложение должно отправить партнёру для обработки методом acceptSecContext. Обычно приложение гарантирует это, вызвав метод flush на OutputStream, который инкапсулирует соединение между двумя партнёрами. Приложение может определить, был ли токен записан в OutputStream, по возвращаемому значению этого метода. Возвращаемое значение 0 указывает, что токен не был записан. Приложение может вызвать isEstablished, чтобы определить, завершилась ли фаза установления контекста на этой стороне контекста. Возвращаемое значение false от isEstablished указывает, что ожидаются дополнительные токены для initSecContext. Обратите внимание, что метод initSecContext может вернуть токен для партнёра, а isEstablished также вернуть true. Это указывает, что токен необходимо отправить партнёру, но локальный конец контекста теперь полностью установлен.
Токены аутентификации GSS-API содержат определённое начало и конец. Этот метод будет пытаться прочитать один из этих токенов при каждом вызове и может блокироваться на потоке, если доступна только часть токена. Во всех остальных отношениях этот метод эквивалентен методу на основе массива байтов initSecContext.
Следующий пример кода демонстрирует, как этот метод можно использовать:
InputStream is ...
OutputStream os ...
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
context.initSecContext(is, os);
// send output token if generated
os.flush();
}
- Параметры:
-
inStream- InputStream, содержащий токен, сгенерированный партнёром. Этот параметр игнорируется при первом вызове, так как токен не был получен от партнёра на этом этапе. -
outStream- OutputStream, в который будет записан выходной токен. На финальном этапе установления контекста байты могут не записываться. - Возвращает:
- количество байтов, записанных в OutputStream в качестве части токена, который будет отправлен партнёру. Значение 0 указывает, что токен отправлять не нужно.
- Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.NO_CRED,GSSException.CREDENTIALS_EXPIRED,GSSException.BAD_BINDINGS,GSSException.OLD_TOKEN,GSSException.DUPLICATE_TOKEN,GSSException.BAD_NAMETYPE,GSSException.BAD_MECH,GSSException.FAILURE
acceptSecContext
byte[] acceptSecContext(byte[] inToken, int offset, int len) throws GSSException
initSecContext. Приложение может вызвать isEstablished, чтобы определить, завершилась ли фаза установления контекста для этого партнёра. Возвращаемое значение false от isEstablished указывает, что ожидаются дополнительные токены для этого метода. После завершения установления контекста доступные параметры контекста можно запросить с помощью методов get.
Обратите внимание, что acceptSecContext может вернуть токен для партнёра, а isEstablished также вернуть true. Это указывает, что токен необходимо отправить партнёру, но локальный конец контекста теперь полностью установлен.
Следующий пример кода демонстрирует, как этот метод можно использовать:
byte[] inToken;
byte[] outToken;
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
inToken = readToken();
outToken = context.acceptSecContext(inToken, 0,
inToken.length);
// send output token if generated
if (outToken != null)
sendToken(outToken);
}
- Параметры:
-
inToken- токен, сгенерированный партнёром. -
offset- смещение в inToken, где начинается токен. -
len- длина токена. - Возвращает:
- массив байтов, содержащий токен, который необходимо отправить партнёру.
nullуказывает, что токен не генерируется. - Исключение:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.NO_CRED,GSSException.CREDENTIALS_EXPIRED,GSSException.BAD_BINDINGS,GSSException.OLD_TOKEN,GSSException.DUPLICATE_TOKEN,GSSException.BAD_MECH,GSSException.FAILURE
acceptSecContext
@Deprecated(since="11") void acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
acceptSecContext(byte[], int, int) вместо этого.OutputStream, который приложение должно отправить участнику для обработки его методом initSecContext. Как правило, приложение гарантирует это, вызвав метод flush для OutputStream, который инкапсулирует соединение между двумя участниками. Приложение может вызвать isEstablished, чтобы определить, завершилась ли фаза установления контекста с этой стороны контекста. Возвращаемое значение false из isEstablished указывает, что ожидается больше маркеров, которые должны быть предоставлены acceptSecContext. После завершения установления контекста доступные параметры контекста могут быть запрошены с помощью методов get. Обратите внимание, что acceptSecContext может вернуть маркер для участника, а isEstablished вернуть true также. Это указывает на то, что маркер нужно отправить участнику, но локальная часть контекста теперь полностью установлена.
Токены аутентификации GSS-API содержат определённый начальный и конечный маркер. Этот метод попытается прочитать один из этих маркеров за вызов и может заблокироваться на потоке, если доступна только часть маркера. Во всех других отношениях этот метод эквивалентен методу на основе массива байтов acceptSecContext.
Следующий пример кода демонстрирует, как можно использовать этот метод:
InputStream is ...
OutputStream os ...
GSSContext context ...
// Loop while there is still a token to be processed
while (!context.isEstablished()) {
context.acceptSecContext(is, os);
// send output token if generated
os.flush();
}
- Параметры:
-
inStream- поток ввода, содержащий маркер, сгенерированный участником. -
outStream- поток вывода, куда будет записан маркер вывода. На заключительном этапе установления контекста, возможно, не будет записано никаких байтов. - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.NO_CRED,GSSException.CREDENTIALS_EXPIRED,GSSException.BAD_BINDINGS,GSSException.OLD_TOKEN,GSSException.DUPLICATE_TOKEN,GSSException.BAD_MECH,GSSException.FAILURE
isEstablished
boolean isEstablished()
- Возвращает:
-
true, если это полностью установленный контекст на стороне вызывающего метода и от участника больше не требуются маркеры.
dispose
void dispose() throws GSSException
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE
getWrapSizeLimit
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
wrap. Возвращает максимальный размер сообщения, который, если будет представлен методу wrap с теми же параметрами confReq и qop, приведет к маркеру вывода, содержащему не более maxTokenSize байтов.Этот вызов предназначен для использования приложениями, которые взаимодействуют по протоколам, которые устанавливают максимальный размер сообщения. Он позволяет приложению фрагментировать сообщения до применения защиты.
Реализация GSS-API рекомендуется, но не является обязательной для обнаружения недопустимых значений QOP при вызове getWrapSizeLimit. Эта процедура гарантирует только максимальный размер сообщения, а не доступность определенных значений QOP для защиты сообщения.
- Параметры:
-
qop- уровень защиты, который будет предоставлен wrap. -
confReq-true, если wrap будет запрашивать конфиденциальность,falseв противном случае. -
maxTokenSize- желаемый максимальный размер маркера, выпущенного wrap. - Возвращает:
- максимальный размер входного маркера для данного размера маркера вывода
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
wrap
byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
Объект MessageProp создается приложением и используется для указания значения QOP, которое выбирает криптографические алгоритмы, и сервиса приватности для необязательного шифрования сообщения. Базовый механизм, который используется в вызове, может не быть способен предоставить сервис приватности. Он устанавливает фактический сервис приватности, который он предоставляет, в этом объекте MessageProp, который вызывающий метод должен запросить после возврата. Если механизм не может предоставить запрошенный QOP, он генерирует исключение GSSException с кодом BAD_QOP.
Поскольку некоторые протоколы на уровне приложения могут захотеть использовать маркеры, выпущенные wrap, для обеспечения "безопасного фреймирования", реализации должны поддерживать обертку сообщений нулевой длины.
Приложение будет отвечать за отправку маркера участнику.
- Параметры:
-
inBuf- данные приложения, которые необходимо защитить. -
offset- смещение в inBuf, где начинаются данные. -
len- длина данных -
msgProp- экземпляр MessageProp, используемый приложением для установки желаемого QOP и состояния приватности. Установите желаемый QOP в 0, чтобы запросить стандартный QOP. После возврата из этого метода этот объект будет содержать фактическое состояние приватности, которое было применено к сообщению базовым механизмом. - Возвращает:
- массив байтов, содержащий маркер, который необходимо отправить участнику.
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
wrap
@Deprecated(since="11") void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap(byte[], int, int, MessageProp) вместо этого.wrap на основе массива байтов. Приложение будет отвечать за отправку маркера участнику. Обычно приложение гарантирует это, вызвав метод flush для OutputStream, который инкапсулирует соединение между двумя участниками.
Объект MessageProp создается приложением и используется для указания значения QOP, которое выбирает криптографические алгоритмы, и сервиса приватности для необязательного шифрования сообщения. Базовый механизм, который используется в вызове, может не быть способен предоставить сервис приватности. Он устанавливает фактический сервис приватности, который он предоставляет, в этом объекте MessageProp, который вызывающий метод должен запросить после возврата. Если механизм не может предоставить запрошенный QOP, он генерирует исключение GSSException с кодом BAD_QOP.
Поскольку некоторые протоколы на уровне приложения могут захотеть использовать маркеры, выпущенные wrap, для обеспечения "безопасного фреймирования", реализации должны поддерживать обертку сообщений нулевой длины.
- Параметры:
-
inStream- поток ввода, содержащий данные приложения, которые необходимо защитить. Используются все доступные данные в inStream. -
outStream- поток вывода для записи защищенного сообщения. -
msgProp- экземпляр MessageProp, используемый приложением для установки желаемого QOP и состояния приватности. Установите желаемый QOP в 0, чтобы запросить стандартный QOP. После возврата из этого метода этот объект будет содержать фактическое состояние приватности, которое было применено к сообщению базовым механизмом. - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
распаковать
byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
wrap на другой стороне контекста. Метод вернёт сообщение, предоставленное приложением-партнёром вызову wrap, одновременно проверяя встроенный MIC этого сообщения.Объект MessageProp создаётся приложением и используется внутренней механикой для возвращения информации вызывающей стороне, такой как QOP, применяется ли конфиденциальность к сообщению и другая дополнительная информация о состоянии сообщения.
Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные wrap, для обеспечения «безопасной рамочной структуры», реализации должны поддерживать упаковку и распаковку сообщений нулевой длины.
- Параметры:
-
inBuf- массив байтов, содержащий токен wrap, полученный от партнёра. -
offset- смещение, где начинается токен. -
len- длина токена -
msgProp- по возвращении из метода этот объект будет содержать применённый QOP, состояние конфиденциальности сообщения и дополнительную информацию о том, был ли токен дубликатом, устаревшим, вне последовательности или прибыл после разрыва. - Возвращает:
- массив байтов byte[] содержащий распакованное сообщение из входного токена.
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.CONTEXT_EXPIRED,GSSException.FAILURE
распаковать
@Deprecated(since="11") void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
unwrap(byte[], int, int, MessageProp) вместо этого.wrap на другой стороне контекста. Метод вернёт сообщение, предоставленное приложением-партнёром вызову wrap, одновременно проверяя встроенный MIC этого сообщения.Объект MessageProp создаётся приложением и используется внутренней механикой для возвращения информации вызывающей стороне, такой как QOP, применяется ли конфиденциальность к сообщению и другая дополнительная информация о состоянии сообщения.
Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные wrap, для обеспечения «безопасной рамочной структуры», реализации должны поддерживать упаковку и распаковку сообщений нулевой длины.
Формат входного токена, который считывает этот метод, определён в спецификации для внутренней механики, которая будет использоваться. Этот метод попытается прочитать один из этих токенов на каждый вызов. Если токен механики содержит определённый начальный и конечный точки, этот метод может блокироваться на InputStream, если доступна только часть токена. Если начальная и конечная точки токена не определены, метод попытается обработать все доступные байты как часть токена.
Помимо возможного блокирующего поведения, описанного выше, этот метод эквивалентен методу на основе массива байтов unwrap.
- Параметры:
-
inStream- входной поток InputStream, содержащий токен wrap, сгенерированный партнёром. -
outStream- выходной поток OutputStream для записи сообщения приложения. -
msgProp- по возвращении из метода этот объект будет содержать применённый QOP, состояние конфиденциальности сообщения и дополнительную информацию о том, был ли токен дубликатом, устаревшим, вне последовательности или прибыл после разрыва. - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKEN,GSSException.BAD_MIC,GSSException.CONTEXT_EXPIRED,GSSException.FAILURE
getMIC
byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
Обратите внимание, что конфиденциальность может быть применена только через вызов wrap.
Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные getMIC, для обеспечения «безопасной рамочной структуры», реализации должны поддерживать вычисление MIC из сообщений нулевой длины.
- Параметры:
-
inMsg- сообщение, для которого необходимо сгенерировать MIC. -
offset- смещение в inMsg, где начинается сообщение. -
len- длина сообщения -
msgProp- экземплярMessageProp, используемый приложением для установки желаемого QOP. Установите желаемый QOP в0вmsgProp, чтобы запросить QOP по умолчанию. В противном случае передайтеnullдляmsgProp, чтобы запросить QOP по умолчанию. - Возвращает:
- массив байтов byte[] содержащий токен для отправки партнёру.
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
getMIC
@Deprecated(since="11") void getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
getMIC(byte[], int, int, MessageProp) вместо этого.getMIC. Обратите внимание, что конфиденциальность может быть применена только через вызов wrap.Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные getMIC, для обеспечения «безопасной рамочной структуры», реализации должны поддерживать вычисление MIC из сообщений нулевой длины.
- Параметры:
-
inStream- входной поток InputStream, содержащий сообщение для вычисления MIC. Используются все данные, доступные в inStream. -
outStream- выходной поток OutputStream для записи выходного токена. -
msgProp- экземплярMessageProp, используемый приложением для установки желаемого QOP. Установите желаемый QOP в0вmsgProp, чтобы запросить QOP по умолчанию. В противном случае передайтеnullдляmsgProp, чтобы запросить QOP по умолчанию. - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
проверитьMIC
void verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
Объект MessageProp создаётся приложением и используется внутренней механикой для возвращения информации вызывающей стороне, такой как QOP, указывающий на уровень защиты, применённый к сообщению, и другую дополнительную информацию о состоянии сообщения.
Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные getMIC, для обеспечения «безопасной рамочной структуры», реализации должны поддерживать вычисление и проверку MIC для сообщений нулевой длины.
- Параметры:
-
inToken- токен, сгенерированный методом getMIC партнёра. -
tokOffset- смещение в inToken, где начинается токен. -
tokLen- длина токена. -
inMsg- сообщение приложения для проверки криптографического MIC. -
msgOffset- смещение в inMsg, где начинается сообщение. -
msgLen- длина сообщения. -
msgProp- по возвращении из метода этот объект будет содержать применённый QOP и дополнительную информацию о том, был ли токен дубликатом, устаревшим, вне последовательности или прибыл после разрыва. - Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKENGSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.FAILURE
verifyMIC
@Deprecated(since="11") void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp) throws GSSException
verifyMIC(byte[], int, int, byte[], int, int, MessageProp) вместо этого.verifyMIC, основанному на массиве байтов. Объект MessageProp создаётся приложением и используется базовым механизмом для возвращения информации вызывающей стороне, такой как QOP, указывающий уровень защиты, применённой к сообщению, и другую дополнительную информацию о состоянии сообщения.Поскольку некоторые протоколы прикладного уровня могут использовать токены, выпущенные методом getMIC, для обеспечения «безопасной рамки», реализации должны поддерживать вычисление и проверку MIC для сообщений нулевой длины.
Формат входного токена, который считывает этот метод, определён в спецификации для базового механизма, который будет использован. Этот метод попытается прочитать один из этих токенов за один вызов. Если токен механизма содержит чёткое начало и конец, этот метод может блокироваться на InputStream, если доступна только часть токена. Если начало и конец токена не определены, метод попытается обработать все доступные байты как часть токена.
Помимо возможного блокирующего поведения, описанного выше, этот метод эквивалентен методу verifyMIC, основанному на массиве байтов.
- Parameters:
-
tokStream- поток InputStream, содержащий токен, сгенерированный методом getMIC со стороны партнёра. -
msgStream- поток InputStream, содержащий прикладное сообщение для проверки криптографического MIC. Используются все доступные данные в msgStream. -
msgProp- по возвращении из метода, этот объект будет содержать применённый QOP и дополнительную информацию, указывающую, был ли токен дубликатом, старым, вне последовательности или прибыл после разрыва. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.DEFECTIVE_TOKENGSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.FAILURE
export
byte[] export() throws GSSException
Этот метод деактивирует контекст безопасности и создаёт межпроцессный токен, который, при передаче в GSSManager.createContext в другом процессе, повторно активирует контекст во втором процессе. Только одна инстанция заданного контекста может быть активной в любой момент времени; последующая попытка экспортера контекста получить доступ к экспортированному контексту безопасности завершится ошибкой.
Реализация может ограничивать набор процессов, посредством которых межпроцессный токен может быть импортирован, либо в зависимости от локальной политики безопасности, либо в результате решений реализации. Например, некоторые реализации могут ограничить контексты передачей только между процессами, работающими под одной учётной записью или входящими в одну группу процессов.
Межпроцессный токен может содержать конфиденциальную информацию (например, криптографические ключи). Хотя механизмы рекомендуются для избегания размещения такой конфиденциальной информации в межпроцессных токенах или для шифрования токена перед возвращением его приложению, в типовой реализации GSS-API это может быть невозможно. Таким образом, приложение должно позаботиться о защите межпроцессного токена и убедиться, что любой процесс, которому передаётся токен, является надёжным.
Реализации не обязаны поддерживать межпроцессную передачу контекстов безопасности. Вызов метода isTransferable укажет, может ли объект контекста передаваться.
Вызов этого метода для контекста, который нельзя экспортировать, приведёт к тому, что будет выброшено это исключение с кодом ошибки GSSException.UNAVAILABLE.
- Returns:
- массив байтов byte[] содержащий экспортированный контекст
- Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.UNAVAILABLE,GSSException.CONTEXT_EXPIRED,GSSException.NO_CONTEXT,GSSException.FAILURE - See Also:
requestMutualAuth
void requestMutualAuth(boolean state) throws GSSException
initSecContext. Не все механизмы поддерживают взаимную аутентификацию, и некоторые механизмы могут потребовать взаимной аутентификации даже если приложение этого не запрашивает. Поэтому приложение должно проверить, был ли запрос удовлетворён методом getMutualAuthState.
- Parameters:
-
state- булево значение, указывающее, должна ли использоваться взаимная аутентификация или нет. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestReplayDet
void requestReplayDet(boolean state) throws GSSException
initSecContext. Во время создания контекста обнаружение повторов не является опцией и является функцией возможностей базового механизма. Не все механизмы поддерживают обнаружение повторов, и некоторые механизмы могут потребовать обнаружения повторов, даже если приложение этого не запрашивает. Поэтому приложение должно проверить, был ли запрос удовлетворён методом getReplayDetState. Если обнаружение повторов включено, то методы MessageProp.isDuplicateToken и MessageProp.isOldToken вернут корректные результаты для объекта MessageProp, который передаётся методу unwrap или методу verifyMIC.
- Parameters:
-
state- булево значение, указывающее, должно ли быть включено обнаружение повторов для установленного контекста или нет. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestSequenceDet
void requestSequenceDet(boolean state) throws GSSException
initSecContext. Во время создания контекста проверка последовательности не является опцией и зависит от возможностей базового механизма. Не все механизмы поддерживают проверку последовательности, и некоторые механизмы могут потребовать проверки последовательности, даже если приложение этого не запрашивает. Поэтому приложение должно проверить, был ли запрос удовлетворён методом getSequenceDetState. Если проверка последовательности включена, то методы MessageProp.isDuplicateToken, MessageProp.isOldToken, MessageProp.isUnseqToken и MessageProp.isGapToken вернут корректные результаты для объекта MessageProp, который передаётся методу unwrap или методу verifyMIC.
- Parameters:
-
state- булево значение, указывающее, должна ли быть включена проверка последовательности для установленного контекста или нет. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestCredDeleg
void requestCredDeleg(boolean state) throws GSSException
initSecContext. Не все механизмы поддерживают делегирование учётных данных. Поэтому приложение, которое желает делегирования, должно проверить, был ли запрос удовлетворён методом getCredDelegState. Если приложение указывает, что делегирование не должно использоваться, то механизм выполнит запрос, и делегирование не произойдёт. Это исключение из общего правила, что механизм может включить службу даже если она не запрошена.- Parameters:
-
state- булево значение, указывающее, должны ли учётные данные быть делегированы или нет. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestAnonymity
void requestAnonymity(boolean state) throws GSSException
initSecContext. Не все механизмы поддерживают анонимность для инициатора. Поэтому приложение должно проверить, был ли запрос удовлетворён с помощью метода getAnonymityState.- Parameters:
-
state- логическое значение, указывающее, должен ли инициатор быть аутентифицирован у акцептора как анонимный субъект. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestConf
void requestConf(boolean state) throws GSSException
wrap. Этот запрос может быть выполнен только со стороны инициатора контекста и должен быть выполнен до первого вызова initSecContext. Не все механизмы поддерживают конфиденциальность, и другие механизмы могут включить её даже если приложение не запрашивает этого. Приложение может проверить, был ли запрос удовлетворён с помощью метода getConfState. Если конфиденциальность включена, только тогда механизм удовлетворит запрос на конфиденциальность в объекте MessageProp, который передаётся в метод wrap.Включение конфиденциальности также автоматически включает целостность.
- Parameters:
-
state- логическое значение, указывающее, нужно ли включать конфиденциальность. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestInteg
void requestInteg(boolean state) throws GSSException
wrap и getMIC. Этот запрос может быть выполнен только со стороны инициатора контекста и должен быть выполнен до первого вызова initSecContext. Не все механизмы поддерживают целостность, и другие механизмы могут включить её даже если приложение не запрашивает этого. Приложение может проверить, был ли запрос удовлетворён с помощью метода getIntegState.Отключение целостности также автоматически отключит конфиденциальность.
- Parameters:
-
state- логическое значение, указывающее, нужно ли включать целостность. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
requestLifetime
void requestLifetime(int lifetime) throws GSSException
initSecContext. Фактический срок действия контекста будет зависеть от возможностей базового механизма, и приложение должно вызвать метод getLifetime для определения этого.
- Parameters:
-
lifetime- желаемый срок действия контекста в секундах. ИспользуйтеINDEFINITE_LIFETIMEдля запроса неопределённого срока действия иDEFAULT_LIFETIMEдля запроса срока действия по умолчанию. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
setChannelBinding
void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContext, а акцептор — до первого вызова acceptSecContext.- Parameters:
-
cb- используемые канальные привязки. - Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE
getCredDelegState
boolean getCredDelegState()
requestCredDeleg выполнит этот запрос, и этот метод вернёт false со стороны инициатора с этого момента.- Returns:
- true, если делегация включена, false в противном случае.
- See Also:
getMutualAuthState
boolean getMutualAuthState()
- Returns:
- true, если взаимная аутентификация включена, false в противном случае.
- See Also:
getReplayDetState
boolean getReplayDetState()
- Returns:
- true, если проверка повторов включена, false в противном случае.
- See Also:
getSequenceDetState
boolean getSequenceDetState()
- Returns:
- true, если проверка последовательности включена, false в противном случае.
- See Also:
getAnonymityState
boolean getAnonymityState()
initSecContext. Инициатор, который должен быть аутентифицирован анонимно, должен вызвать этот метод после каждого вызова initSecContext, чтобы определить, следует ли отправлять сгенерированный токен партнёру или прервать контекст. Со стороны акцептора, вызов этого метода определяет, раскрыла ли какая-либо из обработанных токенов acceptSecContext личность инициатора до настоящего момента.- Returns:
- true, если инициатор контекста всё ещё анонимен, false в противном случае.
- See Also:
isTransferable
boolean isTransferable() throws GSSException
export. Этот вызов допустим только для полностью установленных контекстов.- Returns:
- true, если этот контекст может быть экспортирован, false в противном случае.
- Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE
isProtReady
boolean isProtReady()
- Returns:
- true, если методы, такие как
wrap,unwrap,getMICиverifyMIC, могут быть использованы с этим контекстом на текущей стадии установления контекста, false в противном случае.
getConfState
boolean getConfState()
isProtReady или isEstablished вернёт true. Если этот метод возвращает true, то и getIntegState вернёт то же самое.- Returns:
- true, если услуги конфиденциальности доступны, false — в противном случае.
- See Also:
getIntegState
boolean getIntegState()
isProtReady или isEstablished вернёт true. Этот метод всегда вернёт true, если getConfState возвращает true.- Returns:
- true, если услуги целостности доступны, false — в противном случае.
- See Also:
getLifetime
int getLifetime()
isEstablished вернёт true.- Returns:
- оставшийся срок действия в секундах
- See Also:
getSrcName
GSSName getSrcName() throws GSSException
isProtReady или isEstablished вернёт true.- Returns:
- GSSName, являющийся MN, содержащий имя инициатора контекста.
- Throws:
-
GSSException— содержащий следующие основные коды ошибок:GSSException.FAILURE - See Also:
getTargName
GSSName getTargName() throws GSSException
isProtReady или isEstablished вернёт true.- Returns:
- GSSName, являющийся MN, содержащий имя приемника контекста.
- Throws:
-
GSSException— содержащий следующие основные коды ошибок:GSSException.FAILURE
getMech
Oid getMech() throws GSSException
- Returns:
- Oid используемого механизма
- Throws:
-
GSSException— содержащий следующие основные коды ошибок:GSSException.FAILURE
getDelegCred
GSSCredential getDelegCred() throws GSSException
getCredDelegState для определения наличия делегированных учётных данных.- Returns:
- GSSCredential, содержащий делегированные учётные данные инициатора, или
null, если делегированные учётные данные отсутствуют. - Throws:
-
GSSException— содержащий следующие основные коды ошибок:GSSException.FAILURE
isInitiator
boolean isInitiator() throws GSSException
- Returns:
- true, если это инициатор контекста, false — если это приемник контекста.
- Throws:
-
GSSException— содержащий следующие основные коды ошибок:GSSException.FAILURE
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.security.jgss/org/ietf/jgss/GSSContext.html