2016-12-29 3 views
2

私はLaravelフレームワークでLightSAML Coreパッケージを使用してIDPを実装しています。基本的には、受信者にSAMLレスポンスを送信する必要がありますが、非対称暗号化の対称鍵を実装する必要があります。アサーションが作成されると、ランダムな対称鍵を生成し、その鍵でアサーションを暗号化する必要があります。次に、受信者の公開鍵を使用して動的キーを暗号化し、結果の暗号化された動的キーを応答に含める必要があります。私が直面している問題は、(1)ランダムな対称鍵を生成することですと(2)アサーションをで暗号化しています。LightSAMLのランダムな対称鍵でアサーションを暗号化する方法は?

LightSAML docsに記載されているように、アサーションは、通常、受信者の証明書(すなわち、公開鍵)で暗号化されます。ただし、この場合は、ランダムな対称キーである必要があります。今、this answerは、対称キーがランダムなバイトセットに過ぎないことを示唆しています。 LightSAML APIが証明書ファイル(文字列だけではない)を暗号化する必要がある場合、どのようにアサーションを暗号化するためにランダムな文字列を使用しますか?ランダムな対称鍵から証明書ファイルを作成する必要はありますか?

次に、受信者の公開鍵を使用して動的キーを暗号化するにはどうすればよいですか?私はopenssl_public_encryptをランダムな対称キー文字列とプレーンテキスト受信者の公開鍵を与えて考えていましたが、より良い方法がありますか?その暗号化されたキー文字列をレスポンスにどのように含めるのですか?

最後に、レスポンスに署名するときは、自分の秘密鍵で署名する必要があります。しかし、LightSAMLは自分の秘密鍵だけでなく私の公開鍵も必要とします。どうして?なぜ私の公開鍵はここでも必要ですか?暗号化された対称鍵(受信者の公開鍵で暗号化された対称鍵)を使用しないでください。

+2

ランダム対称鍵はサービスプロバイダの公開鍵で暗号化され、アサーションはその対称鍵で暗号化されます。 LightSAMLはこれを透過的に行います。ドキュメントに書かれた以上のことをする必要はありません。秘密鍵でメッセージに署名する必要があります。 SPは、IdPメタデータで提供するPUBLICキーを使用して署名を検証します。 – Mjh

答えて

1

LightSAMLあなたが説明したものを行います - それは、ランダムな対称鍵を生成しあなた秘密鍵で暗号化し、アサーションを暗号化するために、このランダムな対称キーを使用しています。あなたが秘密鍵を提供する場合、あなたがドキュメントからリンクしたのは、あなたのためのすべてを行う便利な方法です。

応答に署名すると、秘密鍵が使用されます。これは、SPが署名されたメッセージを要求するときに行われ、転送がSSL/TLSでないときに使用されます。理由はLightSAMLとなります。あなたの公開鍵は署名を検証することです。これは、メッセージの署名と検証方法に関するドキュメントの単なる例です。

フローは次のとおりです。 - 署名メッセージとIdPのプライベートキー - メタデータの交換中に交換されたIdPとSPの間IdPの公共キー

公開キーを使用してSPの署名を検証します。

+0

優秀、ありがとう! – Alex

関連する問題