Интерфейс GSSContext
- Все известные подинтерфейсы:
ExtendedGSSContext
public interface GSSContext
Если вызывающая сторона создаёт контекст, используя по умолчанию GSSManager экземпляр, то механизм Kerberos v5 GSS-API гарантированно будет доступен для создания контекста. Этот механизм идентифицируется объектом "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. Это позволяет приложениям использовать операции с сообщениями в контекстах, которые ещё не полностью созданы.
После создания контекста или возвращения isProtReady метода значением true, можно вызывать запросы для определения фактических характеристик и услуг созданного контекста. Приложение также может начать использовать методы с сообщениями wrap и getMIC для получения криптографических операций над данными, предоставленными приложением.
Когда контекст больше не нужен, приложение должно вызвать dispose для освобождения любых системных ресурсов, которые может использовать контекст.
Контекст безопасности обычно сохраняет информацию о последовательности и предотвращении повторений для обрабатываемых им токенов. Поэтому порядок представления токенов для обработки в данном контексте может быть важным. Также обратите внимание, что ни один из методов в этом интерфейсе не синхронизирован. Поэтому не рекомендуется использовать GSSContext между несколькими потоками, если не предусмотрены механизмы синхронизации на уровне приложения.
В заключение, поставщики различных механизмов могут устанавливать различные ограничения безопасности при использовании контекстов GSS-API. Они будут документированы поставщиком механизма. Приложение должно убедиться, что оно имеет соответствующие разрешения, если такие проверки производятся на уровне механизма.
Методы на основе потоков 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
Краткое описание полей
| Modifier and Type | Field | Description |
|---|---|---|
static final int |
DEFAULT_LIFETIME |
Постоянная константа, представляющая длительность контекста по умолчанию. |
static final int |
INDEFINITE_LIFETIME |
Постоянная константа, представляющая неопределённую длительность контекста. |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
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. Это указывает, что маркер необходимо отправить партнёру, но локальный конец контекста сейчас полностью установлен.
Некоторые поставщики механизмов могут потребовать, чтобы у вызывающей стороны были разрешения на инициирование контекста безопасности. Неудачная проверка разрешений может привести к тому, что метод бросит исключение 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- an InputStream, содержащий маркер, сгенерированный удаленным узлом. -
outStream- an OutputStream, куда будет записан маркер вывода. На заключительном этапе установления контекста может не быть записанных байтов. - 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- уровень защиты, которую запросит обертка. -
confReq-trueесли обертка запросит предоставление конфиденциальности,falseв противном случае. -
maxTokenSize- желаемый максимальный размер маркера, выпущенного оболочкой. - 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.
Поскольку некоторые протоколы на уровне приложения могут пожелать использовать маркеры, выпущенные оболочкой, для предоставления «защищенной рамки», реализации должны поддерживать обертывание сообщений нулевой длины.
Приложение будет отвечать за отправку маркера удаленному узлу.
- 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.
Поскольку некоторые протоколы на уровне приложения могут пожелать использовать маркеры, выпущенные оболочкой, для предоставления «защищенной рамки», реализации должны поддерживать обертывание сообщений нулевой длины.
- Parameters:
-
inStream- an InputStream, содержащий данные приложения, которые необходимо защитить. Используются все данные, доступные в inStream. -
outStream- an OutputStream, куда записывается защищенное сообщение. -
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, для обеспечения «защищённой рамки», реализации должны поддерживать упаковку и распаковку сообщений нулевой длины.
- Параметры:
-
inBuf- массив байтов, содержащий маркер wrap, полученный от партнёра. -
offset- смещение, с которого начинается маркер. -
len- длина маркера -
msgProp- по возвращении из метода этот объект будет содержать применённый QOP, состояние конфиденциальности сообщения и дополнительную информацию о том, был ли маркер дубликатом, устаревшим, вне последовательности или пришёл после перерыва. - Возвращает:
- массив байтов, содержащий сообщение, распакованное из входного маркера.
- Исключения:
-
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- поток ввода, содержащий маркер wrap, сгенерированный партнёром. -
outStream- поток вывода для записи сообщения приложения. -
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, чтобы запросить значение по умолчанию. В качестве альтернативы передайтеnullдляmsgProp, чтобы запросить значение по умолчанию. - Возвращает:
- массив байтов, содержащий маркер, который будет отправлен партнёру.
- Исключения:
-
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- поток ввода, содержащий сообщение, для которого генерируется MIC. Все данные, доступные в inStream, используются. -
outStream- поток вывода для записи выходного маркера. -
msgProp- экземплярMessageProp, используемый приложением для задания желаемого QOP. Установите желаемый QOP в0вmsgProp, чтобы запросить значение по умолчанию. В качестве альтернативы передайте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 на основе массива байтов.
- 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 для определения, должен ли сгенерированный токен быть отправлен в peer или контекст прерван. Со стороны акцептора вызов этого метода определяет, раскрыл ли какой-либо из токенов, обработанных 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, 2021, 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/17/docs/api/java.security.jgss/org/ietf/jgss/GSSContext.html