2015-08-28 73 views
1

BouncyCastle的org.bouncycastle.crypto.tls.TlsUtils有以下幾種方法BouncyCastle的tlsutils checkVersion

protected static void checkVersion(InputStream inputstream, TlsProtocolHandler tlsprotocolhandler) 
    throws IOException 
{ 
    int i = inputstream.read(); 
    int j = inputstream.read(); 
    if (i != 3 || j != 1) 
    { 
     tlsprotocolhandler.failWithError((short)2, (short)70); 
    } 
} 

protected static void checkVersion(byte abyte0[], TlsProtocolHandler tlsprotocolhandler) 
    throws IOException 
{ 
    if (abyte0[0] != 3 || abyte0[1] != 1) 
    { 
     tlsprotocolhandler.failWithError((short)2, (short)70); 
    } 
} 

什麼是3 & 1正在這裏檢查?

回答

2

這是一件壞事叫「幻數」從InputStream.read()的Javadoc :-) 摘錄一個很好的例子:

讀取數據從輸入流的下一個字節。值字節爲 ,返回範圍爲0到255之間的整數。如果由於已到達流的末尾而沒有可用字節 ,則返回值-1爲 。

這意味着ij是從流中讀取的版本號。他們只需要版本3和版本1。另外failWithError方法獲得魔法數字。該TlsProtocolHandler有他們的常量,我不知道爲什麼作者沒有使用這些

2: AL_fatal 
70: AP_protocol_version 

source

看代碼checkVersion叫,而握手階段(ServerHello)。在這裏檢查協議版本。請參閱此wikipedia article的版本章節以查找版本號。主要版本3,次要版本1是TLS 1.0

+0

什麼是3&1的版本號? – user93353

+0

好的,那是缺少的。我已經添加了更多信息。 – Kai

+0

謝謝。你知道這是否意味着充氣城堡不支持TLS 1.1和TLS 1.2? – user93353