SIP認證過程源自HTTP摘要式認證(HTTP Digest Authentication),它是一種基於質詢的安全機制:當服務器收到一個請求,將質詢請求的發起者,要求提供相應的身份信息。服務器發出的質詢中會包含生成的惟一字符串序列,僅可用於本次質詢。請求者和服務器共享同一密碼,請求者使用該密碼和臨時生成的字符串序列獲得一個響應值。當請求者再次發送包含這個響應值的請求時,服務器就能夠用來對請求進行認證。利用這種機制,密碼就能夠不用明文的方式傳送。算法
第一次讀是否感受都感受拗口?看圖說話最直接(我隨便畫的,能說明意思就好):安全
1)UAC首先發送一個不包含認證信息的SIP請求消息 (如INVITE或REGISTER)到UAS。
1.2)UAS向客戶端發回一個請求鑑別的SIP消息,這個消息表明了挑戰。對於 UAS這些值包含在 WWW-Authentcaite 頭字段中。
2)UAC根據消息中的質詢信息,從新生成一個請求消息發送給UAS。消息中包含鑑權信息,包括用戶名以及UAC對userId,password,nonce,key計算生成的加密結果response。
2.1)UAS將接收到的respones與本身根據相同算法計算獲得的結果比較,若一致,則返回200 0K消息表示認證經過。服務器
固然算法最終仍是認定的,在應用中能夠不徹底拘泥摘要認證的規範,只要作到摘要認證的這2步,能達到「挑戰」和「密碼不用明文傳送」的效果便可;加密