2013-08-23 52 views
0

我正在使用rampart來保護web服務客戶端的通信。在城牆中傳輸級安全性和消息級安全性是不可能的?爲什麼?

遵循規範我定義了一個非對稱綁定斷言來提供消息級別的安全性,但我也希望通過SSL與webservice進行通信,因此我還定義了一個適當的傳輸綁定斷言。

結果是我的客戶端能夠通過SSL連接到web服務,但是在發送的消息中,沒有簽名 - 看起來好像不對稱綁定斷言被忽略。

實際上是這樣嗎?如果是這樣的話 - 這是一個在壘的錯誤,還是由WS安全策略規範禁止?(我還沒有找到任何這樣的信息)?

展望壁壘的MessageBuilder類源,我發現這一點:

if(rpd.isTransportBinding()) { 
    log.debug("Building transport binding"); 
    TransportBindingBuilder building = new TransportBindingBuilder(); 
    building.build(rmd); 
} else if(rpd.isSymmetricBinding()) { 
    log.debug("Building SymmetricBinding"); 
    SymmetricBindingBuilder builder = new SymmetricBindingBuilder(); 
    builder.build(rmd); 
} else { 
    AsymmetricBindingBuilder builder = new AsymmetricBindingBuilder(); 
    builder.build(rmd); 
} 

(整個代碼:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.rampart/rampart-core/1.6.2/org/apache/rampart/MessageBuilder.java

這又讓我想到,一個只能使用安全性的一個結合和如果有更多的,則根據上述代碼優先選擇一個。

回答

0

最後我想我已經解決了我的問題。

最初我想,客戶端需要在其策略中具有傳輸綁定斷言,以便通過SSL與web服務進行通信。我也認爲,沒有這樣的聲明ramp:sslConfig聲明將被忽略。

的事實是,你不需要傳輸綁定斷言,使其可能通過SSL通信時,你需要他們,使其需要。如果您的客戶端策略中沒有此類斷言,但端點需要SSL連接,則客戶端仍會嘗試建立該連接,如有必要,請查找在策略的ramp:sslConfig標記中配置的javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword變量,或以其他方式(通過JVM參數或編程)。

所以在我的情況下,解決方案是保持不對稱綁定斷言不變,只配置trustStore,而不添加任何傳輸綁定斷言。

仍然不清楚爲什麼不能讓你在一個策略中使用這兩種斷言。

0

我太同意了,如果我們可以使用多個綁定或者沒有綁定(但可能我們都錯過了),規範沒有說明這一點。但是您仍然可以對HTTPS端點使用非對稱綁定。

相關問題