Saya harus menerapkan SSO dengan SAML untuk situs web perusahaan saya (sebagai pihak yang mengandalkan). Bagian penting dari kursus adalah verifikasi tanda tangan. Berikut adalah bagian tanda tangan dari sampel SAML dari perusahaan mitra kami (pihak yang menegaskan):
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:Reference URI="#_2152811999472b94a0e9644dbc932cc3" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ec:InclusiveNamespaces PrefixList="ds saml samlp xs" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">bW1Os7+WykqRt5h0mdv9o3ZF0JI=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
cgrAN4T/UmobhrkkTi3miiRfbo0Z7aakSZjXuTWlZlu9jDptxPNbOFw8ZbYKZYyuW544wQqgqpnG
gr5GBWILSngURjf2N45/GDv7HMrv/NRMsRMrgVfFsKbcAovQdLAs24O0Q9CH5UdADai1QtDro3jx
nl4x7HaWIo9F8Gp/H1c=
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIElzCCA3+gAwIBAgIQNT2i6HKJtCXFUFRB8qYsZjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQG
EwJGUjEOMAwGA1UEBxMFUGFyaXMxDDAKBgNVBAoTA3BzYTEgMB4GA1UECxMXY2VydGlmaWNhdGUg
YXV0aG9yaXRpZXMxKDAmBgNVBAMTH0FDIFBTQSBQZXVnZW90IENpdHJvZW4gUHJvZ3JhbXMwHhcN
MDkwODE5MDcxNTE4WhcNMTEwODE5MDcxNTE5WjCBhjELMAkGA1UEBhMCZnIxHzAdBgkqhkiG9w0B
CQEWEHBhc3NleHRAbXBzYS5jb20xGDAWBgoJkiaJk/IsZAEBEwhtZGVtb2IwMDEMMAoGA1UEChMD
cHNhMREwDwYDVQQLEwhwcm9ncmFtczEbMBkGA1UEAxMSVGVzdCAtIFBBU1NFWFQgREVWMIGfMA0G
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCuY1nrepgACvDSTLWk5A1cFOJSwDbl6CWfYp3cNYR0K3YV
e07MDZn+Rv4jo3SusHVFds+mzKX2f8AeZjkA3Me/0yiS9UpS9LQZu9mnhFlZRhmUlDDoIZxovLXN
aOv/YHmPeTQMQmJZu5TjqraUq7La1c187AoJuNfpxt227N1vOQIDAQABo4IBkTCCAY0wDgYDVR0P
AQH/BAQDAgWgMB8GA1UdIwQYMBaAFLceWtTfVeRuVCTDQWkmwO4U01X/MAwGA1UdEwEB/wQCMAAw
gbYGA1UdIASBrjCBqzCBqAYKKoF6ARfOEAEBBDCBmTBBBggrBgEFBQcCARY1aHR0cDovL3JldW5p
cy5pbmV0cHNhLmNvbS9hdXRvcml0ZS9QQy1BQy1Qcm9ncmFtcy5wZGYwVAYIKwYBBQUHAgIwSDAK
FgNwc2EwAwIBARo6UG9saXRpcXVlIGRlIENlcnRpZmljYXRpb24gQUMgUFNBIFBldWdlb3QgQ2l0
cm9lbiBQcm9ncmFtczBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vaW5mb2NlcnQucHNhLXBldWdl
b3QtY2l0cm9lbi5jb20vQUMtUFNBLVBldWdlb3QtQ2l0cm9lbi1Qcm9ncmFtcy5jcmwwHQYDVR0l
BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBYGA1UdDgQPBA1BVVRPX0dFTkVSQVRFMA0GCSqGSIb3
DQEBBQUAA4IBAQCvRtP6bFkOUEHcqc6yUX0Q1Gk2WaAcx4ziUB0tw2GR9I0276JRJR0EGuJ/N6Fn
3FhLQrSPmS97Xvc9XmiI66fQUdg64g9YqBecdiQlUkR20VLgI6Nq8pldQlWjU2iYlkP15U7VF4Qr
0Pb2QiIljZUCKdv3qdED2Ri33za46LfykrlwZB0uhTVUxI/AEtjkKVFaZaqanJg+vJyZI5b30z7g
Ff8L3ht4Z7SFKdmY3IQSGzElIAAUfduzTJX0cwnGSU9D4BJu1BS8hWnYPwhk+nBJ7OFhXdwYQFWq
fhpBLq+ciJti9OMhcdCSIi0PbrOqzqtX7hZUQOvfShhCTJnl5TJJ</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
Yang tidak saya mengerti adalah, mengapa sertifikat di dalam tanda tangan?
Maksud saya, biasanya saya mendapatkan sertifikat dari perusahaan dengan cara yang aman, jadi saya tahu sertifikat itu dari mereka. Dan ketika verifikasi tanda tangan berhasil, saya tahu perusahaan mitra kami telah menandatanganinya.
Tetapi jika sertifikat tersebut berada dalam tanda tangan SAML-Response, siapa pun dapat mengirimkannya! Satu-satunya hal yang saya tahu adalah bahwa tanggapan tersebut belum dipalsukan. Tapi intinya, saya tidak tahu siapa yang mengirim SAML.
Adakah yang bisa menjelaskan kepada saya, bagaimana cara kerjanya?
sumber
Alasan kunci ditentukan adalah karena Metadata untuk Penyedia Identitas dapat menentukan beberapa kunci penandatanganan, dan Anda dapat menentukan kunci yang akan digunakan dengan menyertakannya dengan tanda tangan. SAML 2.0 mensyaratkan bahwa jika kunci tidak ditentukan dengan
Assertion
, maka dapat disimpulkan berdasarkan konteks (dari Metadata untuk pihak yang menegaskan).Misalnya, Anda mungkin memiliki ini di Metadata Anda untuk pihak yang menegaskan:
Setiap elemen XML yang ditandatangani dapat menentukan kunci mana yang digunakan untuk tanda tangan. Namun, dengan kasus SAML 2.0, kunci penandatanganan tersebut harus (misalnya) cocok dengan salah satu yang ditentukan di Metadata untuk pihak yang membuat tanda tangan. Jika kunci yang diberikan dengan tanda tangan tidak tepercaya (tidak ditentukan dalam Metadata dalam kasus ini), maka sistem SAML harus menghasilkan kesalahan saat memvalidasi tanda tangan.
sumber
<KeyDescriptor use="signing">
elemen untuk sertifikat IdP yang akan diterima oleh SP.Bagian publik dari sertifikat penandatanganan ada dalam pesan SAML. Ini digunakan untuk memeriksa tanda tangan untuk token itu sendiri, dan tentu saja untuk memungkinkan penerima mengetahui siapa yang menerbitkan token dan memperlakukannya dengan semestinya.
Fakta bahwa itu ada di sana adalah bagian dari spesifikasi tanda tangan digital XML, itu sebenarnya bukan sesuatu yang spesifik untuk SAML. Tanpa sertifikat, bagaimana Anda bisa tahu dari mana token itu berasal, dan bagaimana Anda bisa memvalidasinya?
XmlDSig menentukan metode lain, Anda dapat mengidentifikasi kunci penandatanganan berdasarkan subjek, nomor seri, hash, dll., Tetapi ini mengasumsikan bahwa pihak penerima memiliki sertifikat publik. Untuk SAML ini mungkin tidak terjadi, karenanya penyematan bagian publik dari sertifikat X509.
sumber
Issuer
elemen dan menyimpan sertifikat penerbit itu, dan memilih sertifikat yang akan digunakan untuk memeriksa tanda tangan untuk pesan ini.