Il giorno mer, 19/01/2011 alle 00.32 +0100, bensi@cli.di.unipi.it ha
scritto:
> Salve,
>
> sono riuscita a sistemare Tomcat (ristallando tutto) per aprire un
> connettore SSL e adesso non ho più l'errore:
> "org.apache.ws.security.components.crypto.Merlin cannot create
> instance".
>
> Non riesco comunque a scambiare messaggi cifrati dal client al web
> service, passando anche per il proxy.
Se hai configurato correttamente Tomcat (puoi verificare invocando via
browser su https la pagina di benvenuto), nel client devi solo cambiare
l'endpoint di destinazione (protocollo e porta) ed aggiungere le giuste
opzioni alla JVM come indicato nell'esercitazione sulla sicurezza.
> Ho deciso di implementare solo la cifratura dei messaggi, come da
> esercitazione "WS-Security". Quindi ho seguito fedelmente quanto
> spiegato nell'esercitazione, ma il messaggio di richiesta non viene
> correttamente elaborato e mi viene restituito il seguente errore:
>
> "InvalidSecurity An error was discovered processing the <wsse:Security>
> header"
>
> Il messaggio ricevuto dal client come risposta è:
L'errore viene sollevato dal Web Service, quindi sarebbe interessante il
messaggio di richiesta ed il log dell'Application Server
> [....]
> La classe security.PasswordCallback ha il seguente metodo:
>
> public class PasswordCallback implements CallbackHandler {
>
> public void handle(Callback[] callbacks) throws IOException,
> UnsupportedCallbackException {
> System.out.println("Recupero della password");
> for (int i = 0; i < callbacks.length; i++) {
> WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
> //Recupero l'alias del certificato per cui si richiede la
> password
> String alias = pc.getIdentifier();
> if(alias.equals("client")){
> if(!(pc.getPassword().equals("clientpass")))
> throw new SecurityException("Password non
> riconosciuta");
> }
> }
>
> }
Questa implementazione di password callback si usa in caso di
Autorizzazione/Autenticazione con Password in chiaro (come scritto nella
documentazione di CXF).... dovresti usarne una di questo tipo dove
imposti la password necessaria alla lettura della chiave privata:
public class PasswordCallback implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
if(pc.getIdentifer().equals("username")
pc.setPassword("password");
return;
}
}
}
> La ringrazio, cordiali saluti,
>
> Lisa Bensi
Ciao,
Lorenzo.
>
> Quoting Lorenzo Nardi <nardi80@gmail.com>:
>
> > Il giorno dom, 16/01/2011 alle 14.47 +0100, bensi@cli.di.unipi.it ha
> > scritto:
> >> Quoting Lorenzo Nardi <nardi80@gmail.com>:
> >>
> >> >> Per adesso ho creato i certificati e configurato cxf, poi ho provato a
> >> >> inviare il messaggio con l'username token (con il password callback per
> >> >> ora implementato in modo banale), però quando provo ad inviare il
> >> >> messaggio al web service mi viene ritornato un messaggio di errore:
> >> >>
> >> >> "org.apache.ws.security.components.crypto.Merlin cannot create instance"
> >> >
> >> > E' uno strano errore. Hai gia' provato ad eseguire l'esercitazione WSS
> >> > nel tuo ambiente per capire se e' un problema di configurazione del
> >> > sistema o di implementazione?
> >> >
> >>
> >> Guardando i file di log, l'errore sembra essere che non trova il
> >> certificato del proxy durante il caricamento. Inoltre ho configurato il
> >> file di tomcat "server.xml" per aprire il connettore SSL come scritto
> >> nell'esercitazione WS-Security, cioè:
> >>
> >> <Connector
> >> port="8443" scheme="https" secure="true"
> >> clientAuth="false" sslProtocol="TLS"
> >> maxHttpHeaderSize="8192"
> >> maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
> >> enableLookups="false" disableUploadTimeout="true"
> >> acceptCount="100" SSLEnabled="true"
> >> keystoreFile="proxy.jks" keystorePass="proxypass"/>
> >>
> >> con il file "proxy.jks" posto nella stessa cartella del file "server.xml".
> >> In fase di startup però ho i seguenti errori nel file di log di catalina:
> >>
> >> [.........]
> >>
> >> Come mai nel file "server.xml" non mi vengono riconosciute quelle
> >> proprietà? E' un problema di tomcat o ho sbagliato a scrivere qualcosa
> >> nel file?
> >
> > Il path relativo di Tomcat e' $CATALINA_BASE/bin/ (non conosco la tua
> > versione di Tomcat, ma ipotizzo che sia sempre lo stesso path) quindi e'
> > li che dovresti mettere il proxy.jks, oppure impostare il path assoluto
> > del keystore nella configurazione.
> >
> >
> >
> >
> > Questo non ha niente a che vedere con il WS-Security o con CXF, ma serve
> > all'abilitazione di un connettore HTTPS in Tomcat. Le due cose sono
> > distinte anche se entrambe hanno a che vedere con la sicurezza delle
> > comunicazioni.
> >
> > Solo per scrupolo, riassumo:
> >
> > HTTP over SSL (HTTPS): abilita una comunicazione cifrata punto a punto a
> > livello di applicazione.
> >
> > WSS : Abilita una comunicazione sicura end to end a livello di
> > messaggio.
> >
> > Le due tecniche sono usabili anche contemporaneamente, ma quando
> > possibile se ne usa una sola.
> >
> > Trovi qualche informazione in piu' nella dispensa:
> > http://www.link.it/isi/jsp/index.jsp?sel=doc-file&guida=Dispensa&rel=1.0&id=ar01s05.html
> >
> >>
> >> Grazie in anticipo, saluti,
> >>
> >> Lisa Bensi
> >
> > Ciao,
> > Lorenzo
> >
> >>
> >> ----------------------------------------------------------------
> >> This message was sent using IMP, the Internet Messaging Program.
> >>
> >>
> >
> >
> > _______________________________________________
> > lai2010 mailing list
> > lai2010@link.it
> > https://www.link.it/mailman/listinfo/lai2010
> >
>
>
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>
>
|