我有一位發送安全密鑰的客戶。他們使用的加密是三重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. OKTA SAML簽名驗證 - PHP
- 2. 驗證C#中的java SAML簽名
- 3. 間歇性SAML簽名驗證問題
- 4. SAML簽名驗證使用Python/M2Crypto
- 5. 如何驗證SAML令牌
- 6. 如何驗證SAML響應
- 7. 如何驗證PARes簽名?
- 8. passport-saml問題用於解碼和驗證已簽名的SAML響應
- 9. SAML重定向簽名或驗證未能生成正確的簽名
- 10. spring + saml驗證協議消息簽名失敗
- 11. SSO SAML數字簽名驗證 - XML unicode字符
- 12. saml簽名驗證,無法恢復密鑰異常
- 13. SAML信任驗證
- 14. Salesforce SSO SAML驗證
- 15. SAML簽名問題
- 16. 驗證X509證書時驗證簽名
- 17. 簽名板驗證
- 18. C#驗證簽名
- 19. 驗證Jar簽名
- 20. XML簽名驗證
- 21. ECDSA簽名驗證
- 22. ElGamal簽名驗證
- 23. SSL證書籤名驗證
- 24. SAML斷言值XML簽名結束語
- 25. SAML Spring示例:簽名沒有根據憑證的密鑰進行驗證
- 26. Weblogic 10.0:SAMLSignedObject.verify()未能驗證簽名值
- 27. 如何驗證SOAP簽名w/Delphi 2009?
- 28. 如何在PHP中驗證DKIM簽名?
- 29. 如何驗證oauth簽名或請求?
- 30. 如何簽名文件然後驗證?
@king - 你的平臺是什麼? java嗎? C#? PHP的?請詳細說明,以便示例/答案適用。 – 2010-02-02 16:32:23
使用opensaml的java – stu 2011-10-11 19:28:39