Интерфейс GSSContext
- Все известные подинтерфейсы:
ExtendedGSSContext
public interface GSSContext
Если вызывающий объект создает экземпляр контекста с помощью экземпляра GSSManager по умолчанию, для установления контекста гарантированно будет доступен механизм Kerberos v5 GSS-API. Этот механизм идентифицируется 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: Generic Security Service API Version 2: Java Bindings Update по следующим причинам (см. раздел 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. После завершения установления контекста доступные параметры контекста можно запросить с помощью методов получения значений. Обратите внимание, что метод initSecContext может вернуть токен для узла-участника, а isEstablished при этом также вернуть true. Это означает, что токен необходимо отправить узлу-участнику, но локальная сторона контекста уже полностью установлена.
- Параметры:
-
inputBuf— токен, созданный узлом-участником. Этот параметр игнорируется при первом вызове, поскольку токен от узла-участника ещё не получен. -
offset— смещение в inputBuf, с которого начинается токен. -
len— длина токена. - Возвращает:
- массив byte[], содержащий токен для отправки узлу-участнику. Значение
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 означает, что ожидается получение дополнительных токенов этим методом. После завершения установления контекста доступные параметры контекста можно запросить с помощью методов получения значений.
Обратите внимание, что 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— длина токена. - Возвращает:
- массив byte[], содержащий токен для отправки узлу-участнику. Значение
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. После завершения установления контекста доступные параметры контекста можно запросить с помощью методов получения значений. Обратите внимание, что 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— InputStream, содержащий токен, созданный узлом-участником. -
outStream— OutputStream, в который будет записан выходной токен. На заключительном этапе установления контекста байты могут не записываться. - Исключения:
-
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 по умолчанию, задайте требуемое значение QOP равным 0. После возврата из этого метода объект будет содержать фактическое состояние конфиденциальности, применённое механизмом к сообщению. - Возвращает:
- массив byte[], содержащий токен для отправки узлу-участнику.
- Исключения:
-
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— InputStream, содержащий данные приложения, подлежащие защите. Используются все доступные данные из inStream. -
outStream— OutputStream для записи защищённого сообщения. -
msgProp— экземпляр MessageProp, используемый приложением для задания требуемых значений QOP и состояния конфиденциальности. Чтобы запросить значение QOP по умолчанию, задайте требуемое значение QOP равным 0. После возврата из этого метода объект будет содержать фактическое состояние конфиденциальности, применённое механизмом к сообщению. - Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
unwrap
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
unwrap
@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 по умолчанию, задайте требуемое значение QOP равным0вmsgProp. Также для запроса значения QOP по умолчанию можно передатьnullдляmsgProp. - Возвращает:
- массив 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 по умолчанию, задайте требуемое значение QOP равным0вmsgProp. Также для запроса значения QOP по умолчанию можно передатьnullдляmsgProp. - Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.CONTEXT_EXPIRED,GSSException.BAD_QOP,GSSException.FAILURE
verifyMIC
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.
- Параметры:
-
tokStream— InputStream, содержащий токен, созданный методом getMIC узла-узла. -
msgStream— InputStream, содержащий сообщение приложения, для которого необходимо проверить криптографический MIC. Используются все данные, доступные в msgStream. -
msgProp— при возврате из метода этот объект будет содержать применённый QOP и дополнительную информацию о том, был ли токен дубликатом, устаревшим, пришедшим не по порядку или после пропуска. - Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.DEFECTIVE_TOKENGSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.FAILURE
export
byte[] export() throws GSSException
Этот метод деактивирует контекст безопасности и создаёт межпроцессный токен, который при передаче методу GSSManager.createContext в другом процессе повторно активирует контекст во втором процессе. В каждый момент времени может быть активен только один экземпляр данного контекста; последующая попытка экспортировавшего контекст процесса получить доступ к экспортированному контексту безопасности завершится неудачей.
Реализация может ограничивать набор процессов, которым разрешено импортировать межпроцессный токен, исходя из локальной политики безопасности или особенностей реализации. Например, некоторые реализации могут разрешать передачу контекстов только между процессами, работающими под одной учётной записью или входящими в одну группу процессов.
Межпроцессный токен может содержать информацию, чувствительную с точки зрения безопасности (например, криптографические ключи). Хотя механизмам рекомендуется не помещать такую чувствительную информацию в межпроцессные токены или шифровать токен перед его возвратом приложению, в типичной реализации GSS-API это может быть невозможно. Поэтому приложение должно обеспечить защиту межпроцессного токена и убедиться в надёжности любого процесса, которому он передаётся.
Реализации не обязаны поддерживать межпроцессную передачу контекстов безопасности. Метод isTransferable позволяет определить, является ли объект контекста передаваемым.
Вызов этого метода для контекста, который нельзя экспортировать, приведёт к выбросу этого исключения с кодом ошибки GSSException.UNAVAILABLE.
- Возвращает:
- массив byte[], содержащий экспортированный контекст
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.UNAVAILABLE,GSSException.CONTEXT_EXPIRED,GSSException.NO_CONTEXT,GSSException.FAILURE - См. также:
requestMutualAuth
void requestMutualAuth(boolean state) throws GSSException
initSecContext.Не все механизмы поддерживают взаимную аутентификацию, а некоторые могут требовать её, даже если приложение этого не запрашивало. Поэтому приложению следует проверить, был ли запрос выполнен, с помощью метода getMutualAuthState.
- Параметры:
-
state— логическое значение, указывающее, следует ли использовать взаимную аутентификацию. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestReplayDet
void requestReplayDet(boolean state) throws GSSException
initSecContext. Во время установления контекста обнаружение повторов не является опцией и определяется возможностями базового механизма.Не все механизмы поддерживают обнаружение повторов, а некоторые могут требовать его, даже если приложение этого не запрашивало. Поэтому приложению следует проверить, был ли запрос выполнен, с помощью метода getReplayDetState. Если обнаружение повторов включено, методы MessageProp.isDuplicateToken и MessageProp.isOldToken будут возвращать допустимые результаты для объекта MessageProp, передаваемого методу unwrap или методу verifyMIC.
- Параметры:
-
state— логическое значение, указывающее, следует ли включить обнаружение повторов для установленного контекста. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestSequenceDet
void requestSequenceDet(boolean state) throws GSSException
initSecContext. Во время установления контекста проверка последовательности не является опцией и определяется возможностями базового механизма.Не все механизмы поддерживают проверку последовательности, а некоторые могут требовать её, даже если приложение этого не запрашивало. Поэтому приложению следует проверить, был ли запрос выполнен, с помощью метода getSequenceDetState. Если проверка последовательности включена, методы MessageProp.isDuplicateToken, MessageProp.isOldToken, MessageProp.isUnseqToken и MessageProp.isGapToken будут возвращать допустимые результаты для объекта MessageProp, передаваемого методу unwrap или методу verifyMIC.
- Параметры:
-
state— логическое значение, указывающее, следует ли включить проверку последовательности для установленного контекста. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestCredDeleg
void requestCredDeleg(boolean state) throws GSSException
initSecContext. Не все механизмы поддерживают делегирование учётных данных. Поэтому приложению, которому требуется делегирование, следует проверить, был ли запрос выполнен, с помощью метода getCredDelegState. Если приложение указывает, что делегирование запрещено, механизм выполнит запрос и делегирование не произойдёт. Это исключение из общего правила, согласно которому механизм может включить службу, даже если она не была запрошена.- Параметры:
-
state— логическое значение, указывающее, следует ли делегировать учётные данные. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestAnonymity
void requestAnonymity(boolean state) throws GSSException
initSecContext. Не все механизмы поддерживают анонимность инициатора. Поэтому приложению следует проверить, был ли запрос выполнен, с помощью метода getAnonymityState.- Параметры:
-
state— логическое значение, указывающее, следует ли аутентифицировать инициатора для принимающей стороны как анонимного субъекта. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestConf
void requestConf(boolean state) throws GSSException
wrap. Этот запрос может быть сделан только на стороне инициатора контекста и должен быть сделан до первого вызова initSecContext. Не все механизмы поддерживают конфиденциальность, а некоторые могут включать её, даже если приложение этого не запрашивало. Приложение может проверить, был ли запрос выполнен, с помощью метода getConfState. Только если конфиденциальность включена, механизм выполнит запрос на обеспечение приватности в объекте MessageProp, передаваемом методу wrap.Включение конфиденциальности также автоматически включает целостность.
- Параметры:
-
state— логическое значение, указывающее, следует ли включить конфиденциальность. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestInteg
void requestInteg(boolean state) throws GSSException
wrap и getMIC. Этот запрос может быть сделан только на стороне инициатора контекста и должен быть сделан до первого вызова initSecContext. Не все механизмы поддерживают целостность, а некоторые могут включать её, даже если приложение этого не запрашивало. Приложение может проверить, был ли запрос выполнен, с помощью метода getIntegState.Отключение целостности также автоматически отключает конфиденциальность.
- Параметры:
-
state— логическое значение, указывающее, следует ли включить целостность. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
requestLifetime
void requestLifetime(int lifetime) throws GSSException
initSecContext.Фактический срок действия контекста будет зависеть от возможностей базового механизма. Чтобы определить его, приложению следует вызвать метод getLifetime.
- Параметры:
-
lifetime— желаемый срок действия контекста в секундах. ИспользуйтеINDEFINITE_LIFETIME, чтобы запросить неограниченный срок действия, иDEFAULT_LIFETIME, чтобы запросить срок действия по умолчанию. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
setChannelBinding
void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContext, а принимающая сторона — до первого вызова acceptSecContext.- Параметры:
-
cb— используемые привязки канала. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE
getCredDelegState
boolean getCredDelegState()
requestCredDeleg выполнит этот запрос, и с этого момента данный метод будет возвращать false на стороне инициатора.- Возвращает:
- true, если делегирование включено, иначе false.
- См. также:
getMutualAuthState
boolean getMutualAuthState()
- Возвращает:
- true, если взаимная аутентификация включена, иначе false.
- См. также:
getReplayDetState
boolean getReplayDetState()
- Возвращает:
- true, если обнаружение повторов включено, иначе false.
- См. также:
getSequenceDetState
boolean getSequenceDetState()
- Возвращает:
- true, если проверка последовательности включена, иначе false.
- См. также:
getAnonymityState
boolean getAnonymityState()
initSecContext. Инициатор, которому необходимо пройти аутентификацию строго анонимно, должен вызывать этот метод после каждого вызова initSecContext, чтобы определить, следует ли отправить созданный токен узлу-узлу или прервать контекст. На стороне принимающей стороны вызов этого метода определяет, раскрыл ли какой-либо из токенов, обработанных к этому моменту методом acceptSecContext, личность инициатора.- Возвращает:
- true, если инициатор контекста по-прежнему анонимен, иначе false.
- См. также:
isTransferable
boolean isTransferable() throws GSSException
export. Этот вызов допустим только для полностью установленных контекстов.- Возвращает:
- true, если этот контекст можно экспортировать, иначе false.
- Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE
isProtReady
boolean isProtReady()
- Возвращает:
- true, если на текущем этапе установления контекста для этого контекста можно использовать такие методы, как
wrap,unwrap,getMICиverifyMIC, иначе false.
getConfState
boolean getConfState()
isProtReady или isEstablished вернёт true. Если этот метод возвращает true, то и getIntegState вернёт то же значение.
- Возвращает:
- true, если доступны службы конфиденциальности, иначе false.
- См. также:
getIntegState
boolean getIntegState()
isProtReady или isEstablished вернёт true. Этот метод всегда возвращает true, если метод getConfState возвращает true.- Возвращает:
- true, если доступны службы целостности, иначе false.
- См. также:
getLifetime
int getLifetime()
isEstablished вернёт true.- Возвращает:
- оставшийся срок действия в секундах
- См. также:
getSrcName
GSSName getSrcName() throws GSSException
isProtReady или isEstablished вернёт true.- Возвращает:
- GSSName, представляющий MN с именем инициатора контекста.
- Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE - См. также:
getTargName
GSSName getTargName() throws GSSException
isProtReady или isEstablished вернёт true.- Возвращает:
- GSSName, представляющий MN с именем принимающей стороны контекста.
- Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE
getMech
Oid getMech() throws GSSException
- Возвращает:
- Oid используемого механизма
- Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE
getDelegCred
GSSCredential getDelegCred() throws GSSException
getCredDelegState, чтобы определить, были ли делегированы учётные данные.- Возвращает:
- GSSCredential, содержащий делегированные учётные данные инициатора, или
null, если учётные данные не были делегированы. - Исключения:
-
GSSException— содержит следующий основной код ошибки:GSSException.FAILURE
isInitiator
boolean isInitiator() throws GSSException
- Возвращает:
- true, если эта сторона является инициатором контекста, false, если она является принимающей стороной.
- Исключения:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.security.jgss/org/ietf/jgss/GSSContext.html