XMPP使用TLS和auth登入
阿新 • • 發佈:2019-02-05
2. 116->110 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0">
3. 116->110 <stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls> //如果服務端開啟了TLS才會有此項
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> //驗證機制
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
4. 110->116 <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> //3中有starttls才會有4和5,TLS協商
5. 116->110 <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> //tls握手成功,server通知client可繼續執行,之後的資料均已加密(openfire預設是開啟TLS的,如果想看到後面的包,可以在openfire控制檯 -> Server -> Server Settings -> Security Settings -> Client Connection Settings裡的Custom -> TLS method選擇Not Available)。
說明:
a. DIGEST-MD5:如果帳號和密碼都在Client物件中提供了,這種機制是首選,即使沒有TLS加密也是安全的。
b. PLAIN:如果DIGEST-MD5無效,就使用此種機制。在沒有TLS加密時是不安全的。
c. ANONYMOUS:此種機制在沒有提供帳號和密碼時使用。伺服器將隨機產生臨時帳號和資源,提供限制的有效服務。
d. EXTERNAL:此種機制目前只對客戶端提供了證書和保密關鍵字(private key)而有效,伺服器試圖通過外部計算出客戶端。舉例來說,使用提供的證書或IP地址。
6(加密). 5成功的話,客戶端初始化一個新stream給服務端
110->116 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
to="192.168.20.116"
version="1.0" >
7(加密). 116->110 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0" >
<stream:features
xmlns:stream="http://etherx.jabber.org/streams">
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth" />
<register xmlns="http://jabber.org/features/iq-register" />
</stream:features>
8(加密). 110->116 <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AGNpY2lvZmZpY2UAMTIz</auth> //客戶端選擇一個驗證機制,這裡選的是PLAIN
9(加密). 116->110 <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> SASL握手成功
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0">
3. 116->110 <stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls> //如果服務端開啟了TLS才會有此項
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> //驗證機制
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
4. 110->116 <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> //3中有starttls才會有4和5,TLS協商
5. 116->110 <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> //tls握手成功,server通知client可繼續執行,之後的資料均已加密(openfire預設是開啟TLS的,如果想看到後面的包,可以在openfire控制檯 -> Server -> Server Settings -> Security Settings -> Client Connection Settings裡的Custom -> TLS method選擇Not Available)。
說明:
a. DIGEST-MD5:如果帳號和密碼都在Client物件中提供了,這種機制是首選,即使沒有TLS加密也是安全的。
b. PLAIN:如果DIGEST-MD5無效,就使用此種機制。在沒有TLS加密時是不安全的。
c. ANONYMOUS:此種機制在沒有提供帳號和密碼時使用。伺服器將隨機產生臨時帳號和資源,提供限制的有效服務。
d. EXTERNAL:此種機制目前只對客戶端提供了證書和保密關鍵字(private key)而有效,伺服器試圖通過外部計算出客戶端。舉例來說,使用提供的證書或IP地址。
6(加密). 5成功的話,客戶端初始化一個新stream給服務端
110->116 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
to="192.168.20.116"
version="1.0" >
7(加密). 116->110 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0" >
<stream:features
xmlns:stream="http://etherx.jabber.org/streams">
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth" />
<register xmlns="http://jabber.org/features/iq-register" />
</stream:features>
8(加密). 110->116 <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AGNpY2lvZmZpY2UAMTIz</auth> //客戶端選擇一個驗證機制,這裡選的是PLAIN
9(加密). 116->110 <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> SASL握手成功