Dark867
13-12-2009, 00:31
Ciao a tutti,sto letteralmente impazzendo con questo problema e scrivo qui sperando di trovare qualche anima pia disposta ad illuminarmi.
Devo connettermi ad un server e di tale server dispongo di un file .key,che immagino sia la sua chiave privata(e quindi inutile per me) e del suo certificato .pem che dovrebbe essere la sua chiave pubblica.
Supponendo che il server si accontenti dell'autenticazione solo dal suo lato dovrei adattare il mio client a comunicarvi.
Ho letto un po' la documentazione e girato per vari siti,ma sembra che tutto sia orientato perlopių al lato server,mentre non riesco a trovare neanche un esempio di codice lato client in TLS.
Ho provato a creare un keystore,tramite keytool,utilizzando il certificato pubblico self-signed del server(un export insomma),dandogli anche una password.
L'ho poi aperto in java:
InputStream keystoreSource=new FileInputStream("path");
char[] keystorePass="mia_password".toCharArray();
KeyStore keystore=KeyStore.getInstance("JKS");
keystore.load(keystoreSource,keystorePass);
Poi l'ho affidato al keymanager:
KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
kmf.init(ksKeys, keystorePass);
(a proposito cosė sto usando il keymanager per i certificati self signed?)
Infine ho creato un context da cui ho ricavato la ssl socket factory e poi la sslsocket corrispondente.
SSLContext context=SSLContext.getInstance("TLS");
context.init(kmf.getKeyManagers(),null,null);
SSLSocketFactory sf=context.getSocketFactory();
Morale della favola: client e server si bloccano,in qualche modo l'handshacking tls non va a buon fine,evidentemente sbaglio qualcosa in questo client...cosa?:((
(ho appena iniziato a prendere confidenza con tls quindi abbiate pazienza se sto facendo domande stupide o ho detto qualche boiata).
Devo connettermi ad un server e di tale server dispongo di un file .key,che immagino sia la sua chiave privata(e quindi inutile per me) e del suo certificato .pem che dovrebbe essere la sua chiave pubblica.
Supponendo che il server si accontenti dell'autenticazione solo dal suo lato dovrei adattare il mio client a comunicarvi.
Ho letto un po' la documentazione e girato per vari siti,ma sembra che tutto sia orientato perlopių al lato server,mentre non riesco a trovare neanche un esempio di codice lato client in TLS.
Ho provato a creare un keystore,tramite keytool,utilizzando il certificato pubblico self-signed del server(un export insomma),dandogli anche una password.
L'ho poi aperto in java:
InputStream keystoreSource=new FileInputStream("path");
char[] keystorePass="mia_password".toCharArray();
KeyStore keystore=KeyStore.getInstance("JKS");
keystore.load(keystoreSource,keystorePass);
Poi l'ho affidato al keymanager:
KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
kmf.init(ksKeys, keystorePass);
(a proposito cosė sto usando il keymanager per i certificati self signed?)
Infine ho creato un context da cui ho ricavato la ssl socket factory e poi la sslsocket corrispondente.
SSLContext context=SSLContext.getInstance("TLS");
context.init(kmf.getKeyManagers(),null,null);
SSLSocketFactory sf=context.getSocketFactory();
Morale della favola: client e server si bloccano,in qualche modo l'handshacking tls non va a buon fine,evidentemente sbaglio qualcosa in questo client...cosa?:((
(ho appena iniziato a prendere confidenza con tls quindi abbiate pazienza se sto facendo domande stupide o ho detto qualche boiata).