|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjava.net.Socket
javax.net.ssl.SSLSocket
public abstract class SSLSocket
此類別擴展 Socket 並提供使用諸如安全Socket層 (Secure Sockets Layer, SSL) 或 IETF 傳輸層安全性 (Transport Layer Security, TLS) 等協議的安全Socket。
這種Socket是普通的串流Socket,只不過它們在底層網路傳輸協議(如 TCP)上添加了安全保護層。這些保護包括:
這些保護由一個“密碼套件”指定,“密碼套件”是給定的 SSL 連接所使用的加密演算法組合。在協商過程中,兩個端點必須對可用於雙方環境的密碼套件達成一致。如果不存在這種公共的套件,就不能建立 SSL 連接,也不能交換資料。
通過稱為“連繫交換”的協商過程可建立所用的密碼套件。此過程的目的是創建或重新加入一個“Session”,“Session”可以防止多個連接逾時。連繫交換完成後,可以使用 getSession 方法存取Session的屬性。此連接上最初的連繫交換可以用以下三種方式開始:
startHandshake 顯式地開始連繫交換,或者
getSession 嘗試建立Session(如果當前不存在有效的Session)將進行隱式連繫交換。
如果連繫交換由於某些原因失敗,則 SSLSocket 將關閉,不進行更多通信。
管理密碼套件時需要知道以下兩組密碼套件:
預設情況下,實作要求只預設啟用那些可對伺服器進行驗證並提供機密性的密碼套件。只有雙方明確同意非驗證和/或非私有的(未加密的)的通信時才選擇這種密碼套件。
第一次創建 SSLSocket 時不進行連繫交換,從而應用程序可以首先設置它們的通信首選項:使用哪個密碼套件、Socket應該為客戶機還是伺服器網要等。但是,應用資料在連接上發送時始終提供安全性。
可以進行註冊以便接收連繫交換結束的事件通知。這涉及到另外兩個類別的使用。HandshakeCompletedEvent 物件會被傳遞到由此 API 的使用者所註冊 HandshakeCompletedListener 實例。
SSLSocket 通過 SSLSocketFactory 創建,或通過從 SSLServerSocket 接受 一個連接來創建。
SSL Socket必須選擇以客戶機還是伺服器網要操作。這將決定誰來開始連繫交換過程,以及每一方應該發送哪種報文。每個連接都必須有一個客戶機和一個伺服器,否則連繫交換將無法正確進行。初始連繫交換開始後,Socket就不能在客戶機和伺服器網要間轉換,即使在執行重新協商時也不能。
Socket,
SSLServerSocket,
SSLSocketFactory| 建構子摘要 | |
|---|---|
protected |
SSLSocket()
僅供子類別使用。 |
protected |
SSLSocket(InetAddress address,
int port)
僅供子類別使用。 |
protected |
SSLSocket(InetAddress address,
int port,
InetAddress clientAddress,
int clientPort)
僅供子類別使用。 |
protected |
SSLSocket(String host,
int port)
僅供子類別使用。 |
protected |
SSLSocket(String host,
int port,
InetAddress clientAddress,
int clientPort)
僅供子類別使用。 |
| 方法摘要 | |
|---|---|
abstract void |
addHandshakeCompletedListener(HandshakeCompletedListener listener)
註冊一個事件偵聽器來接收此連接上的 SSL 連繫交換已經完成的通知。 |
abstract String[] |
getEnabledCipherSuites()
返回當前啟用以供此連接使用的 SSL 密碼套件的名稱。 |
abstract String[] |
getEnabledProtocols()
返回當前啟用以供此連接使用的協議版本的名稱。 |
abstract boolean |
getEnableSessionCreation()
如果可以使用此Socket建立新的 SSL Session,則返回 true。 |
abstract boolean |
getNeedClientAuth()
如果Socket要求 客戶機驗證,則返回 true。 |
abstract SSLSession |
getSession()
返回此連接使用的 SSL Session。 |
SSLParameters |
getSSLParameters()
返回對此 SSLSocket 有效的 SSLParameters。 |
abstract String[] |
getSupportedCipherSuites()
返回可以啟用以供此連接使用的密碼套件的名稱。 |
abstract String[] |
getSupportedProtocols()
返回能夠被啟用以供 SSL 連接使用的協議的名稱。 |
abstract boolean |
getUseClientMode()
如果Socket設置為連繫交換時使用客戶機網要,則返回 true。 |
abstract boolean |
getWantClientAuth()
如果Socket請求 客戶機驗證,則返回 true。 |
abstract void |
removeHandshakeCompletedListener(HandshakeCompletedListener listener)
移除一個以前註冊的連繫交換完成偵聽器。 |
abstract void |
setEnabledCipherSuites(String[] suites)
將密碼套件設置為啟用以供此連接使用。 |
abstract void |
setEnabledProtocols(String[] protocols)
設置啟用以供此連接使用的協議版本。 |
abstract void |
setEnableSessionCreation(boolean flag)
控制是否可以使用此Socket建立新的 SSL Session。 |
abstract void |
setNeedClientAuth(boolean need)
配置Socket要求 客戶機驗證。 |
void |
setSSLParameters(SSLParameters params)
對此Socket應用 SSLParameters。 |
abstract void |
setUseClientMode(boolean mode)
配置Socket在連繫交換時使用客戶機(或伺服器)網要。 |
abstract void |
setWantClientAuth(boolean want)
配置Socket請求 客戶機驗證。 |
abstract void |
startHandshake()
在此連接上開始 SSL 連繫交換。 |
| 從類別 java.lang.Object 繼承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| 建構子詳細資訊 |
|---|
protected SSLSocket()
protected SSLSocket(String host,
int port)
throws IOException,
UnknownHostException
host - 要連接的主機的名稱port - 伺服器的埠號號
IOException - 如果創建Socket時發生 I/O 錯誤
UnknownHostException - 如果主機是未知的
protected SSLSocket(InetAddress address,
int port)
throws IOException
address - 伺服器的主機port - 伺服器主機的埠號
IOException - 如果創建Socket時發生 I/O 錯誤。
protected SSLSocket(String host,
int port,
InetAddress clientAddress,
int clientPort)
throws IOException,
UnknownHostException
host - 要連接的主機的名稱port - 伺服器的埠號號clientAddress - 客戶機的主機clientPort - 客戶機的埠號號
IOException - 如果創建Socket時發生 I/O 錯誤
UnknownHostException - 如果主機是未知的
protected SSLSocket(InetAddress address,
int port,
InetAddress clientAddress,
int clientPort)
throws IOException
address - 伺服器主機port - 伺服器主機的埠號clientAddress - 客戶機的主機clientPort - 客戶機埠號號
IOException - 如果創建Socket時發生 I/O 錯誤| 方法詳細資訊 |
|---|
public abstract String[] getSupportedCipherSuites()
getEnabledCipherSuites(),
setEnabledCipherSuites(String [])public abstract String[] getEnabledCipherSuites()
即使密碼套件已經被啟用,也可能不會使用它。例如,同位體不支持它、密碼套件必需的證書(私鑰)不可用、啟用了匿名的密碼套件但需要進行驗證等。
getSupportedCipherSuites(),
setEnabledCipherSuites(String [])public abstract void setEnabledCipherSuites(String[] suites)
suites 參數中的每個密碼套件都必須已經由 getSupportedCipherSuites() 列出,否則此方法失敗。成功調用此方法之後,只有在 suites 參數中列出的套件才能被啟用以供連接使用。
有的密碼套件從不被連接使用,有關其原因的更多資訊,請參見 getEnabledCipherSuites()。
suites - 將被啟用的所有密碼套件的名稱
IllegalArgumentException - 如果由參數指定的一個或多個協議不受支持,或 protocols 參數為 null。getSupportedCipherSuites(),
getEnabledCipherSuites()public abstract String[] getSupportedProtocols()
public abstract String[] getEnabledProtocols()
setEnabledProtocols(String [])public abstract void setEnabledProtocols(String[] protocols)
協議必須已經由所支持的 getSupportedProtocols() 列出。成功調用此方法之後,只有在 protocols 參數中列出的協議才能被啟用以供使用。
protocols - 將被啟用的所有協議的名稱。
IllegalArgumentException - 如果由參數指定的一個或多個協議不受支持,或 protocols 參數為 null。getEnabledProtocols()public abstract SSLSession getSession()
此方法將發起初始連繫交換(如有必要),然後阻塞,直到連繫交換已經建立。
如果在初始連繫交換期間出現錯誤,則此方法返回一個無效的Session物件,該物件會報告一個無效的密碼套件 "SSL_NULL_WITH_NULL_NULL"。
SSLSessionpublic abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)
listener - 「連繫交換已完成」 (HandShake Completed) 事件偵聽器
IllegalArgumentException - 如果參數為 null。startHandshake(),
removeHandshakeCompletedListener(HandshakeCompletedListener)public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
listener - 「連繫交換已完成」事件偵聽器
IllegalArgumentException - 如果沒有註冊此偵聽器,或參數為 null。addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void startHandshake()
throws IOException
如果資料已經在連接上發送,則在此連繫交換期間資料繼續串流動。當連繫交換完成時,將使用事件來通知。 此方法對於連接上的初始連繫交換是同步的,它在協商的連繫交換完成時返回。一些協議可能不支持在一個已經存在的Socket上的多次連繫交換,並可能拋出 SSLException。
IOException - 如果發生網路級別的錯誤addHandshakeCompletedListener(HandshakeCompletedListener)public abstract void setUseClientMode(boolean mode)
此方法必須在發生任何連繫交換之前調用。一旦連繫交換開始,在此Socket的生存期內將不能再重置網要。
伺服器通常會驗證本身,客戶機則不要求這麼做。
mode - 如果Socket應該以「客戶機」網要開始它的連繫交換,此參數為 true
IllegalArgumentException - 如果初始連繫交換開始後試圖更改網要。getUseClientMode()public abstract boolean getUseClientMode()
setUseClientMode(boolean)public abstract void setNeedClientAuth(boolean need)
Socket的客戶機驗證設置是以下之一:
與 setWantClientAuth(boolean) 不同,如果設置了此選項並且客戶機選擇不提供關於本身的驗證資訊,協商將會停止且連接將被終止。
調用此方法會覆寫由此方法或 setWantClientAuth(boolean) 以前所做的任何設置。
need - 如果要求客戶機驗證設置,則為 true;如果不需要客戶機驗證設置,則為 false。getNeedClientAuth(),
setWantClientAuth(boolean),
getWantClientAuth(),
setUseClientMode(boolean)public abstract boolean getNeedClientAuth()
setNeedClientAuth(boolean),
setWantClientAuth(boolean),
getWantClientAuth(),
setUseClientMode(boolean)public abstract void setWantClientAuth(boolean want)
Socket的客戶機驗證設置是以下之一:
與 setNeedClientAuth(boolean) 不同,如果設置了此選項並且客戶機選擇不提供關於本身的驗證資訊,則協商將會繼續。
調用此方法會覆寫由此方法或 setNeedClientAuth(boolean) 以前所做的任何設置。
want - 如果請求進行客戶機驗證,則設置為 true;如果不需要客戶機驗證,則設置為 false。getWantClientAuth(),
setNeedClientAuth(boolean),
getNeedClientAuth(),
setUseClientMode(boolean)public abstract boolean getWantClientAuth()
setNeedClientAuth(boolean),
getNeedClientAuth(),
setWantClientAuth(boolean),
setUseClientMode(boolean)public abstract void setEnableSessionCreation(boolean flag)
flag - 如果為 true,則指示可以創建Session,這是預設設置;如果為 false,則指示必須恢復一個現有的SessiongetEnableSessionCreation()public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)public SSLParameters getSSLParameters()
public void setSSLParameters(SSLParameters params)
這意味著:
params.getCipherSuites() 不為 null,則使用該值調用 setEnabledCipherSuites()
params.getProtocols() 不為 null,則使用該值調用 setEnabledProtocols()
params.getNeedClientAuth() 或 params.getWantClientAuth() 返回 true,則分別調用 setNeedClientAuth(true) 和 setWantClientAuth(true);否則調用 setWantClientAuth(false)。
params - 參數
IllegalArgumentException - 如果 setEnabledCipherSuites() 或 setEnabledProtocols() 調用失敗
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。