Java Web服務

來源:互聯網
上載者:User

安全性對於使用 Web 服務交換業務資料至關重要。如果資料被第三方截取,或者欺騙性資料被當作有效資料接收,那麼會引起嚴重的財務或法律後果。為 Web 服務(任何形式的資料交換)設計和實現應用程式的安全處理始終是可行的,但是這種方法比較冒險,因為即使是一個小錯誤和疏漏都會導致嚴重的安全性漏洞。與其他更簡單的資料交換相比,SOAP 的優勢之一是它支援模組化擴充。自 SOAP 首次發布以來,安全性一直是擴充的主要關注點,促使了 WS-Security 和相關技術的標準化,允許針對每一個服務相應地配置安全性。

資訊交換對安全性的需求通常包含三個方面:

機密性:只有訊息的目標接收者有權訪問訊息內容。

完整性:接收到的訊息沒有發生任何修改。

真實性:可以對訊息的來源進行檢驗。

WS-Security 可以讓您輕鬆地滿足這三個方面的要求。在本文中,您將理解如何通過使用 Axis2 和 Rampart WS-Security 擴充實現這點。但是,我們首先將扼要概述一下公開密匙加密的原理 — 這是 WS-Security 的加密和簽名特性的主要基礎。

公開密匙加密

縱觀曆史,安全訊息交換一直以來都基於某種形式的共用秘密。這個秘密可能採用代碼的形式,交換的雙方使用經過商定的內容替換詞語或操作。或者可以是密碼的形式,通過某種演算法將某種文本轉換為其他文本。秘密甚至可以採用其他形式,比如對於可能訪問訊息的其他方未知的語言。共用秘密可以使訊息交換非常安全。但是,如果其他方發現了這個秘密,那麼訊息交換就會泄漏,並會為訊息交換方帶來潛在的破壞性結果。(比如,想一想二戰時期 Enigma 和 German 的軍事通訊)。

公開密匙加密是一種與其他加密有著本質區別的安全方法,它不需要共用的秘密。它所基於的理念是數學上的 “trap-door” 函數,它可以沿著一個方向輕鬆地進行計算,但是很難從相反的方向進行計算。比如,可以很容易找到兩個質數的乘積(如果使用電腦的話,甚至可以是非常大的質數),但是很難通過分析乘積來找到原始的兩個因數。如果圍繞某個函數的簡單方向構造一個密碼編譯演算法,那麼想要破解加密的任何人都需要從相反的方向來解密。和任何精心挑選的演算法一樣,破解加密的嘗試將非常困難,以至於無法在可以對訊息交換產生威脅的時間期限內完成(至少要等到有人開發了可用的量子電腦,或真正有效特異功能)。

使用了公開密匙加密後,希望接收已加密訊息的一方將建立一對密匙值。每個密匙值都可以單獨用於加密訊息,但是不能用於解密由它本身加密的訊息。相反,這對密匙值的另外一個密匙必須用於解密。只要密匙的所有者將其中的一個密匙保密,另一個密匙就可以公開給他人。任何訪問這個公開密匙的人都可以用它加密訊息,而只有密匙所有者才能夠對訊息解密。由於使用了不同的密匙進行加密和解密訊息,因此這種形式的加密被稱為不對稱式加密。

訊息簽名

當使用您的公開密匙對訊息進行加密,那麼只有您(即私人密匙的持有人)才能夠解密訊息。這可以確保機密性,滿足了安全訊息交換三個方面的其中一個方面。但是也可以使用您的私人 密匙來加密訊息,這樣做之後,任何具有您的公開 密匙的人都可以解密這個訊息。乍看上去這似乎沒什麼用 — 任何人都可以讀取的加密訊息有什麼用?— 但是這種方法可以很好地充當一種檢驗真實性的機制。據稱從您那裡收到已加密訊息的人可以使用您的公用密匙來解密訊息並與預期值進行比較。如果值匹配的話,那麼他們就知道是您 建立了這條訊息。

在實際中,訊息簽名的過程不僅僅是使用私人密匙加密訊息。首先,您需要使用某種方法為解密訊息確立預期值。這通常使用另一種經過變化的數學 trap-door 函數完成:這是一個散列(hash)函數,它易於計算但難以複製(即很難在不修改該訊息的散列值的情況下對訊息進行修改,或者很難找到具有相同散列值的另一個訊息作為提供的訊息)。使用這種散列函數,可以為希望簽名的訊息產生散列值(在安全討論中通常稱為一個摘要(digest)),然後使用私人密匙加密該摘要並使用訊息發送已加密的摘要值。任何接收此訊息的人都可以對該訊息使用相同的散列演算法,然後使用您的公開密匙解密附帶的已密碼編譯摘要,並比較兩者的值。如果值匹配的話,那麼接收方可以確定(在當前技術的範圍內,並認為您一直對您的私人密匙保密)該訊息是由您發送的。

在處理 XML 時,訊息簽名過程還涉及到另一個步驟。XML 訊息以文本形式表示,但是文本表示的某些方面被 XML 認為是無關的(比如元素上的屬性的順序,或元素開始和結束標記內使用的空白)。由於這個與文本表示有關的問題,因此 W3C(XML 規範的所有者)決定在計算摘要值之前,將 XML 訊息轉換為一個標準的文本形式。一些標準化演算法也得到定義,可以用於 XML 訊息。只要訊息交換的雙方都同意使用相同的演算法,那麼具體使用哪種演算法並不會產生什麼影響。

使用經過簽名的訊息摘要可以同時保證訊息完整性(因為對訊息的修改將會改變摘要值)和真實性(因為您的私人密匙被用於密碼編譯摘要)。由於使用公開密匙的加密可以確保訊息的私密性,因此訊息交換安全性的所有主要方面都可以通過使用一個公開-私人密匙對涵蓋。當然,對於一個密匙對,訊息交換中只有一方是安全的 — 但是如果交換的另外一方也具有自己的公開/私人密匙對,那麼就可以為訊息交換的雙方提供充分的安全性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.