Newsgroup: it.comp.java
Titolo: SSL, compatibilità con Java 1.2 e 1.3 e java.net.SocketException: no SSL Server Sockets

Ho scaricato dal sito di Sun il pacchetto jsse-1_0_3_03-gl.zip 
(
http://java.sun.com/products/jsse/index-103.html#downloads
), che dovrebbe 
permettere di usare le connessioni protette (SSL)  anche con le versioni 
precedenti (1.2 e 1.3) di Java, che non le supportavano.
Ho estratto dai tre files jar presenti il contenuto, creando così le 
cartelle com e javax con i loro bravi files class.
Sono riuscito così a compilare, senza errori, i due files dell'esempio alla 
pagina 
http://tvilda.stilius.net/java/java_ssl.php
Il problema è che, pur avendo creato il certificato con il comando 
keytool -genkey -keystore mySrvKeystore -keyalg RSA (funziona dalla 1.3 in 
poi, la 1.2 dà errore), quando digito:
C:\jdk1.2.1\bin\java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 
EchoServer
ottengo la seguente eccezione:
java.net.SocketException: no SSL Server Sockets
        at 
javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(DashoA12275)
        at EchoServer.main(Compiled Code)
Stesso problema con la versione 1.3, mentre gira correttamente con 1.4.
Dove sbaglio?

MMm forse il service provider crittografico non è registrato
correttamente
Puoi provare a registrare il SunJSSE provider sia staticamente che
dinamicamente.
Staticamente modificando il java.security file.
Dinamicamente chiamando il metodo: Security.addProvider come descritto
in questo URL:
http://java.sun.com/products/jsse/INSTALL.txt
.

Una cosa del genere
//setto il keystore da utilizzare per la comunicazione SSL con i
servizi web
		System.setProperty("javax.net.ssl.trustStore","D:\\Developing\\WS\\Tomcat
5.0\\KeyStore\\client.keystore");
		System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

> Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Provato con
public class EchoServer
 {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  public static void main(String[] arstring)
   {
     try
      {
//ecc...
Risultato:
EchoServer.java:9: Type expected.
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
                     ^
1 error
(Il carattere "^" è sotto la parola "new")
Dove sbaglio?
Grazie

Hai fatto questi import:
import javax.net.ssl.SSLSocketFactory;
import java.security.Security;

ah poi quella riga di codice la devi mettere nel main...

> ah poi quella riga di codice la devi mettere nel main...
Funziona! Grazie mille!
Marco

> Funziona! Grazie mille!
Un ultimo problema: e se invece di avere un file class ho un jar, posso
inserirvi anche il keystore? E come faccio ad indicare al programma dove
trovarlo?

Che io sappia, il KeyStore non puo' risiedere in un file .jar, perche'
dev'essere visibile anche a Tomcat.

scusami, ma non so perche' ora mi ero fissato che usavi tomcat...
Allora in questo caso non lo so.

> non so perche' ora mi ero fissato che usavi tomcat...
No, il mio problema è più che altro la parte client (un'applet da inserire 
in una pagina web). 

 una pagina web).
Dimenticavo, per ora, non avendo ancora affrontato il problema della firma 
dell'applet, la testo da linea di comando con java -jar nomefile.jar (e, 
ovviamente, ho la main class, e non il metodo init)