2010-02-02 8 views
7

Tôi có một khách hàng đang gửi khóa bảo mật. Mã hóa mà họ đang sử dụng là DES ba. Mỗi xác nhận mà họ gửi đều có giá trị chữ ký cần được xác thực để cung cấp cho họ các đặc quyền cần thiết. Bạn có thể cho tôi một mã mẫu không?Cách xác thực giá trị chữ ký SAML

+0

@king - nền tảng của bạn là gì? java? C#? php? vui lòng chỉ định để ví dụ/câu trả lời có thể áp dụng. –

+0

java bằng cách sử dụng opensaml – stu

Trả lời

13

Mã hóa và ký tên là hai động vật khác nhau. Triple DES là một phương thức khóa đối xứng (cùng một khóa được sử dụng để mã hóa và giải mã). Chữ ký số, mặt khác, sử dụng các phím bất đối xứng (cặp khóa riêng/khóa công khai), trong đó chữ ký được tính bằng khóa riêng và có thể được xác thực bằng khóa công khai. Vì vậy, nếu khách hàng của bạn muốn bao gồm chữ ký trong XML họ gửi cho bạn, thì họ cần cung cấp cho bạn khóa công khai của họ.

Để mã hóa, thông thường trong SAML là sử dụng XMLEncryption, định nghĩa định dạng XML để bao gồm thông tin khóa mã hóa và dữ liệu được mã hóa trong thư SAML của bạn. Vì việc trao đổi khóa đối xứng tĩnh là vấn đề - nếu nó bị chặn, bộ chặn có thể mã hóa và giải mã bất kỳ thông điệp nào - thay vào đó có thể sử dụng khóa đối xứng động được tạo mới cho mỗi thư, mã hóa thư bằng cách sử dụng khóa, sau đó mã hóa khóa đó bằng khóa công khai của cặp khóa mã hóa riêng/công khai và gửi cùng với thông báo. Khóa đối xứng được mã hóa chỉ có thể được giải mã bằng nửa riêng của cặp khóa được sử dụng để mã hóa nó. Vì vậy, sự khác biệt quan trọng nhất ở đây, từ quan điểm chính, là để ký, khách hàng giữ khóa riêng và phải chia sẻ khóa công khai với bạn, trong khi mã hóa, bạn giữ khóa riêng và phải chia sẻ công khai chìa khóa với khách hàng.

5

Nếu bạn muốn chứng thực chữ ký trên SAML Assertion hoặc bất kỳ các đối tượng XML Signable, các OpenSAML WIKI có thêm thông tin:

https://wiki.shibboleth.net/confluence/plugins/viewsource/viewpagesrc.action?pageId=3277047

Bạn có thể tìm kiếm 'Ví dụ Chữ ký xác nhận.

bài viết trên blog này cũng có một ví dụ cũng như:

http://mylifewithjava.blogspot.com/2012/11/verifying-signatures-with-opensaml.html

Để có được một 'chứng' để xác nhận, xem tại đây: http://mylifewithjava.blogspot.com/2011/03/getting-credentials-in-opensaml.html

Đối với thông tin về cách unmarshall xml vào một Mở đối tượng SAML, xem tại đây: https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUsrManJavaCreateFromXML

Xin cảm ơn, Yogesh

+0

Tôi đang giải thích tất cả điều này chi tiết trong cuốn sách mới của tôi, Hướng dẫn về OpenSAML, https://gumroad.com/l/a-guide-to-opensaml –

+0

Thật không may là các liên kết và sách không ' t dường như bao gồm cách xây dựng 'thông tin xác thực' (được sử dụng bởi hàm' SignatureValidator() 'từ Chữ ký bên trong SAML. – GrandAdmiral