Validierung einer Signatur ohne Zwischenzertifikat

8

Ist es möglich, eine Signatur zu validieren, die nur ein Vorfahren- oder Stammzertifikat in der Hierarchie hat?

Disclaimer: Ich bin ein Neuling im Umgang mit Zertifikaten, also verzeiht bitte die naive Terminologie.

Betrachten Sie die folgende Situation.

  • Wir haben zwei Parteien (nennen wir sie IdP für Identity Provider und SP für Service Provider) und eine zentrale Zertifizierungsstelle CA definitiv von IdP und SP vertraut.
  • CA hat ein eigenes Zertifikat CertCA , das sowohl dem IdP als auch dem SP bekannt ist (wird unter einem Alias ​​in den Keystore von IdP und SP importiert)
  • Out CA gibt ein Zertifikat für IdP ( CerTidP ) und eins für SP ( CertSP ) aus.
  • IdP hat CertIdP in seinem Keystore und kennt das Passwort dafür, damit IdP Nachrichten mit CerTIdP
  • signieren kann
  • Gleiches gilt für SP / CertSP
  • Nehmen wir nun an, dass SP CertIdP nicht kennt und IdP CertSP nicht kennt. Sie kennen nur CertCA, mit dem CertIdP und CertSP signiert wurden. (Wie ich verstehe, haben wir eine Zertifikatshierarchie CerTIdP - & gt; CertCA & lt; - CertSP hier -)
  • IdP möchte eine signierte Nachricht an SP senden. Es erstellt eine Nachricht und verwendet dann CertIdP, um es zu signieren.
  • SP empfängt die vom IdP signierte Nachricht mit CerdIdP. Wie oben erwähnt, hat SP nicht die CertIdP, nur das Elternzertifikat CertCA.

Meine Frage lautet: Kann SP die Signatur der von CerTIdP signierten Nachricht validieren, die nur ihr übergeordnetes Zertifikat CertCA hat?

Hintergrundgeschichte, warum wollen Sie es?

Wir implementieren SAML-basiertes SSO mit PicketLink. Wir verwenden PicketLinks SAML2SignatureValidationHandler , um Signaturen zu validieren. Um dies zu erreichen, muss der Service Provider (SP) das IdP-Zertifikat in seinem Keystore haben. Wenn eine signierte SAML-Assertion an SP übergeben wird, verwendet dieser Handler das IdP-Zertifikat zum Überprüfen der Signatur.

Der obige Prozess funktioniert gut, aber wir haben einige organisatorische Bedenken. Dieser Prozess setzt voraus, dass SP das Zertifikat des IdPs zur Überprüfung besitzt. Falls sich etwas ändert, muss das IdP-Zertifikat auf der SP-Seite ersetzt werden. Wir haben vielleicht eine große Anzahl von SPs (hunderte, wenn nicht tausende), also ist das eine ziemliche Anstrengung.

Da sowohl CerdIdP als auch CertSP von derselben Behörde (CA) ausgestellt werden, die sowohl von IdP als auch von SP vertrauenswürdig ist, hatten wir die Idee, dass wir das CA-Zertifikat für die Signaturvalidierung verwenden können. Wenn dies funktioniert, kann die Notwendigkeit zum Austausch von Zertifikaten zwischen IdP und SP entfallen. Das Zertifikat der CA ist auch sehr "langlebig", wenn es nur einmal in der Ewigkeit ausgetauscht werden muss (die Ewigkeit beträgt in unserem Fall etwa 10-20 Jahre).

Ich bin mir jedoch nicht sicher, ob es technisch möglich ist, die mit CertIdP signierte Signatur zu validieren, die nur das übergeordnete CertCA hat. Ist es möglich? Oder sind wir hier völlig falsch?

Wenn es relevant ist, sind wir auf der Java / JBoss-Plattform auf der SP-Seite, IdP ist eine Drittanbieter-Software.

Aktualisierung:

Das ist die Signatur, die ich im Moment von IdP bekomme:

%Vor%     
lexicore 23.07.2014, 08:15
quelle

3 Antworten

5

Es hängt davon ab, ob Ihre SAML-Antwort das Signaturzertifikat <ds:X509Data>...</ds:X509Data> oder nur den öffentlichen Schlüssel <ds:KeyValue>...</ds:KeyValue> enthält.

%Vor%

gegen

%Vor%

Wenn das Signaturzertifikat eingebettet ist, enthält es möglicherweise die Erweiterung AuthorityInfoAccess, die normalerweise eine http- oder ldap-URL zum Zertifikat der ausstellenden Zertifizierungsstelle enthält. Mit diesen Erweiterungen vom Signaturzertifikat zum vertrauenswürdigen CA-Zertifikat können Sie die vertrauenswürdige Zertifikatskette erstellen. (Hinweis: Wenn der CertCA tatsächlich der direkte Aussteller von CertIdP und CertSP ist, haben Sie bereits die erforderliche vertrauenswürdige Zertifikatskette.)

Wenn Sie jedoch nur den öffentlichen Schlüssel erhalten, müssen Sie das Signaturzertifikat zur Hand haben, um den öffentlichen Schlüssel zu erhalten. Es kommt also auf ein Provisionierungs- / Verteilungsproblem an. Sie könnten einen Webdienst bereitstellen, der das entsprechende Signaturzertifikat für den angeforderten öffentlichen Schlüssel zurückgibt. Wenn das Signaturzertifikat nicht im lokalen Keystore des SP gefunden wurde, würde es den Webdienst kontaktieren, um das neue CerIdP abzurufen und es zum lokalen Keystore hinzuzufügen. Bei der Verwaltung des lokalen Keystores sind Leistung, Verfügbarkeit und Datenschutz relevant.

    
Christof R 23.07.2014, 10:16
quelle
3

Ich beginne mit einer kleinen Einführung - die Verifizierung digitaler Signaturen erfolgt in zwei Stufen.

  • Überprüfung der ersten Signatur - die überprüft, ob der Signaturwert tatsächlich dem Inhalt entspricht, den er schützt, und dass der Inhalt daher nicht manipuliert wurde
  • Vertrauensverifizierung - Überprüfen Sie, ob die Signatur von jemandem erstellt wurde, dem der Prüfer vertraut hat.

Die Überprüfung einer digitalen Signatur erfordert den Besitz des öffentlichen Schlüssels, dessen entsprechender privater Schlüssel zum Erstellen der Signatur verwendet wurde. Es gibt keinen Weg um das.

Aber es gibt einen Anwendungsfall für die Vertrauenswürdigkeitsprüfung, der die Verwendung von CA-Zertifikaten ermöglicht - und dies sollte für Ihren Fall hilfreich sein.

Es funktioniert so, dass Sie nur Ihre CA- (und möglicherweise Zwischen-CA-) Signaturzertifikate in die für Ihre SPs und IDPs generierten Metadaten aufnehmen. Sie fügen dann den von der Zertifizierungsstelle ausgegebenen exakten Blattschlüssel hinzu, der zum Erstellen der Signatur als Teil der SAML-Nachricht (im KeyInfo-Element innerhalb der Signatur) verwendet wird. Der SP / IDP ist dann in der Lage zu verifizieren, dass der Blattschlüssel (der ihm vorher unbekannt war) vertrauenswürdig ist, indem er den Zertifizierungspfad unter Verwendung der bereits vorhandenen CA-Zertifikate erstellt und verifiziert.

Dies ist nützlich für Rollover von Schlüsseln (z. B. wenn sie ablaufen) - da SP und IDP ihren Signierungsschlüssel ändern können, ohne die andere Partei benachrichtigen zu müssen. SAML-Produkte nennen diese Funktion manchmal als verankert oder als PKIX-Trust-Modus.

Bitte beachten Sie, dass dieser Ansatz für die digitale Verschlüsselung nicht funktioniert, da die Verschlüsselung im Voraus den genauen Blattschlüssel des anderen Teilnehmers erfordert.

    
Vladimír Schäfer 23.07.2014 17:49
quelle
2

Die kurze Antwort ist "Nein". Wenn Sie nur das Zertifikat der CA, aber nicht das Zertifikat der IdP oder SP haben, können Sie die Signatur von IdP oder SP nicht validieren.

Die längere Antwort: Um die Signatur des IdP durch den SP zu validieren, muss der SP zuerst den korrekten öffentlichen Schlüssel identifizieren, der dem IdP zugeordnet ist. Bei der Validierung wird der mit dem öffentlichen Schlüssel verschlüsselte Signaturwert mit dem Hash des Inhalts verglichen und überprüft, ob sie identisch sind. Ohne den öffentlichen Schlüssel des IdP kann der SP diese Operation nicht ausführen.

Nehmen wir an, der SP verfügt über einen öffentlichen Schlüssel, der die obige Überprüfung ermöglicht, und er möchte nun bestätigen, dass dieser öffentliche Schlüssel tatsächlich zum IdP gehört. Um dies zu tun, benötigt es ein Zertifikat, das den öffentlichen Schlüssel und den Namen des IdP enthält, mit einer Signatur von einer vertrauenswürdigen Entität, in diesem Fall der CA. Da Sie dies nicht haben, können Sie nicht bestätigen, dass die Signatur vom IdP ausgeführt wurde.

    
juhraffe 25.07.2014 21:07
quelle