2016-12-29 2 views
2

Ich implementiere ein IDP mit LightSAML Core Paket in Laravel-Framework. Grundsätzlich muss ich eine SAML-Antwort an einen Empfänger senden, aber ich muss eine symmetrische und eine asymmetrische Verschlüsselung implementieren: Wenn eine Assertion erstellt wird, muss ich einen zufälligen symmetrischen Schlüssel generieren und die Assertion mit diesem Schlüssel verschlüsseln. Dann muss ich den dynamischen Schlüssel mit dem öffentlichen Schlüssel des Empfängers verschlüsseln und den resultierenden verschlüsselten dynamischen Schlüssel in die Antwort aufnehmen. Das Problem, dem ich gegenüberstehe, ist (1) Erzeugen des zufälligen symmetrischen Schlüssels und (2) Verschlüsseln der Behauptung damit.Wie wird die Assertion mit einem zufälligen symmetrischen Schlüssel in LightSAML verschlüsselt?

Wie in LightSAML docs beschrieben, wird eine Assertion normalerweise mit dem Zertifikat des Empfängers (d. H. Ihrem öffentlichen Schlüssel) verschlüsselt. In diesem Fall muss es sich jedoch um einen zufälligen symmetrischen Schlüssel handeln. Jetzt schlägt this answer vor, dass ein symmetrischer Schlüssel nichts als eine zufällige Menge von Bytes ist. Aber wie benutzt man diese zufällige Zeichenfolge um eine Assertion zu verschlüsseln, wenn die LightSAML API eine Zertifikatsdatei (NICHT nur eine Zeichenkette) für die Verschlüsselung benötigt? Muss ich eine Zertifikatsdatei aus diesem zufälligen symmetrischen Schlüssel erstellen?

Als nächstes, um den dynamischen Schlüssel mit dem öffentlichen Schlüssel des Empfängers zu verschlüsseln, wie würde ich darüber gehen? Ich dachte openssl_public_encrypt, indem ich ihm eine zufällige symmetrische Schlüsselzeichenfolge und den öffentlichen Schlüssel des Klartextempfängers gab, aber gibt es einen besseren Weg? Wie würde ich diese verschlüsselte Schlüsselzeichenfolge in die Antwort aufnehmen?

Schließlich, wenn die Antwort signiert ist, sollte es mit meinem privaten Schlüssel signiert werden. LightSAML benötigt jedoch nicht nur meinen privaten Schlüssel, sondern auch meinen öffentlichen Schlüssel. Wie das? Warum wird mein öffentlicher Schlüssel hier benötigt? Sollte ich den verschlüsselten symmetrischen Schlüssel (d. H. Den symmetrischen Schlüssel, der mit dem öffentlichen Schlüssel des Empfängers verschlüsselt ist) nicht verwenden?

+2

Zufälliger symmetrischer Schlüssel wird mit dem öffentlichen Schlüssel des Dienstanbieters verschlüsselt, und Assertionen werden mit diesem symmetrischen Schlüssel verschlüsselt. LightSAML macht das für Sie transparent. Sie müssen nichts mehr tun als in den Dokumenten geschrieben. Sie müssen die Nachricht mit Ihrem privaten Schlüssel signieren, wenn SP signierte Nachrichten benötigt. SP überprüft die Signatur mithilfe Ihres PUBLIC-Schlüssels, den Sie in IdP-Metadaten übermitteln. – Mjh

Antwort

1

LightSAML tut, was Sie beschrieben - es einen zufälligen symmetrischen Schlüssel erzeugt, verschlüsselt sie mit Ihre privaten Schlüssel und verwendet diesen zufälligen symmetrischen Schlüssel, um die Behauptungen zu verschlüsseln. Was Sie aus den Dokumenten heraus verlinkt haben, ist eine bequeme Methode, die all dies für Sie erledigt, wenn Sie Ihren privaten Schlüssel angeben.

Wenn die Antwort signiert ist, verwendet sie Ihren privaten Schlüssel. Dies geschieht, wenn SP signierte Nachrichten benötigt und verwendet wird, wenn der Transport nicht SSL/TLS ist. Grund warum LightSAMLwill Ihr öffentlicher Schlüssel ist die Signatur zu überprüfen. Es ist nur ein Beispiel in der Dokumentation zum Signieren und Überprüfen der Nachricht.

Flow ist: - Zeichen-Nachricht mit IDP privaten Schlüsseln - Verifizierung der Signatur auf SP mit IdP des öffentlichen Schlüssel

öffentlichen Schlüsseln zwischen IdP und SP werden während des Austausches von Metadaten ausgetauscht.

+0

Ausgezeichnet, danke! – Alex

Verwandte Themen