Die Signaturüberprüfung für InCommon SAML-Metadaten mit xmlsec1 schlägt fehl

Die Signaturüberprüfung für InCommon SAML-Metadaten mit xmlsec1 schlägt fehl

InCommon-Föderationstellt IdP- und SP-Metadaten bereit. Ihre Aktualisierungsrichtlinie empfiehlt eine regelmäßige Überprüfung derMetadatenaggregatdie neueste Version zu verwenden. Sie empfehlen dringend InCommon SPsAktualisieren und Überprüfen von Metadatenmindestens täglich.

Befolgen Sie die Anweisungen aufMetadatenverbrauchSeite lade ich ein Aggregat herunter und erhalte eine authentische Kopie des Metadaten-Signaturzertifikats.

Dann muss ich die XML-Signatur der heruntergeladenen Metadaten überprüfen. Hier habe ich Probleme. Ich kann die heruntergeladenen Metadaten überprüfenmit dem eingebetteten x509-Zertifikat, kann die Überprüfung jedoch nicht mithilfe des separat heruntergeladenen Metadaten-Signaturzertifikats durchführen.

Ich habe die beiden Dateien von InCommon heruntergeladen:

  • xml:InCommon-metadata-idp-only.xml
  • privater Signaturschlüssel:inc-md-cert.pem

Ich dachte, ich müsste in der Lage sein, den folgenden Befehl auszuführen:

# xmlsec1 --verify \
     --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
     --privkey-pem ./inc-md-cert.pem \
     ./InCommon-metadata-idp-only.xml

Das schlägt mit der Meldung „Privater Schlüssel konnte nicht aus ./inc-md-cert.pem geladen werden“ fehl. Ich kann mit . überprüfen, ob es einen gültigen Schlüssel enthält (und dieser lesbar ist und das der richtige Pfad ist). Das schlägt auf die gleiche Weise fehl, wenn ich mit oder openssl x509 -text -in ./inc-md-cert.pemdarauf verweise .--privkey-pem--pubkey-pem

Wenn ich jetzt --pubkey-cert-pem ./inc-md-cert.pemstattdessen verwende, läuft es ohne Fehler und zeigt an OK SignedInfo References (ok/all): 1/1.

Aber nein, mein privater Signaturschlüssel wird eindeutig ignoriert und die Überprüfung wird einfach auf Grundlage des in der Datei metadata.xml eingebetteten Schlüssels durchgeführt. (Ich kann das --pubkey-cert-pemArgument vollständig entfernen und die Überprüfung funktioniert trotzdem mit dem eingebetteten x509-Zertifikat.

Aktualisieren

Da die bereitgestellte Signaturdatei selbstsigniert ist (von der Organisation), habe ich versucht, sie selbst als vertrauenswürdiges Zertifikat hinzuzufügen. Wenn Sie beispielsweise eine grundlegende Überprüfung mit OpenSSL versuchen, vergleichen Sie:

# openssl verify ./inc-md-cert.pem
error 18 at 9 depth lookup:self signed certificate
# openssl verify -CAfile ./inc-md-cert.pem ./inc-md-cert.pem
./inc-md-cert.pem: OK

Was ist, wenn das das Problem ist? Also versuche ich, die --trusted-pemOption hinzuzufügen

# xmlsec1 --verify \
     --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
     --privkey-pem ./inc-md-cert.pem \
     --trusted-pem ./inc-md-cert.pem \
     ./InCommon-metadata-idp-only.xml
func=xmlSecOpenSSLAppKeyLoadBIO:file=app.c:line=263:
   obj=unknown:subj=PEM_read_bio_PrivateKey and PEM_read_bio_PUBKEY:
   error=4:crypto library function failed: 
func=xmlSecOpenSSLAppKeyLoad:file=app.c:line=153:
   obj=unknown:subj=xmlSecOpenSSLAppKeyLoadBIO:
   error=1:xmlsec library function failed:
   filename=/tmp/inc-md-cert.pem;errno=2
func=xmlSecAppCryptoSimpleKeysMngrKeyAndCertsLoad:file=crypto.c:line=118:
   obj=unknown:subj=xmlSecCryptoAppKeyLoad:
   error=1:xmlsec library function failed:uri=./inc-md-cert.pem
Error: failed to load public key from "./inc-md-cert.pem".
Error: keys manager creation failed

Ein grundsätzlicher Fehler meinerseits, nehme ich an, denn das kann nicht so schwierig sein: Wie verwende ich einen externen Schlüssel (bereitgestellt von InCommon), um die Signatur der Metadatendatei (bereitgestellt von InCommon) zu überprüfen?

Antwort1

Eine Lösung, die sich allerdings etwas unbefriedigend anfühlt:

a) Überprüfen der InCommon-MetadatendateiVerwenden des eingebetteten Zertifikats.

# xmlsec1  --verify --id-attr:ID \ 
        urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor  \
       ./InCommon-metadata-idp-only.xml
OK
SignedInfo References (ok/all): 1/1
Manifests References (ok/all): 0/0

b) Vergleichen Sie dann einfach das eingebettete Zertifikat mit dem separat heruntergeladenen Zertifikat – sie sollten übereinstimmen, Modulo-Leerzeichen. Beachten Sie, dass das eine oder andere Zertifikat möglicherweise verkettet ist, was Sie für Vergleichszwecke ignorieren sollten.

Antwort2

Nach einigem Suchen habe ich herausgefunden, dass Sie versuchen können, --enabled-key-dataIhrer Befehlszeile Folgendes hinzuzufügen, zum Beispiel:

--enabled-key-data rsa oder --enabled-key-data x509

Beides sollte funktionieren. Sie können auch versuchen

xmlsec1 --list-key-dataum die zur Auswahl stehenden anzuzeigen.

In Ihrem Fall scheint es so zu sein,

xmlsec1 --verify \
  --enabled-key-data rsa \
  --id-attr:ID urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor \
  --pubkey-cert-pem ./inc-md-cert.pem \
  ./InCommon-metadata-idp-only.xml

sollte tun, was Sie wollen.

verwandte Informationen