# HTTPS einloggen



## Timboo89 (21. Feb 2009)

Hallo,

kurz: ich möchte mich AUTOMATISCH ohne, dass der Benutzer die Seite zu sehen bekommt auf dieser einloggen und die Daten aus der folgenden Seite laden. Der Benutzer muss natürlich vorher Passwort und Benutzernamen angeben. Es handelt sich ein Login auf dieser Seite: https://ssl.fh-wedel.de/sekretariat/
Wie mache ich das?

Restbeschreibung: Das Programm soll am Ende automatisch Notenupdates, die auf den Folgeseiten stehen laden können und (was auch auf den Folgeseiten möglich ist) zu Klausuren anmelden.

Danke im Vorraus


Es sei noch angemerkt: Ich habe keine HTML/PHP irgendwas Erfahrungen, aber die nötigen Kleinarbeiten, werde ich mir schon rausflöhnen. Hoffe ich...


----------



## HoaX (24. Feb 2009)

Und was ist jetzt das konkrete Problem?


----------



## ARadauer (24. Feb 2009)

http://commons.apache.org/net/ das hilft dir vielleicht...


bzw was ist jetzt dein konkrets problem? http request aus java zu senden?


----------



## Timboo89 (25. Feb 2009)

1) Ich muss ja Benutzernamen und Passwort an die Seite senden, um mich einloggen zu können und auf den Folgeseiten arbeiten zu können. Das weiß ich nicht.

2) Wenn ich auf den Folgeseiten bin, muss / möchte ich bestimmte Dateien herunterladen, wie mache ich das? Also wie kann ich "auf einen Button klicken"?


----------



## maki (25. Feb 2009)

Möchtest du Java lernen um ein Programm zu schreiben welches das macht?

Oder willst du dir zB. Selenium ansehen?


----------



## DocRandom (25. Feb 2009)

Timboo89 hat gesagt.:


> 1) Ich muss ja Benutzernamen und Passwort an die Seite senden, um mich einloggen zu können und auf den Folgeseiten arbeiten zu können. Das weiß ich nicht.
> 
> 2) Wenn ich auf den Folgeseiten bin, muss / möchte ich bestimmte Dateien herunterladen, wie mache ich das? Also wie kann ich "auf einen Button klicken"?



..nun Du könntest HTTPUnit verwenden um einen Browser zu simulieren.
Da es sich aber um eine SSL - Verbindung handelt mußt Du entweder/oder:
den Schlüssel richtig ablegen
den TrustedManager überschreiben

lg
DocRandom


----------



## Timboo89 (25. Feb 2009)

Also grundsätzlich kann ich Java, diesen Teil allerdings nicht, also ja ich möchte ein Programm schreiben, dass für mich das einloggen und herunterladen der daten übernimmt, wenn ich im Programm einen einzigen Button klicke. der Benutzer soll anschliessend nichts mehr machen müssen. (Vorher muss er natürlich Benutzernamen und Passwort angeben.) Das Problem ist auch, wie kann ich das bereits angesprochene Zertifikat automatisch vertrauenswürdig einstufen?


----------



## Fancy (25. Feb 2009)

Moin,



Timboo89 hat gesagt.:


> Das Problem ist auch, wie kann ich das bereits angesprochene Zertifikat automatisch vertrauenswürdig einstufen?




wie bereits von DocRandom angedeutet kannst Du einen neuen TrustManager in den SSLContext einhängen. Anschließend werden alle SSL Verbindungen gegen diesen TrustManager geprüft.

z.B.

[HIGHLIGHT="Java"]public void setupTrustAll(){

        final TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager(){

            public java.security.cert.X509Certificate[] getAcceptedIssuers(){
                return null;
            }


            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}


            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}

        }};

        try{

            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

        } catch(final Exception e){

            System.err.println(e);

        }
    }
[/HIGHLIGHT]


Damit wird eine SSL Verbindung gegen jedes SSL Zertifikat erlaubt. Eine entsprechende Modifikation um lediglich einem bestimmten Zertifikat zu vertrauen, sollte relativ einfach machbar sein (allerdings hab ich dies nie versucht). 

Gruß,
Michael

Edit: Lol, die Syntaxhervorhebung klappt ja super (warum macht der Semikolons in den Quellcode?), Zeile 3 soll natürlich heißen:

final TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager(){

und an den anderen Stellen natürlich auch "];" durch "]" ersetzen…


----------



## DocRandom (25. Feb 2009)

Timboo89 hat gesagt.:


> ... diesen Teil allerdings nicht, also ja ich möchte ein Programm schreiben, dass für mich das einloggen und herunterladen der daten übernimmt....


..also, wenn Du Dir den von mir geposteten Link genauer angeguckt hättest, wärest Du auch in der Lage jenes Problem zu lösen. Oder ist es doch nicht soweit her mit Deinen Javakenntnissen und wir sollen ne HA für Dich lösen?

Wenn das mit der HA nicht der Fall ist(ich kann mich ja auch irren), dann lass mal etwas Code von Dir sehen.

lg
DocRandom


----------



## Timboo89 (26. Feb 2009)

Danke schon mal für den Code und natürlich auch für den Link.

Ich gebe zu, mir deinen Link noch nicht angesehen zu haben, da ich aktuell am umziehen bin (ich habe nicht ein Mal Semester), daher ist das mit den Hausaufgaben auch nicht drin. Allerdings ist es schulisch, das stimmt schon, ich habe mir überlegt, dieses Projekt vielleicht als Abschlussarbeit zu machen - daher existiert auch noch kein Code - und wollte vorher abchecken, wie aufwändig die SSL-Verschlüsselung ist, da ich ungern in ein offenes Feuer renne, ohne zu wissen, wie lange ich es darin aushalten muss 

Hilft mir in der Aufwandsabschätzung beides sehr weiter. Vielen Dank  Bei weiteren fragen werd' ich mich wieder melden, das wird dann schätze ich in 2 Wochen sein, wenn ich mit der Abschlussarbeit anfange, da werde ich dann zu erst das herunterladen der Dateien testen


----------

