【发布时间】:2016-12-29 16:28:30
【问题描述】:
我正在 Laravel 框架中使用 LightSAML Core 包实现 IDP。基本上,我需要向接收者发送 SAML 响应,但是我需要实现对称和非对称加密:创建断言时,我需要生成随机对称密钥并加密断言用那把钥匙。然后我需要使用收件人的公钥加密动态密钥,并将生成的加密动态密钥包含在响应中。我面临的问题是(1)生成随机对称密钥和(2)用它加密断言。
如LightSAML docs 中所述,断言通常使用接收者的证书(即他们的公钥)进行加密。但是,在这种情况下,它需要是随机对称密钥。现在,this answer 建议对称密钥只不过是一组随机字节。但是,如果 LightSAML API 需要 证书文件(不仅仅是字符串)进行加密,如何使用该随机字符串来加密断言?我是否需要从该随机对称密钥创建证书文件?
接下来,要使用接收者的公钥加密动态密钥,我该怎么做?我在想openssl_public_encrypt 通过给它随机对称密钥字符串和纯文本收件人的公钥,但是有更好的方法吗?如何在响应中包含该加密密钥字符串?
最后,当响应被签名时,它应该用我的私钥签名。但是,LightSAML 不仅需要我的私钥,还需要我的公钥。怎么会这样?为什么这里甚至需要我的公钥?我不应该使用加密的对称密钥(即用收件人的公钥加密的对称密钥)吗?
【问题讨论】:
-
随机对称密钥使用服务提供商的公钥加密,断言使用该对称密钥加密。 LightSAML 透明地为您执行此操作。除了写在文档中之外,您无需做任何事情。如果 SP 想要签名消息,您需要使用您的私钥对消息进行签名。 SP 使用您在 IdP 元数据中提供的 PUBLIC 密钥验证签名。