Open vincenzocorso opened 3 years ago
Ciao Vincenzo, Pare il log sia abbastanza eloquente, guarda nella composizione del tuo metadata
Si ho appena risolto. Il problema era dato dall'sdk di spring che aggiungeva entrambi gli elementi (<KeyValue>
e <X509Data>
). Basta rimuovere il campo <KeyValue>
dalla richiesta.
Per chi stesse utilizzando lo stesso sdk, si deve commentare una linea.
public Signature getSignature() {
XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();
Signature signature = (Signature) builderFactory.getBuilder(Signature.DEFAULT_ELEMENT_NAME).buildObject(Signature.DEFAULT_ELEMENT_NAME);
signature.setSigningCredential(getCredential());
signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
signature.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
KeyInfo keyInfo = (KeyInfo) builderFactory.getBuilder(KeyInfo.DEFAULT_ELEMENT_NAME).buildObject(KeyInfo.DEFAULT_ELEMENT_NAME);
KeyStore ks = getKeyStore();
try {
X509Certificate certificate = (X509Certificate) ks.getCertificate(certificateAliasName);
//KeyInfoHelper.addPublicKey(keyInfo, certificate.getPublicKey()); // campo KeyData
KeyInfoHelper.addCertificate(keyInfo, certificate); // campo X509Data
}
catch (CertificateEncodingException e) {
log.error("buildAuthenticationRequest :: " + e.getMessage(), e);
}
catch (KeyStoreException e) {
log.error("buildAuthenticationRequest :: " + e.getMessage(), e);
}
catch (IllegalArgumentException e) {
log.error("buildAuthenticationRequest :: " + e.getMessage(), e);
}
signature.setKeyInfo(keyInfo);
return signature;
}
Grande,
Ti prego apri una issue sul progetto spring dedicato a spid e referenzia questa issue, se puoi fai una pull request sul progetto per la risoluzione di questa anomalia
Buongiorno,
mi hanno segnalato questo problema nell'ambito del componente di integrazione SPID con Keycloak (https://github.com/lscorcia/keycloak-spid-provider). L'errore si verifica da quando è stata aggiornata la libreria signxml
, e lo stesso autore dichiara di voler lasciare al chiamante la scelta su come operare nel caso in cui la chiave pubblica sia presente due volte, nel certificato e nel tag KeyValue (https://github.com/XML-Security/signxml/issues/143).
Specifica XML Signature alla mano non è vietato avere due rappresentazioni dello stesso certificato (https://tools.ietf.org/html/rfc3075#page-28), anzi, l'indicazione è recommended. Questo errore è una forzatura dell'autore della libreria tutta frutto della sua inventiva.
Considerato anche che questo problema esiste solo per le implementazioni Python, e infatti non si verifica con spid-saml-validator, credo che sarebbe opportuno utilizzare il flag ignore_ambiguous_key_info
come suggerito dal messaggio di errore. Sul lungo termine la soluzione è quella già delineata nella issue sul progetto signxml
, ovvero restituire errore solo se le due chiavi pubbliche non coincidono.
Che ne pensate?
Ho aperto la PR https://github.com/XML-Security/signxml/pull/169 sul repo della libreria. Se l'autore me la accetta potremo semplicemente aggiornare la libreria al prossimo rilascio, sennò preparerò una PR per aggiungere qui il parametro ignore_ambiguous_key_info alla chiamata.
Salve, sto utilizzando l'SDK di Spring per fare dei test.
Quando invio la richiesta ricevo questo errore:
signxml.exceptions.InvalidInput: Both X509Data and KeyValue found. Use verify(ignore_ambiguous_key_info=True) to ignore KeyValue and validate using X509Data only.
La richiesta che provo ad inviare è questa: