我正在使用Laravel框架中的LightSAML Core包实现IDP。基本上,我需要向收件人发送SAML响应,但是我需要实现对称和非对称加密:当创建断言时,我需要生成随机对称密钥并加密断言用那把钥匙。然后,我需要使用收件人的公钥加密动态密钥,并在Response中包含生成的加密动态密钥。我面临的问题是(1)生成随机对称密钥和(2)使用它加密断言。
如LightSAML docs中所述,断言通常用接收者的证书(即他们的公钥)加密。但是,在这种情况下,它需要是随机对称密钥。现在,this answer表明对称密钥只是一组随机字节。但是,如果LightSAML API需要证书文件(不仅仅是字符串)进行加密,如何使用该随机字符串加密Assertion?我是否需要从该随机对称密钥创建证书文件?
接下来,要使用收件人的公钥加密动态密钥,我该如何处理?我通过给它随机对称的密钥字符串和纯文本接收者的公钥来思考openssl_public_encrypt
,但是有更好的方法吗?如何在响应中包含加密的密钥字符串?
最后,当回复签名时,应该使用我的私钥进行签名。但是,LightSAML不仅需要我的私钥,还需要我的公钥。怎么会这样?为什么我的公钥甚至需要在这里?我是否应该使用加密的对称密钥(即使用收件人的公钥加密的对称密钥)?
答案 0 :(得分:1)
LightSAML
执行您所描述的操作 - 它生成随机对称密钥,使用您的私钥对其进行加密,并使用此随机对称密钥加密断言。您从文档链接的是一种便捷方法,如果您提供私钥,它将为您完成所有这些操作。
签署回复后,它会使用您的私钥。这是在SP希望签名邮件时完成的,并且在传输不是SSL
/ TLS
时使用。 LightSAML
想要您的公钥的原因是验证签名。这只是文档中有关如何签名和验证消息的示例。
流程是: - 使用IdP的私人键签名留言 - 使用IdP的公开键
验证SP上的签名在元数据交换期间交换IdP和SP之间的公钥。