Avatar billede vis_dk Nybegynder
16. september 2004 - 21:44 Der er 12 kommentarer og
1 løsning

Https authentication

Hej,

Jeg forsøger at hente nogle filer via https, jeg kan dog ikke helt hitte ud af det.

Jeg har kigget på:
http://www.javaworld.com/javaworld/javatips/jw-javatip46.html
http://www.javaworld.com/javaworld/javatips/jw-javatip47.html
og kørt begge de eksempler de har vedlagt, men de giver begge en "Error reading URL", altså en IOException smidt i hovedet.

Jeg har kigget på et tidligere spørgsmål:
http://www.eksperten.dk/spm/535641

men her virker det som at han har fået det fra javaworld til at virke.

Mit spørgsmål er så: Skal man gøre noget specielt når det er https og ikke http?

Nogle der har nogle eksempler på en implementation jeg kan bruge?
Avatar billede arne_v Ekspert
16. september 2004 - 21:48 #1
Skal du bare bruge HTTPS eller skal du bare bruge BASIC authentication eller
skal du bruge begge dele ?
Avatar billede vis_dk Nybegynder
16. september 2004 - 21:50 #2
Err, det ved jeg ikke helt, vil skyde på https.

Jeg forsøger at forbinde til denne side:
https://telelink.dk/dabtop.html
Avatar billede arne_v Ekspert
16. september 2004 - 21:55 #3
Det er begge dele.
Avatar billede vis_dk Nybegynder
16. september 2004 - 22:35 #4
Ok perfekt. Har du en god tutorial jeg kan læse, eller lign?
Avatar billede arne_v Ekspert
16. september 2004 - 23:00 #5
Næh, men jeg kan da prøve at se om jeg kan lave et eksempel.
Avatar billede vis_dk Nybegynder
16. september 2004 - 23:21 #6
Det kunne være helt perfekt!  Tusind tak!
Avatar billede arne_v Ekspert
18. september 2004 - 21:13 #7
HTTP med BASIC authentication:

import java.net.*;
import java.io.*;

public class HttpGetAuth {
    public static void main(String[] args) {
        try {
            Authenticator.setDefault(new MyAuthenticator());
            URL url = new URL("http://www.xxxx.dk/prot2.html");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            if (con.getResponseCode() == HttpURLConnection.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 (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class MyAuthenticator extends Authenticator {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("xxxx", "xxxx".toCharArray());
    }
}
Avatar billede arne_v Ekspert
18. september 2004 - 21:13 #8
HTTPS:

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. september 2004 - 21:14 #9
HTTPS med BASIC authentication:

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

import javax.net.ssl.*;

public class HttpsGetAuth {
    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());
              Authenticator.setDefault(new MyAuthenticator());
            URL url = new URL("https://www.xxxx.dk/prot4.html");
            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;
//    }
//}

class MyAuthenticator extends Authenticator {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("xxxx", "xxxx".toCharArray());
    }
}
Avatar billede arne_v Ekspert
18. september 2004 - 21:15 #10
svar
Avatar billede arne_v Ekspert
18. september 2004 - 21:15 #11
(og du er meget velkommen til at give lidt ekstra point - det var ikke helt nemt med HTTPS)
Avatar billede vis_dk Nybegynder
19. september 2004 - 18:11 #12
Tusind tak!
Avatar billede arne_v Ekspert
19. september 2004 - 18:12 #13
Det var meget pænt - jeg takker også.
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