Интерфейс 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 генерируют токены, которые приложение отправляет peer'у. Peer передает любой такой токен в качестве входных данных в свой метод acceptSecContext или initSecContext в зависимости от случая.
Во время фазы создания контекста можно вызвать метод isProtReady, чтобы определить, может ли контекст использоваться для операций над сообщениями wrap и getMIC. Это позволяет приложениям использовать операции над сообщениями в контекстах, которые еще не полностью созданы.
После того, как контекст был создан или метод isProtReady возвращает true, можно вызвать запросы, чтобы определить фактические характеристики и службы созданного контекста. Приложение также может начать использовать методы обработки сообщений wrap и getMIC для получения криптографических операций над данными, предоставленными приложением.
Когда контекст больше не нужен, приложение должно вызвать dispose, чтобы освободить любые системные ресурсы, которые может использовать контекст.
Контекст безопасности обычно сохраняет информацию о последовательности и обнаружении повторов для обрабатываемых им токенов. Следовательно, порядок представления токенов в этот контекст для обработки может иметь значение. Также обратите внимание, что ни один из методов этого интерфейса не синхронизирован. Поэтому не рекомендуется совместно использовать GSSContext между несколькими потоками, если не предусмотрена синхронизация на уровне приложения.
Наконец, разные поставщики механизмов могут устанавливать разные ограничения безопасности при использовании контекстов GSS-API. Они будут документированы поставщиком механизма. Приложение должно убедиться, что у него есть соответствующие разрешения, если такие проверки выполняются на уровне механизма.
Методы с потоками 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 для инициализирующего peer'а. Представлены различные операции с объектом 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, содержащийся в параметре token, по предоставленному сообщению. |
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. Это указывает на то, что маркер необходимо направить партнёру, но локальный конец контекста теперь полностью установлен.
Некоторые поставщики механизмов могут потребовать, чтобы у вызывающей стороны были разрешения на инициирование контекста безопасности. Неуспешная проверка разрешений может привести к тому, что из этого метода будет брошено исключение SecurityException.
- Параметры:
-
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.
Некоторые поставщики механизмов могут потребовать, чтобы у вызывающей стороны были разрешения на инициирование контекста безопасности. Неуспешная проверка разрешений может привести к тому, что из этого метода будет брошено исключение SecurityException.
Следующий пример кода демонстрирует, как можно использовать данный метод:
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- входной поток, содержащий маркер, сгенерированный партнёром. Этот параметр игнорируется при первом вызове, так как от партнёра ещё не получен ни один маркер. -
outStream- выходной поток, в который будет записан маркер вывода. На последнем этапе установления контекста может не быть записано ни одного байта. - Возвращает:
- количество байтов, записанных в 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. Это указывает на то, что маркер необходимо направить партнёру, но локальный конец контекста теперь полностью установлен.
Некоторые поставщики механизмов могут потребовать, чтобы у вызывающей стороны были разрешения на принятие контекста безопасности. Неуспешная проверка разрешений может привести к тому, что из этого метода будет брошено исключение SecurityException.
Следующий пример кода демонстрирует, как можно использовать данный метод:
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.
Некоторые поставщики механизмов могут потребовать, чтобы у вызывающей стороны было разрешение на принятие защищенного контекста. Неуспешная проверка разрешения может привести к тому, что из этого метода будет выброшено исключение SecurityException.
Следующий пример кода демонстрирует, как может использоваться этот метод:
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();
}
- Parameters:
-
inStream- входной поток, содержащий маркер, сгенерированный участником. -
outStream- выходной поток, в который будет записан маркер вывода. На заключительном этапе установления контекста, возможно, не будет записано никаких байтов. - Throws:
-
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()
- Returns:
-
trueесли это полностью установленный контекст со стороны вызывающего объекта и больше маркеров от участника не требуется.
dispose
void dispose() throws GSSException
- Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE
getWrapSizeLimit
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
wrap. Возвращает максимальный размер сообщения, который, если его предоставить методу wrap с теми же параметрами confReq и qop, приведет к маркеру вывода, содержащему не более maxTokenSize байтов.Этот вызов предназначен для использования приложениями, взаимодействующими по протоколам, которые устанавливают максимальный размер сообщения. Он позволяет приложению фрагментировать сообщения до применения защиты.
Реализации GSS-API рекомендуются, но не требуются, для обнаружения некорректных значений QOP при вызове getWrapSizeLimit. Эта функция гарантирует только максимальный размер сообщения, а не доступность конкретных значений QOP для защиты сообщения.
- Parameters:
-
qop- уровень защиты, который будет запрашивать wrap. -
confReq-trueесли wrap будет запрашивать конфиденциальность,falseв противном случае. -
maxTokenSize- желаемый максимальный размер маркера, генерируемого wrap. - Returns:
- максимальный размер входного маркера для данного размера маркера вывода
- Throws:
-
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, для предоставления «защищенной рамки», реализации должны поддерживать заворачивание сообщений нулевой длины.
Приложение будет отвечать за отправку маркера участнику.
- Parameters:
-
inBuf- данные приложения, которые необходимо защитить. -
offset- смещение в inBuf, где начинаются данные. -
len- длина данных -
msgProp- экземпляр MessageProp, который используется приложением для установки желаемого QOP и состояния конфиденциальности. Установите желаемый QOP в 0, чтобы запросить стандартный QOP. По возвращении из этого метода этот объект будет содержать фактическое состояние конфиденциальности, применённое к сообщению основным механизмом. - Returns:
- массив байтов, содержащий маркер, который нужно отправить участнику.
- Throws:
-
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, для предоставления «защищенной рамки», реализации должны поддерживать заворачивание сообщений нулевой длины.
- Parameters:
-
inStream- входной поток, содержащий данные приложения, которые необходимо защитить. Все данные, доступные в inStream, используются. -
outStream- выходной поток, в который необходимо записать защищенное сообщение. -
msgProp- экземпляр MessageProp, который используется приложением для установки желаемого QOP и состояния конфиденциальности. Установите желаемый QOP в 0, чтобы запросить стандартный QOP. По возвращении из этого метода этот объект будет содержать фактическое состояние конфиденциальности, применённое к сообщению основным механизмом. - Throws:
-
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, для обеспечения «защищённой рамки», реализации должны поддерживать заворачивание и распаковку сообщений нулевой длины.
- Parameters:
-
inBuf- массив байтов, содержащий маркер wrap, полученный от партнёра. -
offset- смещение, с которого начинается маркер. -
len- длина маркера -
msgProp- по возвращении из метода, этот объект будет содержать применённый QOP, состояние конфиденциальности сообщения и дополнительную информацию о том, был ли маркер дубликатом, старым, вне последовательности или пришёл после разрыва. - Returns:
- массив байтов, содержащий сообщение, распакованное из входного маркера.
- Throws:
-
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.
- Parameters:
-
inStream- InputStream, содержащий маркер wrap, сгенерированный партнёром. -
outStream- OutputStream для записи сообщения приложения. -
msgProp- по возвращении из метода, этот объект будет содержать применённый QOP, состояние конфиденциальности сообщения и дополнительную информацию о том, был ли маркер дубликатом, старым, вне последовательности или пришёл после разрыва. - Throws:
-
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 из сообщений нулевой длины.
- Parameters:
-
inMsg- сообщение для генерации MIC. -
offset- смещение в inMsg, где начинается сообщение. -
len- длина сообщения -
msgProp- экземплярMessageProp, используемый приложением для установки желаемого QOP. Установите желаемый QOP в0вmsgProp, чтобы запросить значение по умолчанию для QOP. В качестве альтернативы передайтеnullдляmsgPropчтобы запросить значение по умолчанию для QOP. - Returns:
- массив байтов, содержащий маркер для отправки партнёру.
- Throws:
-
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 из сообщений нулевой длины.
- Parameters:
-
inStream- InputStream, содержащий сообщение для генерации MIC. Используются все доступные данные в inStream. -
outStream- OutputStream для записи выходного маркера. -
msgProp- экземплярMessageProp, используемый приложением для установки желаемого QOP. Установите желаемый QOP в0вmsgProp, чтобы запросить значение по умолчанию для QOP. В качестве альтернативы передайтеnullдляmsgPropчтобы запросить значение по умолчанию для QOP. - Throws:
-
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 для сообщений нулевой длины.
- Parameters:
-
inToken- маркер, сгенерированный методом getMIC партнёра. -
tokOffset- смещение в inToken, с которого начинается маркер. -
tokLen- длина маркера. -
inMsg- сообщение приложения для проверки криптографического MIC. -
msgOffset- смещение в inMsg, с которого начинается сообщение. -
msgLen- длина сообщения. -
msgProp- по возвращении из метода, этот объект будет содержать применённый QOP и дополнительную информацию о том, был ли маркер дубликатом, старым, вне последовательности или пришёл после разрыва. - Throws:
-
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- Поток ввода, содержащий токен, сгенерированный методом getMIC удалённого узла. -
msgStream- Поток ввода, содержащий сообщение приложения для проверки криптографического 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:
- a 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 — в противном случае.
- См. также:
getIntegState
boolean getIntegState()
isProtReady или isEstablished вернёт true. Этот метод всегда вернёт true, если getConfState вернёт true.- Returns:
- true, если услуги целостности доступны, false — в противном случае.
- См. также:
getLifetime
int getLifetime()
isEstablished вернёт true.- Returns:
- оставшийся срок жизни в секундах
- См. также:
getSrcName
GSSName getSrcName() throws GSSException
isProtReady или isEstablished вернёт true. - Returns:
- GSSName, содержащий имя инициатора контекста.
- Throws:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.FAILURE - См. также:
getTargName
GSSName getTargName() throws GSSException
isProtReady или isEstablished вернёт true. - Returns:
- GSSName, содержащий имя приемника контекста.
- 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, 2023, 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/21/docs/api/java.security.jgss/org/ietf/jgss/GSSContext.html