2011-08-23 26 views
1

我在使用wso2/php編寫Web服務時被困在一個地方。 我想使用安全的mtom。 使用加密或簽名時,我如何才能知道在安全令牌中使用哪個客戶端的公用證書? 或者我應該嘗試與所有現在的客戶端公共證書進行匹配嗎?瞭解WSO2中服務端的當前客戶端

我需要知道,當前用戶是誰。由於該服務是客戶特定的。 請幫助...它迫切:)

問候 Charanjeet考爾

回答

2

我知道這是一個有點晚了,但我遇到你同樣的問題。不知何故,這是一個令人困惑的話題(可能是因爲缺乏精確的文檔)。 通過代碼配置服務(而不是使用策略文件)時,您非常有限。以下是我發現的內容:

當客戶端僅標記消息時,他將其證書作爲安全令牌(wsse:binarysecuritytoken)附加在標頭中。服務器獲取該證書並使用它來檢查簽名。所以,你需要指定:

在客戶端客戶端證書和私鑰。

在服務:服務證書和私鑰(需要客戶端證書從頭)。

當客戶端簽署並加密消息時,客戶端使用服務器證書進行加密,並且還一起發送其證書,以便服務器可以檢查簽名並加密回來。在這裏,服務使用來自頭部的證書來加密響應。所以,你只需要指定:

在客戶端:客戶端證書和私鑰,服務器證書。

在服務器中:服務器證書和私鑰(從頭獲取客戶端證書)。

當客戶端僅加密消息時,他不會在請求中發送他的證書,因此您必須在服務中指定客戶端證書。

在客戶端:客戶端證書和私鑰以及服務器證書。

服務器:服務器證書和私鑰和客戶端證書。

因此,在第一種情況下,您不需要指定您的客戶端證書,並且您可以從請求頭獲取它並進行一些進一步處理,如果您需要對用戶進行身份驗證(可能會根據一些預先驗證的內容進行檢查)共享證書)。在最後一種情況下,我找不到解決辦法(可能使用xml策略)。

要檢索PHP中的證書,您將需要處理的命名空間(硬連接)的代碼會是這樣(您的回覆函數內):

$xml = simplexml_load_string($inMessage->outputHeaders[3]->str, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); 
$ss= $xml->children("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd") 
    ->BinarySecurityToken; 

警告! outputHeaders [3]不是獲取安全頭的安全方法!這只是爲了顯示獲取客戶端證書的簡單方法。