Grundsätzlich handelt es sich hier um ein Keytool-Problem und hat nichts mit Shibboleth zu tun, aber es wäre wahrscheinlich hilfreich zu verstehen, was ich erreichen möchte (Überspringe die Teile in fett, wenn die Shibboleth-Sachen für dich nichts bedeuten):
Ich versuche, eine Shibboleth-Single-Sign-On-Konfiguration einzurichten. Der IdP wurde bereits eingerichtet und ich habe einen SP eingerichtet, der damit kommuniziert. Bis jetzt (nach viel Herumprobieren) funktioniert alles gut - der SP (der in einen Apache-Reverse-Proxy eingebunden ist) fängt Anfragen an gesicherte Ressourcen ab und leitet sie korrekt an den IdP weiter, der eine Anmeldeseite anzeigt. Nach dem Anmelden antwortet der IdP und übergibt dem SP ein Token.
Der SP sollte dann den IdP kontaktieren, um das Token in Attribute umzuwandeln, die für die angemeldete Person gültig sind. Hier beschwert sich der IdP jedoch darüber, dass die Nachricht nicht den Sicherheitsanforderungen entspricht.
Wie mir scheint, akzeptiert tomcat das Zertifikat des SP, das selbst signiert wurde, nicht.
Stattdessen versuche ich ein CA-Zertifikat zu generieren und damit das Zertifikat zu signieren. Ich habe das CA-Zertifikat in $JAVA_HOME/jre/lib/security/cacerts hinzugefügt, damit keytool es vertrauen sollte, aber wenn ich versuche, das signierte SP-Zertifikat in den Keystore zu importieren, erhalte ich den Fehler:
keytool error: java.security.SignatureException: Signatur stimmt nicht überein.
Der Importbefehl, den ich verwende, lautet:
keytool -import -v -alias sp_signed_cert -keystore idp.jks -trustcacerts -file server.crt
wo server.crt das signierte SP-Zertifikat ist.
Warum erhalte ich diesen Fehler und was kann ich dagegen tun?
Die einzigen Optionen, die mir bleiben, sind:
- Apache vor dem Tomcat einzusetzen, auf dem der IdP läuft, und seine Einstellung "optional_no_ca" zu verwenden, um ein selbst signiertes Zertifikat verwenden zu können,
- für ein bekanntes CA zu bezahlen, um das Zertifikat zu signieren (was für ein Proof-of-Concept nicht wirklich geeignet ist),