針對WS-Notification使用WS-Security 配置JAX-WS 應用程式

CloudSpace發表於2009-07-30

Emily Jiang, 軟體工程師, IBM

引言

WS-Notification 通過使用一個基於主題的釋出/訂閱訊息傳遞模式為 Web 服務通訊提供了一個開放的標準。正如 WebSphere Application Server V7 中的 WS-Notification:第 1 部分中所述,IBM WebSphere Application Server V7.0 將基於 Java API for XML-based Web Services (JAX-WS) 實施 WS-Notification(即 Version 7.0 WS-Notification)。如果建立 Version 7.0 WS-Notification 服務,則可以使用諸如 WS-ReliableMessaging 或 WS-Security 之類的策略集配置它。本文重點講述如何在安全的 Version 7.0 WebSphere Application Server 中組合 WS-Notification 服務和 WS-Security 策略集。

WebSphere Application Server“策略集”彙集了有關如何定義 Web 服務的斷言。您可以使用策略集簡化配置,並將傳輸與以下相關領域的訊息級配置設定結合在一起:WS-Addressing、WS-ReliableMessaging、WS-Security、HTTP Transport、JMS Transport 和 SSL Transport。策略集只適用於 JAX-WS 應用程式,不適用於 Java API for XML-based RPC (JAX-RPC) 應用程式。

WS-Security 提供了端到端的訊息安全性,這可確保在傳輸期間不會對這些訊息實施操作,同時還提供了機密性。WebSphere Application Server V7.0 提供了大量預設的 WS-Security 策略集。在本文中,我們將選擇 Username WSSecurity default 策略集來保護 WS-Notification 應用程式的安全。此策略集包含基本身份驗證功能和訊息級安全性。

在生產環境中,建議啟用 WebSphere Application Server 安全性以防止非授權使用者訪問您的系統。在安裝 WebSphere Application Server V7.0 時,除非選擇其他設定,否則預設情況下將啟用管理安全性。

以下過程大致介紹瞭如何先設定安全的 WebSphere Application Server,然後介紹配置 WS-Notification 服務和其他應用程式,使之帶有 WS-Security 策略集。該過程既適用於單個伺服器又適用於叢集拓撲。本文中使用的拓撲是獨立的應用伺服器。

該過程如下所示:

  1. 配置 WebSphere Application Server V7.0 的管理安全性
  2. 在 WebSphere Application Server V7.0 中建立 Version 7.0 WS-Notification 服務和服務點
  3. 部署 JAX-WS 應用程式:
    • WS-Notification 生產者和訂閱者
    • 基於 JAX-WS 的 WS-Notification 使用者 Web 服務。
  4. [可選步驟] 通過將 HTTPS 上的 SOAP 指定為您的 WS-Notification 服務點繫結,在客戶端和服務提供者之間使用 HTTPS 傳輸。
  5. 將策略集 Username WSSecurity default 和適當的繫結應用於 WS-Notification 服務點和服務客戶端,以及您的 JAX-WS 生產者、訂閱者和使用者應用程式。

本文的其餘部分將詳述上述步驟。本文的第一部分介紹如何設定系統和安裝必需的應用程式。第二部分詳述如何將 WS-Notification 應用程式配置為帶有所選的策略集和繫結。最後是一個演練示例。

先決條件

本文假定您將建立一個單一 WebSphere Application Server,並使用單一通知代理支援個別生產者和使用者 WS-Notification 應用程式相互之間的通訊。

要建立您自己的包含 JAX-WS Web 服務客戶端和相關構件的 WS-Notification 應用程式,請按照本系列文章的第 1 部分中的說明操作,或者參閱 IBM 資訊中心的主題 Using JAX-WS clients and Web services with new Version 7.0 WS-Notification service points

配置 WebSphere Application Server 安全性

可以使用兩種方法啟用管理安全性:在概要建立期間,或者在概要建立後。

在啟用安全性的情況下建立應用伺服器概要

您可以在 WebSphere Application Server 安裝期間建立應用伺服器概要,並請求針對該概要啟用管理安全性。在概要建立期間,將顯示如圖 1 中所示的 Enable Administrative Security 螢幕,並在預設情況下選中 Enable administrative security 選項。如果將此作為預設項,則必須提供管理使用者名稱稱(本文中使用 SecureWsn)和密碼(本文中使用 SecureW5n)。此使用者名稱是在聯合儲存庫中建立的,它是在建立概要過程中啟用管理安全性時的預設使用者登錄檔。WebSphere Application Server 支援以下型別的使用者登錄檔:

  • 聯合儲存庫
  • 本地作業系統登錄檔
  • 單獨的輕量級目錄訪問協議 (LDAP) 登錄檔
  • 單獨的自定義登錄檔

本文選擇聯合儲存庫作為使用者登錄檔。本文的其餘部分不受您所選擇的使用者登錄檔影響。請參考 IBM 資訊中心的 Selecting a registry or repository 以瞭解有關其他登錄檔的詳細資訊。


圖 1. 安裝期間的 Administrative Security 視窗
Administrative Security 視窗的螢幕截圖

安裝後,您還可以建立一個應用伺服器概要。在概要建立期間,您可以啟用管理安全性並指定您的使用者名稱(例如 SecureWsn)和密碼(例如 SecureW5n),如圖 2 中所示。


圖 2. 建立概要時的 Administrative Security
建立概要時的 Administrative Security 螢幕截圖

建立概要後啟用安全性

如果您建立了一個禁用安全性的概要,請按照下面的步驟啟用管理安全性。

  1. 通過選擇 Security => Global security 導航到 Global security 視窗。將顯示圖 3 中的視窗。

    圖 3. Global security
    Global security 視窗的螢幕截圖

  2. 選擇 Security Configuration Wizard,然後使用 Federated repositories配置安全性。

    • 步驟 1 - 指定保護範圍(如
  3. 圖 4 中所示)。
    本文詳述的方案中沒有“應用程式安全性”。在下面的視窗中,取消選擇 Enable application security,然後單擊 Next

    圖 4. 配置安全性 - 步驟 1
    步驟 1 的螢幕截圖

  4. 步驟 2 - 選擇使用者儲存庫
  5. 圖 5)。
    選擇 Federated repositories,然後單擊 Next

    圖 5. 配置安全性 - 步驟 2
    步驟 2 的螢幕截圖

  6. 步驟 3 - 配置聯合儲存庫
  7. 圖 6)。
    輸入您的使用者名稱(例如 SecureWsn)和密碼(例如 SecureW5n)。該使用者名稱和密碼將在您登入到管理控制檯時使用。單擊 Next

    圖 6. 配置安全性 - 步驟 3
    步驟 3 的螢幕截圖

  8. 步驟 4 - 總結。
    單擊 Finish,然後儲存更改。重新啟動應用伺服器。您會注意到,現在登入到該管理控制檯時需要使用者名稱和密碼。輸入您的使用者名稱(例如 SecureWsn)和密碼(例如 SecureW5n)登入到 WebSphere Application Server。





回頁首


建立 WSN 服務和必要的資源

要與新的基於 JAX-WS 的 WS-Notification Web 服務互動,您需要配置該應用伺服器以公開一個或多個 WS-Notification 服務點。要做到這一點,請下載本文中包括的示例指令碼 WAS7_WSN_JAXWS_Part2_Setup.py。執行這些配置步驟或使用管理控制檯均可得到相同的結果,下面將描述相關操作。

建立一個服務整合匯流排並將該伺服器新增為匯流排成員

本部分將先建立一個匯流排,然後將該伺服器作為匯流排成員新增到該匯流排中。如果您有一個匯流排,且啟用了匯流排安全性和配置了匯流排成員,則可以跳過此部分。

建立服務整合匯流排

服務整合匯流排是 WS-Notification 中的一種必需資源。前面已經提及,WS-Notification 支援釋出/訂閱訊息模式。WS-Notification 應用程式釋出的通知將被插入到服務整合匯流排中,連線到該匯流排的其他任何應用程式都可以修改、重新路由或使用這些通知。同樣,由服務整合匯流排客戶端(如 JMS)傳送的釋出也可被 WS-Notification 使用者接收。接下來,我們將建立一個匯流排:

  1. 通過選擇 Service integration => Buses 導航到 WebSphere Application Server 例項中的匯流排管理皮膚。

  2. 單擊 New 按鈕建立一個新匯流排,這將顯示圖 7 中所示的視窗。輸入新匯流排的匯流排名稱,並讓 Bus security 保持選中狀態,如圖 7 中所示。本文中的匯流排名稱是 WSNBus

    圖 7. 建立新的服務整合匯流排
    建立新的服務整合匯流排的螢幕截圖

  3. 接受後續步驟中的所有預設設定,然後在步驟 2 中單擊 Finish

新建立的匯流排 WSNBus 已啟用了安全性。保護服務整合匯流排安全可為該匯流排提供一個授權策略,以防止未授權使用者獲得訪問權。換句話說,只有經過授權的使用者才可以通過訪問該匯流排來放置或檢索訊息。因此,要讓 WSN 服務訪問該匯流排,必須提供必要的憑據(如使用者名稱和密碼)。

將伺服器新增為匯流排成員

您需要將應用伺服器新增為匯流排成員,這樣您才可以建立訊息引擎,並使用它管理訊息傳遞資源。您可以配置該訊息引擎以使用檔案儲存或資料儲存。本文中我們使用檔案儲存。

  1. 要將該伺服器新增為匯流排成員,請選擇 Service integration => Buses => your_bus_name => [Topology] bus members,其中 your_bus_name 是您剛建立的匯流排名稱(例如 WSNBus)。單擊 Add 按鈕可以顯示圖 8 中所示的視窗:

    圖 8. 新增新的匯流排成員
    新增新的匯流排成員的螢幕截圖

  2. 接受後續步驟中的所有預設設定,然後單擊 Finish

建立 Version 7.0 WS-Notification 服務和服務點

如果已經使用動態主題名稱空間建立了 Version 7.0 WS-Notification 服務和服務點,則可以跳過此部分。不過,建議按照以下說明建立獨立的 WS-Notification 服務:

  1. 在 WebSphere Application Server 例項的管理皮膚中,通過選擇 Service integration => WS-Notification => Services 導航到 WS-Notification services

  2. 單擊 New 建立一個新的 WS-Notification 服務。下列步驟將向您介紹如何建立 WS-Notification 服務。

  3. 步驟 5:建立永久主題名稱空間。
    接受預設設定併為 Create a new instance 選擇 No,如圖 12 中所示,這意味首 WS-Notification 服務將使用動態主題空間。如果您的 WS-Notification 服務將與 JMS 應用程式互動或者要將限制應用到主題結構,則需要永久主題空間。在本文中,我們使用動態主題空間。請參考 WebSphere Application Server v7.0 資訊中心,瞭解有關動態主題空間與永久主題空間之間差別的詳細資訊。單擊 Next

    圖 12. 新的 WS-Notification 服務 - 步驟 5
    新服務的步驟 5 的螢幕截圖

  4. 步驟 6:總結。
    在總結頁上單擊 Finish,這將建立 WS-Notification 服務和服務點。

  5. 重新啟動 Application Server
    通過重新啟動應用伺服器來啟動 WS-Notification 服務點。通過選擇 Applications => Application Types => WebSphere enterprise applications 導航到 Enterprise Application 頁,這時您會看到有一個新的 WS-Notification 服務應用程式列出,即 WSN_WSNSecureService_WSNSecureServicePt。建立 WS-Notification 服務後,此應用程式將為以下三個 WS-Notification 服務角色中的每個角色公開 WS-Notification Web 服務介面:

    • 通知代理
    • 訂閱管理器
    • 釋出者註冊管理器





回頁首


部署 WSN 釋出者、訂閱者和使用者

正如本 WS-Notification 系列的第 1 部分中所述,要使用 WS-Notification 服務,一般需要部署三個應用程式:WSN 釋出者、WSN 訂閱者和 WSN 使用者。(注意,在某些用例中,應用程式設計者可能會選擇將訂閱者和使用者角色合併到單個應用程式中。)在本文中,我們使用了以下三個應用程式:

  • WSNPublisher.ear——釋出 WS-Notification 訊息
  • WSNConsumer.ear——使用由 WSN 釋出者釋出的 WS-Notification 訊息
  • WSNSubscriber.ear——在 WS-Notification 服務通過 WS-Notification 服務點訂閱特定主題

您可以在本文中下載上述每個應用程式。使用管理控制檯導航到 Applications => New Application => New Enterprise Application 部署上述三種應用程式。圖 13 顯示了您建立 WS-Notification 服務並安裝上述 WS-Notification 應用程式之後的控制檯。


圖 13. 安裝了 WS-Notification 應用程式
安裝的應用程式的螢幕顯示




回頁首


保護傳輸 [可選]

此步驟是可選的。這說明您可以將傳輸級安全性與訊息級安全性一起使用。傳輸級 安全性加密客戶端與服務之間的完整通訊(在單個網路躍點上),而訊息級安全性僅加密 SOAP 訊息。傳輸級安全性提供了點對點安全性,由於我們需要端到端的安全性,因此 Web 服務存在一些不足之處,其中兩個端點之間可能會存在多箇中間節點。訊息級 安全性提供了端到端的訊息保護。在保護 WS-Notification 應用程式時,通過排除此部分即可只使用訊息級 WS-Security。本文演示同時使用傳輸級和訊息級安全性來確保 WS-Notification 應用程式的安全。

預設情況下,服務點使用的 HTTP 上的 SOAP 端點同時接受 HTTP 和 HTTPS 請求。由於所有資訊都是以明文形式傳送,因此 HTTP 本身是一個不安全協議。要保證 HTTP 安全,您可以應用傳輸級安全性,以確保通過基礎傳輸的 Web 服務訊息的安全。

可通過以下方式選擇 HTTPS:將您的 WS-Notification 服務的每個 WS-Notification 服務點上的端點 URL 字首更改為 https://,然後修改埠以引用由該伺服器使用的 HTTPS 埠(預設埠為 9443)。要實現這一點,請按照下面的說明操作:

  1. 通過選擇 Applications => Application Types => WebSphere enterprise applications = > application name => [Web Services Properties] Provide HTTP endpoint URL information 導航到 Provide HTTP endpoint URL information。application name 就是您的 Web 服務提供者,如 WSNConsumerWSN_WSNSecureService_WSNSecureServicePt

  2. 通過單擊所有核取方塊選中該應用程式中的所有模組。

  3. 指定 HTTPS 協議的端點 URL 字首,如圖 14 中所示(其中有意隱藏了計算機主機名)。從 Select default HTTP URL prefix 的預定義列表中選擇預設的 HTTPS 字首 ( https:// your_host_name :9443 ),其中 your_host_name 是您的 WebSphere Application Server 安裝計算機的主機名稱。單擊 Apply 將該 HTTPS URL 字首應用於所選模組。

    圖 14. 提供 HTTP 端點 URL 資訊
    HTTP 端點 URL 資訊的螢幕截圖

對 WS-Notification 服務點應用程式 WSN_WSNSecureService_WSNSecureServicePt 和您的 WSNConsumer 應用程式重複上述操作,以配置您的服務提供者使用安全傳輸 HTTPS。

儲存更改後,通過導航到 Enterprise Applications => WSN_WSNSecureService_WSNSecureServicePt => [Web Services properties] Publish WSDL files 釋出 WS-Notification 服務點的 WSDL 檔案 (NotificationBroker.wsdl、PublisherRegistrationManager.wsdlSubscriptionManager.wsdl)。您會注意到這三個 Web 服務埠的端點 URL 均以 https://your_host_name:9443 開頭。請注意,該配置僅將該端點公開為 HTTPS,您仍可以訪問非安全埠。如果您想強制該客戶端僅使用 HTTPS,則需要在 WS-Notification 服務點和 WSNConsumer 上附加 HTTPS 策略型別,這超出了本文的討論範圍。





回頁首


將 WS-Notification 應用程式配置為帶有 WS-Security 策略集和繫結

在建立 WS-Notification 服務後,可將適當的策略集和繫結附加到 WS-Notification 應用程式中。本文中使用的策略集是 Username WSSecurity default,該策略集帶有基本的身份驗證和訊息級安全性。策略集繫結包含特定於平臺的資訊,如金鑰儲存庫、身份驗證或永久資訊。無論何時將 WS-Security 策略集附加到應用程式,您都需要附加相應的繫結檔案。以下步驟將詳述如何為策略集 Username WSSecurity default 建立繫結檔案,然後如何將該策略集和繫結附加到 WS-Notification 應用程式。

將策略集和繫結附加到 JAX-WS 應用程式

對於 JAX-WS 應用程式,您可以附加 WS-Security 策略集和繫結來保護訊息的安全。

如上所述,您可以將繫結與策略集關聯,因為該繫結包含有關金鑰儲存的資訊、用於數字簽名和加密的金鑰,以及身份驗證和永久資訊。在 WebSphere Application Server V7.0 中,有兩種型別的繫結:應用程式繫結和通用繫結。通用繫結是 WebSphere Application Server V7.0 的一項新功能。應用程式繫結 是特定應用程式的專用繫結,而通用繫結 可以由多個應用程式重複使用。本文使用通用繫結以供不同的應用程式重複使用該繫結。

共有兩種型別的通用繫結:

  • 通用提供者策略集繫結——適用於 Web 服務提供商
  • 通用客戶端策略集繫結——適用於 Web 服務客戶端

建立策略集的通用客戶端/提供者繫結

建立通用繫結的一個簡便方法是複製現有的客戶端/提供者繫結,然後編輯新建立的繫結。本文使用預設通用繫結 Sample clientSample provider 僅作為模板演示。請注意,由於該示例繫結使用示例金鑰和金鑰儲存,因此建議不要將示例通用繫結用於生產中,並且必須更改金鑰和金鑰儲存。

建立通用客戶端繫結的操作方法:

  1. 複製客戶端示例繫結

    通過選擇 Services => Policy sets => General client policy set bindings 導航到 General client policy set bindings。通過單擊 New… 可以建立新的繫結。選擇 Client sample 繫結,然後單擊 copy…。在 copy of Client sample 視窗中,輸入新建立繫結的名稱,在本文中稱為 WSNClientGeneralBinding。單擊 OK,然後儲存該更改。

  2. 編輯新建立的繫結
    新建立的客戶端繫結(例如,WSNClientGeneralBinding)需要包含使用者名稱和密碼詳細資訊,以便關聯的應用程式可以使用此資訊來訪問匯流排和主題空間。

    通過訪問 Services => Policy Sets => General client policy set binding => client_binding_name => WS-Security =>Authentication and protection => gen-signunametoken => [Additional bindings] Callback handler 導航到“Callback Handler”皮膚。client_binding_name 是您剛建立的繫結 WSNClientGeneralBinding。輸入您的管理使用者名稱(例如 SecureWsn)和密碼(例如 SecureW5n),如圖 15 中所示。單擊 OK,然後儲存您的更改。

    圖 15. 通用客戶端策略集和繫結——Callback handler
    顯示基本身份驗證的螢幕截圖

建立通用提供者繫結的操作方法:

  • 複製提供者示例繫結。
    與複製客戶端示例繫結類似,通過選擇 Services => Policy sets => General provider policy set bindings 複製提供者示例繫結。在本文中,我們將新建立的提供者繫結稱為 WSNProviderGeneralBinding

配置新建立的繫結的操作方法:

WSNProviderGeneralBinding 中,您需要通過配置呼叫方設定指定身份驗證方法,這需要指定用於身份驗證的令牌和訊息部分。

  1. 選擇 Services => Policy Sets => General provider policy set bindings => provider_binding_name => WS-Security => Callerprovider_binding_name 是您剛建立的繫結 WSNProviderGeneralBinding

  2. 單擊 New 建立一個呼叫方。

  3. Name 欄位中輸入呼叫方名稱,圖 16 中進行了詳細說明。本文使用 wsnCaller 作為呼叫方名稱。在 Caller identity local part 欄位中,輸入使用者名稱令牌:
    http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken
    該呼叫方意味著將選擇此令牌來建立 WebSphere 安全上下文。

  4. 單擊 OK,然後儲存更改。

    圖 16. 通用提供者策略集和繫結——呼叫方
    呼叫方名稱的螢幕截圖

通過管理控制檯附加策略集和繫結

如前所述,在您將策略集附加到應用程式時,還需要附加適當的繫結以便指定該配置。以下部分將詳述如何附加策略集 Username WSSecurity default 和通用客戶端/提供者繫結。

將 Username WSSecurity 預設策略集和 WSNClientGeneralBinding 繫結附加到 JAX-WS 服務客戶端的操作步驟:

  1. 要將該策略集和繫結附加到 WSNPublisher,請選擇 Applications =>Application Types => WebSphere enterprise applications => WSNPublisher => [Web Service properties] Service client policy sets and bindings

  2. 通過單擊最上面的核取方塊然後選擇 Attach Client Policy Set,在該應用程式範圍內附加 Username WSSecurity default 策略集。在策略集的下拉選單中,選擇 Username WSSecurity default,如圖 17 所示。


    圖 17. 服務客戶端策略集和繫結——1
    顯示如何附加客戶端策略集的螢幕截圖

  3. 接下來,我們將附加該 WSNClientGeneralBinding 繫結。通過單擊最上面的核取方塊選中資源,然後選擇 Assign Binding。從繫結列表(如 WSNClientGeneralBinding)中選擇您的客戶端繫結。

  4. 儲存配置。
  5. 圖 18 顯示了策略集和繫結配置。

    圖 18. 服務客戶端策略集和繫結——2
    顯示策略集和繫結配置的螢幕截圖

  6. WSNConsumerWSNSubscriber 執行相同的操作。

將策略集“Username WSSecurity default”和提供者繫結附加到 JAX-WS 服務提供者的操作步驟:

在本文中,有兩個 JAX-WS 服務提供者:WSNConsumerWSN_WSNSecureService_WSNSecureServicePt

  1. 選擇 Applications => Application Types => WebSphere enterprise applications => application_name => Service provider policy sets and bindings,其中application_name 是 WSNConsumer 或 WSN 服務點應用程式,例如 WSN_WSNSecureService_WSNSecureServicePt

  2. 使用前面部分中的說明將 Username WSSecurity default 策略集和 WSNProviderGeneralBinding 提供者繫結附加到這兩個應用程式中。圖 19 顯示了策略集和繫結附件。

    圖 19. 服務提供者策略集和繫結
    顯示策略集和繫結附件的螢幕截圖

將 Username WSSecurity 預設策略集和客戶端繫結附加到 WS-Notification 服務客戶端的操作步驟:

  1. 通過選擇 Service integration => WS-Notification => Service => WSN_client_name => [Additional Properties] Outbound request policy set and binding 導航到 WS-Notification 出站請求策略集和繫結螢幕,其中 WSN_client_name 是本文中的 WSNSecureService

  2. Username WSSecurity default 策略集和客戶端繫結(例如“WSNClientGeneralBinding”)附加到 WSNSecureService WSN 客戶端。

對於 WS-Notification 服務客戶端,該策略集附件在端點(埠)或操作級不受支援。因此,不可選擇端點或操作,並且顯示為繼承附加到該服務客戶端的任何策略集或繫結。

您還可以通過 Service clients 頁將該策略集和繫結附加到 WS-Notification 出站請求。方法是選擇 Service => Service clients,然後選擇 OutboundNotificationServiceOutboundRemotePublisherService 服務來附加 Username WSSecurity default 策略集和 WSNClientGeneralBinding 客戶端繫結。





回頁首


示例方案:訂閱、釋出和使用

本文的最後一部分介紹了一個示例方案,在此場景中,我們使用示例釋出者、使用者和訂閱者,在安全的 WebSphere Application Server v7.0 中釋出和使用經過加密的通知訊息。

準備系統

如果您還沒有如本文前面描述的那樣配置系統,則可以使用下面的說明和指令碼自動準備您的系統。如果已按照前面部分中的說明配置了您的系統,則只需要執行第 8 和第 9 步:

  1. 安裝具有已啟用全域性安全性的單個伺服器概要的 WebSphere Application Server V7(通過接受所有預設設定)。指定 SecureWsn 作為使用者名稱,SecureW5n 作為密碼。重新啟動您的應用伺服器。

  2. 解壓下載檔案,並通過發出以下命令建立 Version 7.0 WS-Notification 服務執行該示例 Version 7.0 WS-Notification 配置指令碼:

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_Setup.py WSNBus 
    WSNSecureService WSNSecureServicePt 
    

    由於已經啟用了管理安全性,因此,在執行 wsadmin 命令時,將提示您提供使用者身份和密碼。在圖 20 所示的視窗中輸入您的管理使用者 ID (SecureWsn) 和密碼 (SecureW5n)。

    圖 20. wsadmin 命令執行登入視窗
    wsadmin 登入的螢幕截圖

    另外,您還可以通過在命令列中提供您的使用者名稱和密碼執行 wsadmin 命令,下面將詳述此情形。不過,我們建議您不要在生產環境中使用此方法,因為這會洩露您的使用者名稱和密碼:

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_Setup.py WSNBus 
    WSNSecureService WSNSecureServicePt -username SecureWsn -password SecureW5n
    

    將這一方法用於下面的 wsadmin 命令執行中。

  3. 通過執行下面的命令將三個 EAR 檔案(也包括在下載檔案中)安裝到應用伺服器中。這些檔案包含示例釋出者、使用者和訂閱者元件,幷包括允許組合和呼叫 WS-Notification 請求的 HTTP Servlet。

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_Install_Apps.py 
    WSNPublisher.ear WSNSubscriber.ear WSNConsumer.ear 
    

  4. 接下來,我們將 WS-Security 策略集 (Username WSSecurity default) 和繫結附加到 JAX-WS 應用程式中首先,您需要建立通用繫結:

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_Create_Bindings.py 
    WSNClientGeneralBinding WSNProviderGeneralBinding
    

    WSNClientGeneralBinding 包含使用者名稱 (SecureWsn) 和密碼 (SecureW5n)。如果您選擇了其他使用者名稱和密碼,請參考 Create a general client/provider binding for a policy set 部分更新該繫結中的使用者名稱和密碼,以便與步驟 1 中的使用者名稱和密碼設定匹配。

  5. 將策略集和繫結附加到 JAX-WS WS-Notification 應用程式。

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_AttachPolicySetBinding.py 
    WSNPublisher usernamewssecuritydefault WSNClientGeneralBinding WebService:/ client 
    WSNSubscriber usernamewssecuritydefault WSNClientGeneralBinding WebService:/ client 
    WSNConsumer usernamewssecuritydefault WSNClientGeneralBinding WebService:/ client 
    WSNConsumer usernamewssecuritydefault 
    WSNProviderGeneralBinding WebService:/ application 
    WSN_WSNSecureService_WSNSecureServicePt usernamewssecuritydefault 
    WSNProviderGeneralBinding WebService:/ application 
    

  6. 將策略集和繫結附加到 WS-Notification 客戶端。

    \bin\wsadmin -f WAS7_WSN_JAXWS_Part2_AttachPolicySetBindingWSNOutbound.py 
    WSNBus WSNSecureService usernamewssecuritydefault 
    WSNClientGeneralBinding WebService:/
    

  7. [可選步驟] 按照保護傳輸 [可選] 中的詳細說明配置安全傳輸協議的使用

  8. 重新啟動應用伺服器。

  9. 開啟一個 Web 瀏覽器並建立三個瀏覽器選項卡(或者開啟三個 Web 瀏覽器),並載入以下 URL(用於 WSN 訂閱者、釋出者和使用者的 HTTPS URL):

    https://localhost:9443/WSNSubscriberWeb/SubscriberServlet
    https://localhost:9443/WSNPublisherWeb/PublisherServlet
    https://localhost:9443/WSNConsumerWeb/ConsumerServlet 
    

    如果您要使用不安全的傳輸協議,則用於 WSN 訂閱者、釋出者和使用者的 HTTP URL 將如下所示:

    http://localhost:9080/WSNSubscriberWeb/SubscriberServlet
    http://localhost:9080/WSNPublisherWeb/PublisherServlet
    http://localhost:9080/WSNConsumerWeb/ConsumerServlet 
    

這些網頁顯示用於呼叫 WS-Notification 功能的輸入欄位和按鈕,以及任何請求的結果和所釋出及使用的訊息。

進行訂閱

在 WSN 訂閱者的 Web 瀏覽器中,輸入 Broker port addressBroker service name 和 Consumer URI 的值,然後單擊 Subscribe,如圖 21 中所示。

本文中代理埠地址和使用者 URI 均使用 HTTPS 協議。

WS-Notification 代理的 WSDL 包含代理埠地址和代理服務名稱。您可以通過管理控制檯上的 Publish WSDL files 檢視該 WSDL,也可以通過使用 ?wsdl 查詢檢視,例如:https://localhost:9443/WSNSecureServiceWSNSecureServicePtNB/Service?wsdl


圖 21. WS-Notification 訂閱者
訂閱者的螢幕截圖

要驗證是否加密了 SOAP 訊息(訊息級安全性的效果,與是否使用傳輸級安全性無關),您需要開啟 Web 服務訊息傳輸跟蹤 (com.ibm.ws.websvcs.trace.MessageTrace=all) 來檢視該 SOAP 訊息。

在 trace.log 中,您可以通過搜尋字串“:Envelop”找到 SOAP 訊息。清單 1 中顯示了訂閱請求 SOAP 訊息。由於該訊息正文太大,因此本文僅列出了部分 SOAP 訊息,“”表示被刪除的加密字元,用粗體顯示。由於使用 WS-Security 策略集,因此加密了該訊息,使之顯示一些隨機加密字元,而不顯示重要訊息(如主題名稱等)。


清單 1. 訂閱請求 SOAP 訊息


 
2009-03-10T21:47:20.241Z MIICQzCCAaygAw… QdZLf+KjrUg … 3aC/… p4Pz6… https://localhost:9443/WSNSecureServiceWSNSecureServicePtNB/Service urn:uuid:B3349624E620E4ED2D1236721647734 http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest
JznKewK…

為了進行對比,以下是未使用訊息級安全性的訂閱訊息。SOAP 訊息中顯示了用粗體顯示的主題名稱、使用者 URL 等。


清單 2. 未使用訊息級安全性的訂閱訊息

				

 
https://localhost:9443/WSNSecureServiceWSNSecureServicePtNB/Service urn:uuid:81DC46116B457C9CD91236876531161 http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest
"https://localhost:9443/WSNConsumerWeb/PushNotificationConsumer"
test:dW P1Y





回頁首


釋出訊息

在 WSNPublisher 的瀏覽器選項卡中,輸入訂閱時使用的 Broker port addressBroker service name的值,如圖 22 所示。輸入您將在 Message payload 欄位中釋出的訊息正文,然後單擊 Publish。此步驟將釋出訊息有效負載。檢查 trace.log 中由 WSNPublisher 釋出的 SOAP 訊息,該訊息應該是加密的。


圖 22. WS-Notification 釋出者
釋出者的螢幕截圖




回頁首


使用訊息

導航到 WSN 使用者選項卡,以驗證該使用者是否收到了您剛釋出的訊息。您將需要重新整理瀏覽器,以確保顯示最新的使用者狀態,如圖 23 所示:


圖 23. WS-Notification 使用者
使用者的螢幕截圖


檢查 trace.log 檔案中使用者接收到的 SOAP 訊息,該訊息應該是加密的。該使用者然後解密了該訊息。本文中實施了 WSNConsumer,目的就是為了在 SystemOut.log 中顯示該訊息內容,如清單 3 中所示:


清單 3. SystemOut.log 中顯示的訊息內容

				
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   The consumer has received 1 message(s).
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   Details for message 1:
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Topic dialect: http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Topic expression, including the namespace prefix: wsntopprefix:dW
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Number of namespace mappings in the topic expression: 2
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   ---- Prefix 'b2' maps to namespace 'http://docs.oasis-open.org/wsn/b-2'
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   ---- Prefix 'wsntopprefix' maps to namespace 'http://wsn.jaxws.dw/topicns01'
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Topic expression, without the prefix: dW
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Message payload: Secure WS-Notification test
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Payload namespace: http://wsn.jaxws.dw.ibm.com
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Payload namespace prefix: dW
[02/03/09 23:32:12:625 GMT] 00000024 SystemOut 
O   -- Payload element name: dWMsg
[02/03/09 23:32:12:641 GMT] 00000024 SystemOut 
O   -- Subscription ID: sub_352c51ee09165308f5817fdc_11fc987b201_5

祝賀您!我們現在已經進行了整個方案的演練。

現在可以通過將您的 WS-Notification 服務與 WS-ReliableMessaging 策略集關聯來提高 WS-Notification 訊息的可靠性,本系列的後續部分中將討論該內容。可以在叢集環境中將您的 WS-Notification 服務點配置為帶有永久主題空間,本系列的後續部分將介紹該內容。





回頁首


總結

本文解釋瞭如何在安全的 WebSphere Application Server V7.0 中配置帶有 WS-Security 的 WS-Notification 的 JAX-WS 新實現。

首先,文章詳述瞭如何配置 WebSphere Application Server 的管理安全性。然後列出了建立和配置 JAX-WS-based WS-Notification 服務的關鍵步驟。接著,說明了如何建立相應的繫結,以及將策略集和繫結與 WS-Notification 應用程式關聯。最後,通過一個演練方案介紹瞭如何利用 WS-Security 策略集和繫結保護示例 WS-Notification 應用程式。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-610849/,如需轉載,請註明出處,否則將追究法律責任。

相關文章