我正在开发一个SSO解决方案,该解决方案必须收到用户登录日志的SAML2.0断言。这一直有效,直到断言需要加密数据。断言响应看起来像这样(有一些信息被剪掉):
<samlp:Response IssueInstant="2013-07-09T21:00:22.884Z" ID="..." Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">...</saml:Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<xenc:CipherData>
<xenc:CipherValue>BB9KCO...gRGc7w03zZ5Q==</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>kb/HpNix...TcvxjypM</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml:EncryptedAssertion>
</samlp:Response>
如您所见,有一个加密密钥和加密数据。他们获得了一个证书,从中提取用于加密的公钥。我的理解是我会使用我们的私钥解密 EncryptedKey ,然后使用该密钥解密 EncryptedData 。但解密仍然失败。
我正在测试这样:
$data ='....'; //Contains the EncryptedKey cipherdata
$privateKey = '....'; //Contains the private key
$decrypted = null; //destination for decrypted data
$result = openssl_private_decrypt($data, $decrypted, $privateKey);
$result
为FALSE,$decrypted
为NULL。我使用公钥加密数据并使用私钥成功解密,因此我确信包含它们的X.509证书是有效的。有人可以对此有所了解吗?提前谢谢。
答案 0 :(得分:0)
我在这里找到了问题。在解密之前,我需要对cipherkey和cipherdata进行base64_decode编码。