
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.pem
darauf verweise .--privkey-pem
--pubkey-pem
Wenn ich jetzt --pubkey-cert-pem ./inc-md-cert.pem
stattdessen 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-pem
Argument 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-pem
Option 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-data
Ihrer 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-data
um 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.