|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface GSSContext
此介面將封裝 GSS-API 安全上下文,並提供可通過上下文提供的安全服務。安全上下文是使用本地獲取的憑據在同位體之間創建的。在一對同位體之間可能會同時存在多個上下文,它們使用一套相同或不同的憑據。GSS-API 的執行方式與基礎傳輸協議無關,而是取決於其對傳輸標記的應用程序的調用,這些標記由同位體之間的安全上下文產生。
如果調用者使用預設的 GSSManager
實例實例化上下文,則可保證 Kerberos v5 GSS-API 機制可用於上下文創建。此機制由 Oid "1.2.840.113554.1.2.2" 標識,並在 RFC 1964 中被進行定義。
在初始化上下文創建階段之前,上下文初始化程序會請求已創建的上下文所需要的特定特徵。並非所有的基礎機制都支持調用者所需要的全部特徵。在創建上下文之後,調用者可以通過多種查詢方法來檢查由該上下文提供的實際特徵和服務。當使用由預設的 GSSManager
實例提供的 Kerberos v5 GSS-API 機制時,所有的可選服務都可本地提供。它們是相互驗證、憑據委託、機密性和完整性保護、以及 per-message 重放檢測和排序。注意,在 GSS-API 中,訊息完整性是訊息機密性的先決條件。
上下文創建必須在這樣一個環路中進行:初始端調用 initSecContext
,接受端調用 acceptSecContext
,直到創建好該上下文。同時,在此環路中,initSecContext
和 acceptSecContext
方法將產生應用程序發送給同位體的標記。同位體將根據情況將任何這樣的標記作為輸入傳遞給它的 acceptSecContext
或 initSecContext
。
在上下文創建階段,可能會調用 isProtReady
方法來確定是否可以將該上下文用於 wrap
和 getMIC
的 per-message 操作。這將允許應用程序在尚未完全創建的上下文上使用 per-message 操作。
在上下文創建好或 isProtReady
方法返回 true
後,可調用查詢例程來確定已創建上下文的實際特徵和服務。還可以通過使用 wrap
和 getMIC
的 per-message 方法來啟動應用程序,以獲取對應用程序提供的資料的加密操作。
當不再需要上下文時,應用程序必須調用 dispose
來釋放該上下文可能正在使用的任何系統資源。
安全上下文一般都維護有關它所處理的標記的排序和重放檢測方面的資訊。因此,將標記呈現給此上下文以進行處理的順序非常重要。還要注意的是,此介面中的任何方法都不同步。因此,除非已經實施了某些應用程序級的同步,否則建議不要在幾個執行緒之間共享 GSSContext
。
最後一點是,不同的機制提供商可能會對使用 GSS-API 上下文提出不同的安全限制。這些將由機制提供商記入文檔。應用程序需要確保是否具有適當的權限在機制層中進行此類別檢查。
下面呈現的範例程式碼演示了使用 GSSContext
介面初始化同位體的情況。它呈現了在 GSSContext
物件上的不同操作,其中包括:物件初始化、所需標誌的設置、上下文創建、對實際上下文標誌的查詢、對應用程序資料的 per-message 操作和最終的上下文刪除。
// 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]; // Loop while there still is a token to be processed while (!context.isEstablished()) { byte[] 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); byte []tok = context.wrap(appMsg, 0, appMsg.length, mProp); sendToken(tok); // release the local-end of the context context.dispose();
欄位摘要 | |
---|---|
static int |
DEFAULT_LIFETIME
一個表示預設的上下文生存期的生存期常數。 |
static int |
INDEFINITE_LIFETIME
一個表示不確定的上下文生存期的生存期常數。 |
方法摘要 | |
---|---|
byte[] |
acceptSecContext(byte[] inToken,
int offset,
int len)
由上下文接受端在收到同位體的標記後調用。 |
void |
acceptSecContext(InputStream inStream,
OutputStream outStream)
由上下文接受端調用,以處理來自使用串流的同位體的標記。 |
void |
dispose()
釋放存儲在上下文物件中並且使上下文無效的系統資源和加密資訊。 |
byte[] |
export()
導出此上下文,以便使其他進程能夠導入它。 |
boolean |
getAnonymityState()
確定是否會向上下文接受端對上下文初始端進行匿名驗證。 |
boolean |
getConfState()
確定資料機密性是否可用於上下文。 |
boolean |
getCredDelegState()
確定是否在此上下文上啟用憑據委託。 |
GSSCredential |
getDelegCred()
獲取上下文初始端委託給上下文接受端的憑據。 |
boolean |
getIntegState()
確定資料完整性是否可用於上下文。 |
int |
getLifetime()
確定此上下文剩餘的生存期是多長。 |
Oid |
getMech()
確定什麼機制正用於此上下文。 |
byte[] |
getMIC(byte[] inMsg,
int offset,
int len,
MessageProp msgProp)
返回包含所提供訊息的加密訊息完整性程式碼 (MIC) 的標記,以便傳輸到同位體應用程序。 |
void |
getMIC(InputStream inStream,
OutputStream outStream,
MessageProp msgProp)
使用串流來產生包含所提供訊息的加密 MIC 的標記,以便傳輸到同位體應用程序。 |
boolean |
getMutualAuthState()
確定是否在此上下文上啟用了相互驗證。 |
boolean |
getReplayDetState()
確定是否針對此上下文中的 per-message 安全服務啟用了重放檢測。 |
boolean |
getSequenceDetState()
確定是否針對本上下文中的 per-message 安全服務啟用了序列檢查。 |
GSSName |
getSrcName()
返回上下文初始端的名稱。 |
GSSName |
getTargName()
返回上下文接受端的名稱。 |
int |
getWrapSizeLimit(int qop,
boolean confReq,
int maxTokenSize)
用來確定可以傳輸給 wrap 的訊息的大小限制。 |
byte[] |
initSecContext(byte[] inputBuf,
int offset,
int len)
由上下文初始端調用,以啟動上下文創建階段,處理由同位體的 acceptSecContext 方法產生的任何標記。 |
int |
initSecContext(InputStream inStream,
OutputStream outStream)
由上下文初始端調用,以啟動上下文的創建階段,處理由使用串流的同位體的 acceptSecContext 方法產生的任何標記。 |
boolean |
isEstablished()
用來在上下文創建期間確定上下文的狀態。 |
boolean |
isInitiator()
確定它是否為上下文初始端。 |
boolean |
isProtReady()
確定上下文是否已為要在其上使用的 per message 準備就緒。 |
boolean |
isTransferable()
確定通過使用 export 方法,該上下文是否可以傳輸給其他進程。 |
void |
requestAnonymity(boolean state)
請求不要將初始端的身份洩露給接受端。 |
void |
requestConf(boolean state)
請求針對 wrap 方法啟用資料機密性。 |
void |
requestCredDeleg(boolean state)
請求在上下文創建期間將初始端的憑據委託給接受端。 |
void |
requestInteg(boolean state)
請求針對 wrap 和 getMIC 方法啟用資料完整性。 |
void |
requestLifetime(int lifetime)
請求上下文以秒為單位的生存期。 |
void |
requestMutualAuth(boolean state)
要求相互驗證在上下文創建期間完成。 |
void |
requestReplayDet(boolean state)
請求在上下文創建之後針對 per-message 安全服務啟用重放檢測。 |
void |
requestSequenceDet(boolean state)
請求在上下文創建之後針對 per-message 安全服務啟用序列檢查。 |
void |
setChannelBinding(ChannelBinding cb)
設置在上下文創建期間使用的通道綁定。 |
byte[] |
unwrap(byte[] inBuf,
int offset,
int len,
MessageProp msgProp)
用來處理在上下文的另一方由 wrap 方法產生的標記。 |
void |
unwrap(InputStream inStream,
OutputStream outStream,
MessageProp msgProp)
使用串流來處理在上下文的另一方由 wrap 方法產生的標記。 |
void |
verifyMIC(byte[] inToken,
int tokOffset,
int tokLen,
byte[] inMsg,
int msgOffset,
int msgLen,
MessageProp msgProp)
通過提供的訊息,檢查包含在標記參數中的加密的 MIC。 |
void |
verifyMIC(InputStream tokStream,
InputStream msgStream,
MessageProp msgProp)
通過提供的訊息,使用串流來驗證包含在標記參數中的加密的 MIC。 |
byte[] |
wrap(byte[] inBuf,
int offset,
int len,
MessageProp msgProp)
將 per-message 安全服務應用於已創建的安全上下文。 |
void |
wrap(InputStream inStream,
OutputStream outStream,
MessageProp msgProp)
將 per-message 安全服務應用於已創建的使用串流的安全上下文。 |
欄位詳細資訊 |
---|
static final int DEFAULT_LIFETIME
static final int INDEFINITE_LIFETIME
Integer.MAX_VALUE
。
方法詳細資訊 |
---|
byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
acceptSecContext
方法產生的任何標記。此方法會返回一個應用程序需要發送給同位體、以便由其 acceptSecContext
方法進行處理的輸出標記。應用程序可以調用 isEstablished
來確定在上下文的這一方是否完成了上下文創建階段。如果從 isEstablished
中返回的值是 false
,則指示希望為 initSecContext
提供更多的標記。完成上下文創建後,可通過 get 方法查詢可用的上下文選項。
注意,有可能出現這樣一種情況:initSecContext
方法為同位體返回一個標記,isEstablished
也返回 true
。這表示,需要將標記發送給同位體,但該上下文的本地端現已完全創建。
有些機制提供商可能會要求調用者授予初始化安全上下文的權限。失敗的權限檢查可以導致從此方法中拋出 SecurityException
。
inputBuf
- 由同位體產生的標記。由於尚未從該同位體中接收到標記,因此在初次調用時此參數將被忽略。offset
- inputBuf 中標記開始處的偏移量。len
- 該標記的長度。
null
指示未產生任何標記。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN 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
GSSException
int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
acceptSecContext
方法產生的任何標記。此方法將向 OutpuStream
寫入輸出標記,應用程序需要將此標記發送到同位體以便通過其 acceptSecContext
調用進行處理。一般情況下,應用程序會通過在 OutputStream
上調用 flush
方法來確保封裝這兩個同位體之間的連接。應用程序可以通過此方法返回的值確定是否向 OutputStream 寫入了標記。如果返回的值是 0
,則表示沒有寫入任何值。應用程序可以調用 isEstablished
來確定在上下文的這一方是否完成了上下文創建階段。如果從 isEstablished
中返回的值是 false
,則指示希望為 initSecContext
提供更多的標記。完成上下文創建後,可通過 get 方法查詢可用的上下文選項。
注意,有可能出現這樣一種情況: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
- 一個套件含由同位體產生的標記的 InputStream。由於尚未(不會)從該同位體的該點接收到標記,因此在初次調用時此參數將被忽略。outStream
- 將向其中寫入輸出標記的 OutputStream。在上下文創建的最終階段,可能不需要寫入位元組。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN 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
GSSException
byte[] acceptSecContext(byte[] inToken, int offset, int len) throws GSSException
initSecContext
調用進行進一步處理。
應用程序可以通過調用 isEstablished
來確定是否完成了此同位體的上下文創建階段。如果從 isEstablished
中返回的值是 false
,則指示希望為此方法提供更多的標記。完成上下文創建後,可通過 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,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN 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
GSSException
void acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
OutputStream
寫入輸出標記,應用程序需要將此標記發送到同位體以便通過其 initSecContext
方法進行處理。一般情況下,應用程序會通過在 OutputStream
上調用 flush
方法來確保封裝這兩個同位體之間的連接。應用程序可以調用 isEstablished
來確定在上下文的這一方是否完成了上下文創建階段。如果從 isEstablished
中返回的值為 false
,則指示希望為 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(); }
inStream
- 一個套件含由同位體產生的標記的 InputStream。outStream
- 將向其中寫入輸出標記的 OutputStream。在上下文創建的最終階段,可能不需要寫入位元組。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN 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
GSSException
boolean isEstablished()
true
。void dispose() throws GSSException
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
wrap
的訊息的大小限制。如果以相同的 confReq
和 qop
參數呈現給 wrap
方法,則將返回最大的訊息大小,這會導致輸出標記只包含 maxTokenSize
個位元組。此調用主要供那些通過影響最大訊息大小的協議進行通信的應用程序使用。它使應用程序能夠在實施保護之前將訊息進行分段。
在調用 getWrapSizeLimit
時,推薦實作 GSS-API,但不要求檢測無效的 QOP 值。此例程可保證只有最大訊息大小,而不是針對訊息保護的特定 QOP 值的可用性。
qop
- 將要求 wrap 提供的保護級別。confReq
- 如果要求 wrap 提供保密性,則為 true
,否則為 false
。maxTokenSize
- 由 wrap 發出的標記所需的最大大小。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#CONTEXT_EXPIRED GSSException.CONTEXT_EXPIRED}、GSSException.BAD_QOP
、GSSException.FAILURE
GSSException
byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
MessageProp 物件可以通過應用程序進行實例化,並可用來指定一個選擇加密演算法的 QOP 值,和可選地對訊息進行加密的私密服務。在調用中使用的基礎機制可能無法提供私密服務。但它將設置在此 MessageProp 物件中提供的實際私密服務,調用者會在該調用返回後對其進行查詢。如果機制不能提供請求的 QOP,則它將拋出帶有 BAD_QOP 程式碼的 GSSException。
由於某些應用程序級的協議希望使用 wrap 發出的標記來提供 "secure framing"(安全分幀),所以實作應該支持包裹零長度的訊息。
應用程序將負責將標記發送到同位體。
inBuf
- 要保護的應用程序資料。offset
- inBuf 中資料開始處的偏移量。len
- 資料的長度msgProp
- MessageProp 的實例,應用程序使用它來設置需要的 QOP 和私密狀態。將需要的 QOP 設置為 0,以便請求預設的 QOP。從此方法返回後,此物件將包含基礎機制應用於訊息的實際私密狀態。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#CONTEXT_EXPIRED GSSException.CONTEXT_EXPIRED}、GSSException.BAD_QOP
、GSSException.FAILURE
GSSException
void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
方法。
應用程序將負責將標記發送到同位體。一般情況下,應用程序會通過在 OutputStream
上調用 flush
方法來確保封裝這兩個同位體之間的連接。
MessageProp 物件可以通過應用程序進行實例化,並可用來指定一個選擇加密演算法的 QOP 值,和可選地對訊息進行加密的私密服務。在調用中使用的基礎機制可能無法提供私密服務。但它將設置在此 MessageProp 物件中提供的實際私密服務,調用者會在該調用返回後對其進行查詢。如果機制不能提供請求的 QOP,則它將拋出帶有 BAD_QOP 程式碼的 GSSException。
由於某些應用程序級的協議希望使用 wrap 發出的標記來提供 "secure framing"(安全分幀),所以實作應該支持包裹零長度的訊息。
inStream
- 一個套件含受保護的應用程序資料的 InputStream。將使用 inStream 中提供的所有資料。outStream
- 向其寫入受保護訊息的 OutputStream。msgProp
- MessageProp 的實例,應用程序使用它來設置需要的 QOP 和保密狀態。將需要的 QOP 設置為 0,以便請求預設的 QOP。從此方法返回後,此物件將包含基礎機制應用於訊息的實際私密狀態。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#CONTEXT_EXPIRED GSSException.CONTEXT_EXPIRED}、GSSException.BAD_QOP
、GSSException.FAILURE
GSSException
byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
wrap
方法產生的標記。該方法將由同位體應用程序提供的訊息返回到其 wrap 調用,同時驗證為該訊息嵌入的 MIC。MessageProp 物件將由應用程序實例化,並由基礎機制使用,以便返回給調用者一些資訊,如 QOP、是否對訊息應用了機密性,以及其他一些增補訊息狀態資訊。
由於某些應用程序級的協議希望使用 wrap 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持包裹和不包裹零長度的訊息。
inBuf
- 套件含從同位體接收的套件裝標記的位元組陣列。offset
- 標記開始處的偏移量。len
- 標記的長度msgProp
- 從此方法返回後,此物件將包括所應用的 QOP、訊息的保密狀態、和說明該標記是否為複製的、舊的、超出序列的或在 gap 後進入的標記的增補資訊。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
方法產生的標記。該方法將由同位體應用程序提供的訊息返回到其 wrap 調用,同時驗證為該訊息嵌入的 MIC。MessageProp 物件將由應用程序實例化,並由基礎機制使用,以便返回給調用者一些資訊,如 QOP、是否對訊息應用了機密性,以及其他一些增補訊息狀態資訊。
由於某些應用程序級的協議希望使用 wrap 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持包裹和不包裹零長度的訊息。
此方法讀取的輸入標記的格式在將要使用的基礎機制的規範中定義。此方法將嘗試每調用一次讀取其中的一個標記。如果機制標記包含確定的始端和終端,則在僅有部分標記可用時,此方法將阻塞 InputStream
。如果標記的始端和終端不是確定的,則該方法會嘗試將所有的可用位元組視為標記的一部分。
與前面介紹的可能出現的阻塞行為不同,此方法等同於基於位元組陣列的 unwrap
方法。
inStream
- 一個套件含由同位體產生的套件裝標記的 InputStream。outStream
- 向其寫入應用程序訊息的 OutputStream。msgProp
- 從方法返回後,此物件將包括所用的 QOP、訊息的保密狀態和說明該標記是否為複製的、舊的、超出序列或在 gap 後進入的標記的增補資訊。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
注意,保密性只能應用於 wrap 調用。
由於某些應用程序級的協議希望使用 getMIC 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持從零長度訊息中導出 MIC。
inMsg
- 在其上產生 MIC 的訊息。offset
- inMsg 中訊息開始處的偏移量。len
- 訊息的長度msgProp
- MessageProp
的一個實例,應用程序使用它來設置需要的 QOP。在 msgProp
中將需要的 QOP 設置為 0
,以便請求預設的 QOP。還可以通過為 msgProp
傳入 null
來請求預設的 QOP。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#CONTEXT_EXPIRED GSSException.CONTEXT_EXPIRED}、GSSException.BAD_QOP
、GSSException.FAILURE
GSSException
void getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
getMIC
方法。
注意,保密性只能應用於 wrap 調用。由於某些應用程序級的協議希望使用 getMIC 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持從零長度訊息中導出 MIC。
inStream
- 一個 InputStream,它包含在其上產生 MIC 的訊息。將使用 inStream 中提供的所有資料。outStream
- 向其寫入輸出標記的 OutputStream。msgProp
- MessageProp
的一個實例,應用程序使用它來設置需要的 QOP。在 msgProp
中將需要的 QOP 設置為 0
,以便請求預設的 QOP。還可以通過為 msgProp
傳入 null
來請求預設的 QOP。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#CONTEXT_EXPIRED GSSException.CONTEXT_EXPIRED}、GSSException.BAD_QOP
、GSSException.FAILURE
GSSException
void verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
MessageProp 物件將由該應用程序實例化,並由基礎機制使用,以便返回給調用者諸如 QOP 之類別的資訊,從而表明應用於訊息的保護的長度和其他一些增補訊息狀態資訊。
由於某些應用程序級的協議希望使用 getMIC 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持計算和檢查零長度訊息的 MIC。
inToken
- 由同位體的 getMIC 方法產生的標記。tokOffset
- inToken 中標記開始處的偏移量。tokLen
- 該標記的長度inMsg
- 通過它來驗證加密的 MIC 的應用程序訊息。msgOffset
- inMsg 中訊息開始處的偏移量。msgLen
- 該訊息的長度。msgProp
- 從方法返回後,此物件將包括所用的 QOP 和說明該標記是否為複製的、舊的、超出序列或在 gap 後進入的標記的增補資訊。
GSSException,
- 套件含以下主要錯誤程式碼:GSSException.DEFECTIVE_TOKEN
、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp) throws GSSException
verifyMIC
方法。
MessageProp 物件將由該應用程序實例化,並由基礎機制使用,以便返回給調用者諸如 QOP 之類別的資訊,從而表明應用於訊息的保護的長度和其他一些增補訊息狀態資訊。由於某些應用程序級的協議希望使用 getMIC 發出的標記來提供 "secure framing"(安全分幀),所以實作必須支持計算和檢查零長度訊息的 MIC。
此方法讀取的輸入標記的格式在將要使用的基礎機制的規範中定義。此方法將嘗試每調用一次讀取其中的一個標記。如果機制標記包含確定的始端和終端,則在僅有部分標記可用時,此方法將阻塞 InputStream
。如果標記的始端和終端不是確定的,則該方法會嘗試將所有的可用位元組視為標記的一部分。
與前面介紹的可能出現的阻塞行為不同,此方法等同於基於位元組陣列的 verifyMIC
方法。
tokStream
- 一個套件含由同位體的 getMIC 方法產生的標記的 InputStream。msgStream
- 一個套件含可用來驗證加密的 MIC 的應用程序訊息的 InputStream。將使用 msgStream 中提供的所有資料。msgProp
- 從方法返回後,此物件將包括所用的 QOP 和說明該標記是否為複製的、舊的、超出序列或在 gap 後進入的標記的增補資訊。
GSSException,
- 套件含以下主要錯誤程式碼:GSSException.DEFECTIVE_TOKEN
、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
byte[] export() throws GSSException
此方法將取消啟動安全上下文,並創建一個進程間標記,當將該標記傳遞給另一個進程中的 GSSManager.createContext
時,它將在第二個進程中重新啟動上下文。只有給定上下文的單一實例化可以在任何時間處於活動狀態;上下文導出器對導出的安全上下文的後續存取嘗試都不會成功。
該實作可以限制進程的 set,可以通過這些進程導入進程間的標記,要麼將其作為本地安全策略的一項功能,要麼將其作為實作決策的結果。例如,有些實作會限制上下文僅在在同一帳戶下運行的進程間傳遞,或者上下文是同一進程組的一部分。
進程間的標記可以包含安全性敏感資訊(例如,加密密鑰)。儘管鼓勵機制要麼避免將此類別敏感性資訊放在進程間標記中,要麼在將標記返回到應用程序前對其進行加密,但在典型的 GSS-API 實作中,這是不可能的。因此,應用程序必須小心地保護進程間的標記,並確保標記將要向其傳輸的任何進程都是完全受信任的。
不要求實作支持安全上下文的進程間的傳輸。調用 isTransferable
方法將指示上下文物件是否可傳輸。
在不可導出的上下文上調用此方法會導致拋出以下異常,並帶有錯誤程式碼 GSSException.UNAVAILABLE
。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.CONTEXT_EXPIRED
、GSSException.NO_CONTEXT
、GSSException.FAILURE
GSSException
GSSManager.createContext(byte[])
void requestMutualAuth(boolean state) throws GSSException
initSecContext
之前完成。
並非所有的機制都支持相互驗證,並且某些機制在應用程序不要求相互驗證的情況下也會要求這樣做。因此,應用程序必須進行檢查,看請求是否與 getMutualAuthState
方法有關。
state
- 布林值,指示是否應該使用相互驗證。
GSSException,包含以下主要錯誤程式碼:
- GSSException.FAILURE
GSSException
getMutualAuthState()
void requestReplayDet(boolean state) throws GSSException
initSecContext
之前完成。在上下文創建期間,重放檢測不作為選項,而只是基礎機制的一項功能。
並非所有的機制都支持重放檢測,並且某些機制在應用程序不要求重放檢測的情況下也會要求這樣做。因此,應用程序必須進行檢查,看請求是否與 getReplayDetState
方法有關。如果重放檢測已啟用,則 MessageProp.isDuplicateToken
和 MessageProp.isOldToken
方法將為傳入到 unwrap
方法或 verifyMIC
方法的 MessageProp
物件返回有效結果。
state
- 布林值,指示在創建的上下文上是否應該啟用重放檢測。
GSSException,包含以下主要錯誤程式碼:
- GSSException.FAILURE
GSSException
getReplayDetState()
void requestSequenceDet(boolean state) throws GSSException
initSecContext
之前完成。在上下文創建期間,序列檢查不作為選項,而只是基礎機制的一項功能。
並非所有的機制都支持序列檢查,並且某些機制在應用程序不要求序列檢查的情況下也會要求這樣做。因此,應用程序必須進行檢查,看請求是否與 getSequenceDetState
方法有關。如果序列檢查已啟用,則 MessageProp.isDuplicateToken
、MessageProp.isOldToken
、MessageProp.isUnseqToken
和 MessageProp.isGapToken
方法將為傳入到 unwrap
方法或 verifyMIC
方法的 MessageProp
物件返回有效結果。
state
- 布林值,指示在創建的上下文上是否應該啟用序列檢查。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
getSequenceDetState()
void requestCredDeleg(boolean state) throws GSSException
initSecContext
之前完成。
並非所有的機制都支持憑據委託。因此,需要委託的應用程序應該進行檢查,看請求是否與 getCredDelegState
方法相關。如果應用程序指示不能使用委託,則機制將認可該請求,不執行委託。對於即使在不請求的情況下機制也會啟用服務這項常規規則而言,這是個例外。
state
- 布林值,指示是否應該委託該憑據。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
getCredDelegState()
void requestAnonymity(boolean state) throws GSSException
initSecContext
之前完成。
並非所有的機制都支持初始端匿名。因此,應用程序應該進行檢查,看請求是否與 getAnonymityState
方法相關。
state
- 布林值,表示作為匿名主體,是否應該向接受端對初始端進行驗證。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
getAnonymityState()
void requestConf(boolean state) throws GSSException
wrap
方法啟用資料機密性。只能在上下文初始端發出此要求,並且必須在初次調用 initSecContext
之前完成。
並非所有的機制都支持機密性,並且有些機制即使在應用程序不請求時也會啟用它。應用程序會進行檢查,看請求是否與 getConfState
方法相關。如果已經啟用了機密性,則機制僅在此時認可傳入到 wrap
方法的 MessageProp
物件中的保密請求。啟用機密性還會自動啟用完整性。
state
- 布林值,指示是否應該啟用機密性。
GSSException,包含以下主要錯誤程式碼:
- GSSException.FAILURE
GSSException
getConfState()
,
getIntegState()
,
requestInteg(boolean)
,
MessageProp
void requestInteg(boolean state) throws GSSException
wrap
和 getMIC
方法啟用資料完整性。只能在上下文初始端發出此要求,並且必須在初次調用 initSecContext
之前完成。
並非所有的機制都支持完整性,並且有些機制即使在應用程序不請求時也會啟用它。應用程序會進行檢查,看請求是否與 getIntegState
方法相關。禁用完整性也將自動禁用機密性。
state
- 布林值,指示是否應該啟用完整性。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
getIntegState()
void requestLifetime(int lifetime) throws GSSException
initSecContext
之前完成。
上下文的實際生存期將取決於基礎機制的功能,並且應用程序必須通過調用 getLifetime
方法來確定此生存期。
lifetime
- 所需要的以秒為單位的上下文生存期。使用 INDEFINITE_LIFETIME
來請求不確定的生存期,使用 DEFAULT_LIFETIME
來請求預設的生存期。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
getLifetime()
void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContext
之前調用它,接受端也必須在初次調用 acceptSecContext
之前調用它。
cb
- 要使用的通道綁定。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
boolean getCredDelegState()
requestCredDeleg
方法將認可該請求,並且從該點開始,此方法將在初始端返回 false
。
requestCredDeleg(boolean)
boolean getMutualAuthState()
requestMutualAuth(boolean)
boolean getReplayDetState()
requestReplayDet(boolean)
boolean getSequenceDetState()
requestSequenceDet(boolean)
boolean getAnonymityState()
initSecContext
產生的任何上下文創建標記中洩露過。絕對必須進行匿名驗證的初始端必須在每次調用 initSecContext
後調用此方法,以確定是否必須將產生的標記發送給同位體或中斷的上下文。在接受端上,對此方法的調用可以確定到現在為止,由 acceptSecContext
處理的標記是否已經洩漏了初始端的身份。
requestAnonymity(boolean)
boolean isTransferable() throws GSSException
export
方法,該上下文是否可以傳輸給其他進程。此調用僅在完全創建的上下文上有效。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
boolean isProtReady()
wrap
、unwrap
、getMIC
和 verifyMIC
之類別的方法可在上下文創建的當前階段用於此上下文,則返回 true,否則,則返回 false。boolean getConfState()
isProtReady
或 isEstablished
二者之一返回 true
時調用。如果此方法返回 true,則 getIntegState
也將返回 true
requestConf(boolean)
boolean getIntegState()
isProtReady
或 isEstablished
二者之一返回 true
時調用。如果 getConfState
返回 true,則此方法將始終返回 true
。
requestInteg(boolean)
int getLifetime()
isEstablished
返回 true 後才調用它。
requestLifetime(int)
GSSName getSrcName() throws GSSException
isProtReady
或 isEstablished
中的二者之一返回 true
時有效。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
GSSName
GSSName getTargName() throws GSSException
isProtReady
或 isEstablished
中的二者之一返回 true
時有效。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
Oid getMech() throws GSSException
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
GSSCredential getDelegCred() throws GSSException
getCredDelegState
來確定是否存在委託的憑據。
null
。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
boolean isInitiator() throws GSSException
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#FAILURE GSSException.FAILURE}
GSSException
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。