hi.
Ich brauch mal wider etwas Hilfe:
Für eine SAML Authentifizierung möchte ich den Request und den Response wechselseitig signieren. Dazu signiere ich hin zum IdentityProvider den Inhalt mit dem eigenen Zertifikat aus einem STRUST Container (Adressbuch?). Der IdentityProvider kennt das dazugehörige PUBLIC Zertifikat und signiert seinerseite den Response. Der Einfachheit halber habe ich auch das PUBLIC Zertifikat des IdentityProvider im selben STRUST Container in der Zertifikatsliste abgelegt. Versuche ich nun aber die Signatur mit dem PUBLIC Zertifikat zu entschlüsseln bekomme ich vom SSF_KRN_DEVELOPE den Fehler 26 ("Zertifikat bzw. geheimer Schlüssel nicht gefunden") zurückgeliefert.
Meine Vermutung ist, dass beim SSF_KRN_DEVELOPE der RECIPIENT irgendwie anders angegeben werden muss, wenn ein Zertifikat aus der Liste anstatt des eigenen Zertifikats verwendet werden soll. Weder der Container noch das Zertifikat ist Passwort geschützt.
Derzeit schaut mein Coding so aus:
Code: Alles auswählen.
DATA lt_recipient TYPE STANDARD TABLE OF ssfinfo WITH DEFAULT KEY.
APPEND VALUE #( id = 'Inhaber aus STRUST'
profile = 'Dateipfad zum Container aus STRUST' ) TO lt_recipient.
CALL FUNCTION 'SSF_KRN_DEVELOPE'
EXPORTING
ssftoolkit = 'SAPSECULIB'
str_format = 'PKCS7'
ostr_enveloped_data_l = ld_data_length
IMPORTING
ostr_output_data_l = ld_binary_length
crc = ld_return
TABLES
ostr_enveloped_data = lt_data
recipient = lt_recipient
ostr_output_data = lt_binary
EXCEPTIONS
ssf_krn_error = 1
ssf_krn_noop = 2
ssf_krn_nomemory = 3
ssf_krn_opinv = 4
ssf_krn_nossflib = 5
ssf_krn_recipient_error = 6
ssf_krn_input_data_error = 7
ssf_krn_invalid_par = 8
ssf_krn_invalid_parlen = 9
ssf_fb_input_parameter_error = 10
OTHERS = 11.
Wenn ich bei der ID den Inhaber des eigenen Zertifikats verwende, klappt es wunderbar. Wenn ich aber die ID eines anderen Zertifikats aus der Liste nehme klappt es nicht.
Ich habe auch schon testweise versucht beim SSF_KRN_ENVELOPE das PUBLIC Zertifikat aus der Liste zu verwenden und das wird ohne Probleme akzeptiert. Das Ergebnis ist auch ein anderes als wenn ich das eigene Zertifikat verwende. Somit gehe ich mal davon aus, dass die Zertifikatsauswahl beim SSF_KRN_ENVELOPE funktioniert.
Weiß jemand warum der SSF_KRN_DEVELOPE beim Entschlüsseln solche Zicken macht? Oder wie man ihn korrekt aufruft um Daten mit einem Zertifikat aus der Liste zu entschlüsseln anstatt mit dem eigenen Zertifikat?
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.
ECC: 6.18
Basis: 7.50