2011-08-05 93 views
12

當簽署也有簽名聲明的SAML響應時,我應該:簽署或不簽署聲明簽名的SAML響應?

A)生成沒有聲明簽名的響應簽名。然後在兩個簽名生成後注入聲明簽名。

B)生成聲明簽名並在生成響應簽名時包含它。

C)別的。

〜預先感謝!

回答

6

我相信正確答案是B)。首先簽署聲明,然後簽署包含已簽名聲明數據的響應。但是,如果一個簽發者/實體(STS/IDP/etc)簽署兩者,那麼簽署該斷言是沒有真正理由的?只需簽署應包含斷言數據的協議消息/響應。這將減少SP的處理需求。對於Web SSO,我只有在簽署斷言與響應的不同實體時纔會看到兩個部分簽名。 - Ian

5

如果您同時對兩個簽名進行簽名,則必須首先簽署斷言,然後簽署響應,因爲響應簽名將基於響應的全部內容(包括斷言簽名)。因此,對第二個斷言進行簽名會使響應簽名無效。

35

SAML是可怕的,我每次看他們的回答幾乎都是正確的時間,這裏是正確的算法蒸餾水:

  1. SHA1斷言的規範版本。
  2. 生成與SHA1簽名
  3. 簽署的SignedInfo XML片段,再次規範形式
  4. 採取的SignedInfo,簽名和密鑰信息,並創建一個簽名XML片段
  5. 插入此SignatureXML一個SignedInfo中的XML片段進入斷言(應該在SAML前右:主題)
  6. 不德斷言(與包括簽名),並插入響應
  7. SHA1這種反應
  8. 生成SignedI與SHA1簽名
  9. 簽署的SignedInfo XML片段,再次規範形式
  10. 採取的SignedInfo,簽名和密鑰信息,並創建一個簽名XML片段
  11. 插入此SignatureXML到響應NFO XML片段
  12. 將XML版本信息添加到響應中。

就是這樣。 SAML是完全可怕的。有許多微妙的東西使得實現SAML成了一場噩夢(例如計算XML子集的標準形式(斷言),也不包括XML文檔的XML版本。希望永遠不要再次重溫這種痛苦。

0

正確答案是B.

如果聲明方使用A簽署SAML響應,則在驗證SAML響應之前,依賴方必須刪除SAML響應的簽名和SAML聲明的簽名。 SAML核心規範規定,不得使用包絡簽名轉換或獨佔標準化轉換以外的轉換來生成簽名。這兩個轉換都不能刪除SAML斷言的簽名。因此,依賴方無法驗證SAML響應。