Avatar billede europe Nybegynder
18. november 2004 - 09:00 Der er 11 kommentarer og
1 løsning

java.net.SocketException: SSL implementation not available

Hejsa

Jeg har haft min kode til at køre på 1.3 version af java og har nu lige opgraderet til 1.4.2_03 version af java - det har gjort af at min HTTPS connection nu fejler med følgende fejl.

java.net.SocketException: SSL implementation not available

Jeg har følge kode til at lave connection med.
System.setProperty("java.protocol.handler.pkgs",
                            "com.sun.net.ssl.internal.www.protocol");
      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
           
      URL url = new URL(p_addresse);
           
      SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
      SSLSocket socket =(SSLSocket)factory.createSocket(url.getHost(), 443);

Er der nogen der ude der kan fortælle mig hvordan jeg løser dette problem - da jeg ikke rigtig kan finde ud af hvad der er galt.´

/Europe
Avatar billede arne_v Ekspert
18. november 2004 - 09:44 #1
HTTPS og SSL er indbygget i Java 1.4+.
Avatar billede arne_v Ekspert
18. november 2004 - 09:44 #2
Jeg lavede på et tidspunkt denne kode:

import java.net.*;
import java.io.*;
import java.security.*;
import java.security.cert.*;

import javax.net.ssl.*;

public class HttpsGet {
  public static void main(String[] args) {
      try {
        SSLContext sslctx = SSLContext.getInstance("SSL");
        sslctx.init(null, new X509TrustManager[] { new MyTrustManager() }, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sslctx.getSocketFactory());
        //HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());
        URL url = new URL("https://www.xxxx.dk/");
        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
        if (con.getResponseCode() == HttpsURLConnection.HTTP_OK) {
            InputStream is = con.getInputStream();
            OutputStream os = new FileOutputStream("C:\\z.z");
            byte[] b = new byte[1000];
            int n;
            while ((n = is.read(b)) >= 0) {
              os.write(b, 0, n);
            }
            os.close();
            is.close();
        }
        con.disconnect();
      } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
      } catch (KeyManagementException e) {
        e.printStackTrace();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}
class MyTrustManager implements X509TrustManager
{
    public void checkClientTrusted(X509Certificate[] chain, String authType) {
    }
    public void checkServerTrusted(X509Certificate[] chain, String authType) {
    }
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}

//class MyHostnameVerifier implements HostnameVerifier {
//  public boolean verify(String urlHostName, SSLSession session) {
//      return true;
//  }
//}
Avatar billede arne_v Ekspert
18. november 2004 - 09:45 #3
Ikke længere noget com.sun.net.ssl.internal
Avatar billede arne_v Ekspert
18. november 2004 - 09:46 #4
Den der trust manager er vist kun nødvendig hvis det er et hjemme lavet
certifikat.
Avatar billede europe Nybegynder
18. november 2004 - 10:08 #5
Er der nogen forskel på at sende og modtage ? For som jeg kan se er det du har lavet til at modtage med. Hvor imod det jeg laver er til at sende med.

/Europe
Avatar billede arne_v Ekspert
18. november 2004 - 10:19 #6
Min kode sender en request og læser en respons (client)

Skal du læse en request og sende en respons (server) ?
Avatar billede europe Nybegynder
18. november 2004 - 10:33 #7
Øh ja .
Min skal åbne forbindelsen - sende enbesked og så modtage et response på den besked.

Jeg har prøvet at lave noget ligende dit.
Og ja sgu det virker... :-)
Jeg siger mange tak for din hjælp - smid et svar og du kan få points for dit besvær.

/Europe
Avatar billede europe Nybegynder
18. november 2004 - 10:35 #8
Kan dog ikke undvære TrustManager - det giver en fejl

SSLContextImpl is not initialized

/Europe
Avatar billede arne_v Ekspert
18. november 2004 - 10:37 #9
kommer her
Avatar billede arne_v Ekspert
18. november 2004 - 10:37 #10
Så må du jo tage den med.
Avatar billede arne_v Ekspert
18. november 2004 - 10:38 #11
Det er selvfølgelig surt at skulle skrive sin kode om p.g.a. Java opgradering.

Men "com.sun.net.ssl.internal.www" har altså en vis usupporteret klang.
Avatar billede europe Nybegynder
18. november 2004 - 10:46 #12
Jamen så'en er det - man er vel opmærksom på at det kan give problemer at opgradere sine versioner af miljø'er og det faktisk lige meget hvad det er.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester