我有一位發送安全密鑰的客戶。他們使用的加密是三重DES。他們發送的每個聲明都有一個需要驗證的簽名值,以賦予他們必要的權限。你能給我一個這樣做的示例代碼嗎?如何驗證SAML簽名值
回答
加密和簽名是兩種不同的動物。三重DES是一種對稱密鑰方法(用於加密和解密的相同密鑰)。另一方面,數字簽名使用非對稱密鑰(私鑰/公鑰對),其中籤名是使用私鑰計算的,並且可以使用公鑰進行驗證。因此,如果您的客戶想要將簽名以XML格式發送給您,那麼他們需要爲您提供公鑰。
對於加密,SAML中典型的是使用XMLEncryption,它定義了一種XML格式,用於在SAML消息中包含加密密鑰信息和加密數據。由於靜態對稱密鑰的交換是有問題的 - 如果它被攔截,攔截器可以對任何消息進行加密和解密 - 可以做的是使用爲每個消息重新生成的動態對稱密鑰,使用加密消息然後使用私鑰/公鑰加密密鑰對的公鑰對該密鑰進行加密,並將其與消息一起發送。加密的對稱密鑰只能使用用於加密密鑰對的專用一半來解密。
因此,從關鍵的角度來看,最重要的差異在於簽名時,客戶持有私鑰並且必須與您共享公鑰,而對於加密,您持有私鑰並必須共享公共密鑰關鍵與客戶。
如果您想驗證的SAML斷言或任何可簽名XML對象的簽名,則OpenSAML WIKI提供了更多信息:
https://wiki.shibboleth.net/confluence/plugins/viewsource/viewpagesrc.action?pageId=3277047
你可以找「簽名驗證的例子」。
本博客文章也有一個例子,以及:
http://mylifewithjava.blogspot.com/2012/11/verifying-signatures-with-opensaml.html
要獲得「證書」的驗證,在這裏看到: http://mylifewithjava.blogspot.com/2011/03/getting-credentials-in-opensaml.html
有關如何來解讀XML爲信息打開SAML對象,看到這裏: https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML
謝謝, Yogesh
我在我的新書「OpenSAML指南」中詳細解釋了所有這一切,https://gumroad.com/l/a-guide-to-opensaml – 2015-06-18 10:14:50
不幸的是, t似乎涵蓋了如何從SAML中的Signature構造「憑證」(由SignatureValidator()函數使用)。 – GrandAdmiral 2017-01-10 21:03:23
- 1. SAML簽名驗證失敗
- 2. OKTA SAML簽名驗證 - PHP
- 3. 驗證SAML簽名取決於證書
- 4. 間歇性SAML簽名驗證問題
- 5. 驗證C#中的java SAML簽名
- 6. PowerShell驗證SAML簽名的XML
- 7. 無法驗證SAML斷言簽名
- 8. SAML簽名驗證使用Python/M2Crypto
- 9. 驗證python中的SAML簽名
- 10. SAML RSA FIM(EMC)無法驗證簽名
- 11. SAML 2.0 x509證書和簽名值?
- 12. 如何驗證SAML響應
- 13. 如何驗證SAML令牌
- 14. 如何驗證PARes簽名?
- 15. passport-saml問題用於解碼和驗證已簽名的SAML響應
- 16. SAML重定向簽名或驗證未能生成正確的簽名
- 17. 如何驗證自簽名證書
- 18. 驗證簽名
- 19. 簽名驗證在Wso2IS中的SAML聲明失敗
- 20. spring + saml驗證協議消息簽名失敗
- 21. WSO2 IS 4.6.0:已簽名SAML身份驗證請求的組成
- 22. SSO SAML數字簽名驗證 - XML unicode字符
- 23. saml簽名驗證,無法恢復密鑰異常
- 24. SAML 2.0的自簽名證書
- 25. 用於SAML簽名的證書類型
- 26. 如何驗證自簽名證書的數字簽名?
- 27. SAML信任驗證
- 28. 驗證SAML令牌
- 29. SAML身份驗證
- 30. Salesforce SSO SAML驗證
@king - 你的平臺是什麼? java嗎? C#? PHP的?請詳細說明,以便示例/答案適用。 – 2010-02-02 16:32:23
使用opensaml的java – stu 2011-10-11 19:28:39