<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BigBasti&#039;s Blog &#187; Computer</title>
	<atom:link href="http://blog.bigbasti.com/category/computer/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bigbasti.com</link>
	<description>About Me &#38; my Digital Lifestyle</description>
	<lastBuildDate>Wed, 25 Jan 2012 12:31:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SSL Teil 4: Serverseitige Authentifizierung mit Java</title>
		<link>http://blog.bigbasti.com/ssl-teil-4-serverseitige-authentifizierung-mit-java/</link>
		<comments>http://blog.bigbasti.com/ssl-teil-4-serverseitige-authentifizierung-mit-java/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 10:00:57 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Gut zu Wissen]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=1901</guid>
		<description><![CDATA[Nachdem wir in den letzen Teilen mehr die Theorie durchgenommen haben, möchte ich jetzt zu dem praktischen Teil kommen und euch zeigen wie man diese Theorie in Code umsetzen kann am Beispiel Java. (.NET wird auch noch folgen)

Wir wollen einfach einsteigen und implementieren erst mal nur die eine Serverseitige Authentifizierung, also muss der Server ...]]></description>
			<content:encoded><![CDATA[<p>Nachdem wir in den letzen Teilen mehr die Theorie durchgenommen haben, möchte ich jetzt zu dem praktischen Teil kommen und euch zeigen wie man diese Theorie in Code umsetzen kann am Beispiel Java. (.NET wird auch noch folgen)</p>
<p>Wir wollen einfach einsteigen und implementieren erst mal nur die eine Serverseitige Authentifizierung, also muss der Server sich uns gegenüber ausweisen und wir sind in der Pflicht sein Zertifikat anzunehmen oder abzulehnen.</p>
<p>Wie in Teil 1 erklärt benötigen wir also zunächst einen Ort wo wir die Zertifikate sichern, denen wir vertrauen. Hier können wir (da wir in Java unterwegs sind) nicht die Windows-eigenen nehmen sondern müssen die so genannten Keystores von Java Nutzen.</p>
<p>Ein Keystore, wie der Name schon sagt ist nichts anderes als ein Speicher für Zertifikate. Wenn ihr Java installiert dann legt Java bereits einen Keystore für euch an, diesen findet ihr dann in eurem Java Verzeichnis Java\jre6\lib\security\cacerts die Datei „cacerts“ enthält hier bereits ähnlich wie bei Windows bereits die CA-Zertifikate von den großen Zertifizierungsstellen.</p>
<p>Es wir desweiterhin in Java unterschieden zwischen  Keystore und Truststore, beides sind im Grunde Keystores und unterscheiden sich nur im Namen und in ihrem Inhalt. Eine einzige Datei kann auch beide beinhalten, ist aber eher unüblich, da man die eigenen (privaten) Zertifikate von den CA-Zertifikaten separieren will.</p>
<p><a href="http://server.bigbasti.com/uploads/uploads/121221115126786612.png"><img class="aligncenter" title="Zuständigkeiten" src="http://server.bigbasti.com/uploads/uploads/121221115126786612.png" alt="Zuständigkeiten" width="481" height="268" /></a></p>
<p>So enthalten die Keystores für gewöhnlich die eigenen Privaten Schlüssel und die eigenen von anderen CAs signierte Zertifikate, die bei Verbindungen als Serverzertifikate (Public Keys) genutzt werden. Der Truststore ist das Gegenstück und enthält die Zertifikate denen man vertraut. So müssen wir die Zertifikate die wir vom Server beim Verbindungsaufbau erhalten gegen einen Truststore prüfen.</p>
<p>Fangen wir mit unserem Code an, wir wollen einen Client erstellen, der eine Socket-basierte Verbindung zu einem Server über SSL aufbaut und das vom Server zurückgegebene Zertifikat prüft.</p>
<p>Java ist auf diesem Gebiet sehr entgegenkommend und bietet für fast alle Anwendungsfälle fertige APIs und Klassen die uns fast die ganze Arbeit abnehmen.</p>
<p>Um den Prozess besser aufzeigen zu können schreiben wir uns eine Eigene SSLSocketFactory die für uns den Aufbau der Verbindung übernimmt und unserem Programm im Prinzip ein fertiges Socket liefert.</p>
<p>Dazu erstellen wir eine neue Klasse und lassen diese von SSLSocketFactory erben. Da das eine abstrakte Klasse ist müssen eir einige Methoden implementieren. Wenn das erledigt ist sieht unsere Klasse schon so aus:</p>
<pre>
<pre class="brush: java; ">

/**
 * Stellt eine SSLSocketFactory bereit die einen angegebenen TrustStore nutzt
 * @author Sebastian Gross
 */
public class ServerSSLAuthSocketFactory extends SSLSocketFactory{

    @Override
    public String[] getDefaultCipherSuites() {

    }

    @Override
    public String[] getSupportedCipherSuites() {

    }

    @Override
    public Socket createSocket(Socket socket, String string,
            int i, boolean bln) throws IOException {

    }

    @Override
    public Socket createSocket(String destinationAddress,
            int destinationPort) throws IOException, UnknownHostException {

    }

    @Override
    public Socket createSocket(String string, int i,
            InetAddress ia, int i1) throws IOException, UnknownHostException {

    }

    @Override
    public Socket createSocket(InetAddress ia, int i) throws IOException {

    }

    @Override
    public Socket createSocket(InetAddress ia, int i,
            InetAddress ia1, int i1) throws IOException {

    }
}
</pre>
</pre>
<p>Nun müssen wir diesen Methoden Leben einhauchen, aber keine Angst das ist nicht so schlimm wie es aussieht, denn die einzige Änderung die wir machen müssen ist es der SSLSocktFactory beizubringen mit unserem Truststore zu arbeiten, der Rest der Funktionalität soll unberührt bleiben.</p>
<p>Fügen wir also einen Konstruktor zu unserer Klasse hinzu der das Initialisieren unserer Internen SSLSocketFactory mit unserem Truststore übernimmt.</p>
<pre>
<pre class="brush: java; ">

/** Delegate {@link SSLSocketFactory}. */
private transient SSLSocketFactory factory;

private File caFile;
private KeyStore ks;

private SSLContext context;
private TrustManagerFactory tmf;
private X509TrustManager defTrustManager;
private SavingTrustManager tm;

/**
 * Neue Truststore-basierte SSL-SocketFactory
 * @param truststoreLocation Vollqualifizierter Pfad zum Truststore oder
			leer lassen für Java-Default-Truststore
 * @param truststorePass Passwort für den Truststore. Wenn leer wird
			&quot;changeit&quot; ala Passwort benutzt.
 */
public ServerSSLAuthSocketFactory(String truststoreLocation,
								  String truststorePass){
	super();

	//Wenn ein Pfad zum TrustStore angegeben wurde diesen benutzen
	if(!truststoreLocation.isEmpty()){
		caFile = new File(truststoreLocation);
	}else{
		//Pfad zum default Java TrustStore finden
		caFile = new File(&quot;cacerts&quot;);
		if (!caFile.exists() || !caFile.isFile()) {
			char SEP = File.separatorChar;
			File dir = new File(System.getProperty(&quot;java.home&quot;) + SEP
					+ &quot;lib&quot; + SEP + &quot;security&quot;);
			caFile = new File(dir, &quot;cacerts&quot;);
			if (!caFile.exists() || !caFile.isFile()) {
				caFile = new File(dir, &quot;cacerts&quot;);
			}
		}
	}

	//Prüfen, ob ein TrustStore Password angegeben wurde
	String truststorePassword = truststorePass.isEmpty() ? &quot;changeit&quot; : truststorePass;

	//TrustStore öffnen
	try {
		InputStream in = new FileInputStream(caFile);
		ks = KeyStore.getInstance(KeyStore.getDefaultType());
		ks.load(in, truststorePassword.toCharArray());
		in.close();
	} catch (KeyStoreException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	} catch (NoSuchAlgorithmException ex){
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	} catch (CertificateException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	} catch (FileNotFoundException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	}catch (IOException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	}

	try {
		context = SSLContext.getInstance(&quot;TLS&quot;);
		tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
		tmf.init(ks);
		defTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
		context.init(null, new TrustManager[] {defTrustManager}, null);
		factory = context.getSocketFactory();
	} catch (NoSuchAlgorithmException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	} catch (KeyStoreException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	} catch (KeyManagementException ex) {
		Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
	}

}
</pre>
</pre>
<p>Das sieht auf den ersten Blick recht komplex aus, ist aber im Grunde recht simpel.</p>
<ul>
<li>In den Zeilen 23 - 28 prüfen wir ob der Konstruktor einen Pfad zu einem Truststore übergeben bekommen hat, und wenn dies nicht der Fall ist, wird der Pfad zu dem Standard-Java-Truststore in eurem JRE-Verzeichnis ermittelt.</li>
<li>Direkt danach in Zeile 41 prüfen wir ob ein Passwort übergeben wurde. Wenn keins übergeben wurde wird "changeit" genutzt. "changeit" ist das Defaultpasswort für den Standard-Java-Truststore.</li>
<li>In Zeile 45 - 48 öffnen wir den Keystore und laden dessen Inhalt in unsere Kokale KeyStore Variable.</li>
<li>Das Wichtigste geschieht nun in Zeile 67 - 72 hier holen wir uns einen Verweis auf den SSLContext (67) und erstellen uns mit Hilfe unseres KeyStores einene TrustManagerFactory(68-69). Anschließend lassen wir die TrustManagerFactory für uns einen neuen X509TrustManager "produzieren" der dann den Verweis auf unseren eigenen Keystore trägt. (70)</li>
<li>Nun sagen wir dem SSLContext, dass es unseren Trustmanager nutzen soll (71) für die darüber laufende Verbindungen und erstellen uns eine SSLSocketFactory (72)</li>
</ul>
<p>Nun haben wir intern eine SocketFactory, die unseren eigenen (über den Konstruktor angegebenen) Keystore nutzt. Der Rest der Klasse die wir erstellt haben dient hierbei eigentlich nur als Wrapper und Durchreiche, der Wichtigste Teil war der Konstruktor.</p>
<p>Die restlichen Methoden können nun also alle Anfragen direkt an die produzierte SSLSocketFactory weiterleiten. So sieht dann die fertige Klasse aus:</p>
<pre>
<pre class="brush: java; ">

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

/**
 * Stellt eine SSLSocketFactory bereit die einen angegebenen TrustStore nutzt
 * @author Sebastian Gross
 */
public class ServerSSLAuthSocketFactory extends SSLSocketFactory{

    /** Delegate {@link SSLSocketFactory}. */
    private transient SSLSocketFactory factory;

    private File caFile;
    private KeyStore ks;

    private SSLContext context;
    private TrustManagerFactory tmf;
    private X509TrustManager defTrustManager;
    private SavingTrustManager tm;

    /**
     * Neue Truststore-basierte SSL-SocketFactory
     * @param truststoreLocation Vollqualifizierter Pfad zum
	 *			Truststore oder leer lassen für Java-Default-Truststore
     * @param truststorePass Passwort für den Truststore.
	 *			Wenn leer wird &quot;changeit&quot; ala Passwort benutzt.
     */
    public ServerSSLAuthSocketFactory(String truststoreLocation,
				String truststorePass){
        super();

        //Wenn ein Pfad zum TrustStore angegeben wurde diesen benutzen
        if(!truststoreLocation.isEmpty()){
            caFile = new File(truststoreLocation);
        }else{
            //Pfad zum default Java TrustStore finden
            caFile = new File(&quot;cacerts&quot;);
            if (!caFile.exists() || !caFile.isFile()) {
                char SEP = File.separatorChar;
                File dir = new File(System.getProperty(&quot;java.home&quot;) + SEP
                        + &quot;lib&quot; + SEP + &quot;security&quot;);
                caFile = new File(dir, &quot;cacerts&quot;);
                if (!caFile.exists() || !caFile.isFile()) {
                    caFile = new File(dir, &quot;cacerts&quot;);
                }
            }
        }

        //Prüfen, ob ein TrustStore Password angegeben wurde
        String truststorePassword =
				truststorePass.isEmpty() ? &quot;changeit&quot; : truststorePass;

        //TrustStore öffnen
        try {
            InputStream in = new FileInputStream(caFile);
            ks = KeyStore.getInstance(KeyStore.getDefaultType());
            ks.load(in, truststorePassword.toCharArray());
            in.close();
        } catch (KeyStoreException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        } catch (NoSuchAlgorithmException ex){
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        } catch (CertificateException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        }catch (IOException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        }

        try {
            context = SSLContext.getInstance(&quot;TLS&quot;);
            tmf = TrustManagerFactory.getInstance(TrustManagerFactory
													.getDefaultAlgorithm());
            tmf.init(ks);
            defTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
            context.init(null, new TrustManager[] {defTrustManager}, null);
            factory = context.getSocketFactory();
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        } catch (KeyStoreException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        } catch (KeyManagementException ex) {
            Logger.getLogger(ServerSSLAuthSocketFactory.class.getName())
						.log(Level.SEVERE, null, ex);
        }

    }

    @Override
    public String[] getDefaultCipherSuites() {
        return factory.getDefaultCipherSuites();
    }

    @Override
    public String[] getSupportedCipherSuites() {
        return factory.getSupportedCipherSuites();
    }

    @Override
    public Socket createSocket(Socket socket, String string,
					int i, boolean bln) throws IOException {
        return factory.createSocket(socket, string, i, bln);
    }

    @Override
    public Socket createSocket(String destinationAddress,
					int destinationPort) throws IOException, UnknownHostException {
        return (SSLSocket)factory.createSocket(destinationAddress, destinationPort);
    }

    @Override
    public Socket createSocket(String string, int i,
					InetAddress ia, int i1) throws IOException, UnknownHostException {
        return factory.createSocket(string, i, ia, i1);
    }

    @Override
    public Socket createSocket(InetAddress ia, int i) throws IOException {
        return factory.createSocket(ia, i);
    }

    @Override
    public Socket createSocket(InetAddress ia, int i,
					InetAddress ia1, int i1) throws IOException {
        return factory.createSocket(ia, i, ia1, i1);
    }
}
</pre>
</pre>
<p>Da wir nun eine Factory haben die uns Sockets liefert, die auf unseren Truststore zugreift, können wir diese nun nutzen um eine Verbindung zu SSL Servern aufzubauen. Das Schöne hierbei ist, dass Java an sehr vielen Stellen SocketFactories nutzt, so können wir fast in allen Szenarien unsere Klasse einsetzen.</p>
<p>So können wir unsere SSLFactory nun ganz simpel testen:</p>
<pre>
<pre class="brush: java; ">

public static void main (String [] args) throws IOException{

    int port = 443; // default https port
    String host = &quot;httpsurl&quot;;

    try {
      SSLSocketFactory factory
       = (SSLSocketFactory) new ServerSSLAuthSocketFactory(&quot;&quot;,&quot;&quot;);

      SSLSocket socket = (SSLSocket) factory.createSocket(host, port);

      // enable all the suites
      String[] supported = socket.getSupportedCipherSuites();
      socket.setEnabledCipherSuites(supported);

      Writer out = new OutputStreamWriter(socket.getOutputStream());
      // https requires the full URL in the GET line
      out.write(&quot;GET https://&quot; + host + &quot;/ HTTP/1.1\r\n&quot;);
      out.write(&quot;Host: &quot; + host + &quot;\r\n&quot;);
      out.write(&quot;\r\n&quot;);
      out.flush();

      // read response
      BufferedReader in = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));

      // read the header
      String s;
      while (!(s = in.readLine()).equals(&quot;&quot;)) {
          System.out.println(s);
      }
      System.out.println();

      // read the length
      String contentLength = in.readLine();
      int length = Integer.MAX_VALUE;
      try {
        length = Integer.parseInt(contentLength.trim(), 16);
      }
      catch (NumberFormatException ex) {
        // This server doesn&#039;t send the content-length
        // in the first line of the response body
      }
      System.out.println(contentLength);

      int c;
      int i = 0;
      while ((c = in.read()) != -1 &amp;&amp; i++ &lt; length) {
        System.out.write(c);
      }

      System.out.println();
      out.close();
      in.close();
      socket.close();

    }
    catch (IOException ex) {
      System.err.println(ex);
    }
}
</pre>
</pre>
<p>Tragt in Zeile 4 einfach den gewünschten SSL-Host ein wie z.B. Google oder Facebook und startet das kleine Programm. Falls ihr keine Parameter beim Erzeugen der Factory (Zeile 7 und <img src='http://blog.bigbasti.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> angegeben habt solltet ihr auch keine Probleme beim Verbinden haben und wenn das Programm durchgelaufen ist seht ihr die Antwort des Servers im HTML Format.</p>
<p>Falls ihr doch einen eigenen Truststore eingetragen habt müsst ihr sicherstellen, dass dieser den Public Key des Servers zu dem ihr euch verbinden wollt beinhaltet, sonst wird die Verbindung nicht erfolgen.</p>
<p><a title="SSL Teil 1: Serverseitige Authentifizierung und Zertifikate" href="http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/" target="_blank">Teil 1: Serverseitige Authentifizierung und Zertifikate</a><a title="Teil 1 der Serie" href="http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/"><br />
</a><a title="SSL Teil 2: Beidseitige Authentifizierung" href="http://blog.bigbasti.com/ssl-teil-2-beidseitige-authentifizierung/">Teil 2: Beidseitige Authentifizierung</a><a title="Teil 1 der Serie" href="http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/"><br />
</a><a title="SSL Teil 3: Der SSL Handshake" href="http://blog.bigbasti.com/ssl-teil-3-der-ssl-handshake/" target="_blank">Teil 3: Der SSL Handshake<br />
</a>Teil 4: Serverseitige Authentifizierung mit Java</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=1901&amp;md5=5c14c6bafe61fc48928f9e2b59c81248" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/ssl-teil-4-serverseitige-authentifizierung-mit-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSL Teil 1: Serverseitige Authentifizierung und Zertifikate</title>
		<link>http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/</link>
		<comments>http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 21:44:47 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Gut zu Wissen]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[8]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=1869</guid>
		<description><![CDATA[

SSL (Secure Socket Layer) sollte wohl den meisten ein Begriff sein, das ist dieses lustige kleine "s" was manchmal hinter dem "http" in der Adresszeile des Browsers auftaucht (siehe Bild). In dieser Serie möchte ich euch erklären wie SSL in der Theorie funktioniert und wie ihr es in euren Applikationen nutzen könnt.

Viele Bekannte Webportale ...]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 259px"><img title="SSL" src="http://server.bigbasti.com/uploads/uploads/112211133713943632.png" alt="" width="249" height="29" /><p class="wp-caption-text">SSL ist aktiv</p></div>
<p>SSL (Secure Socket Layer) sollte wohl den meisten ein Begriff sein, das ist dieses lustige kleine "s" was manchmal hinter dem "http" in der Adresszeile des Browsers auftaucht (siehe Bild). In dieser Serie möchte ich euch erklären wie SSL in der Theorie funktioniert und wie ihr es in euren Applikationen nutzen könnt.</p>
<p>Viele Bekannte Webportale wie Facebook und Google bieten alle ihre Dienste inzwischen komplett über SSL an. Wenn ihr diese Technologie nutzen wollt, müsst ihr verstehen wie diese Funktioniert und was da eigentlich im Hintergrund abläuft.</p>
<p>Dieses kleine "s" hat eine große Wirkung und sorgt dafür, dass die gesamte Kommunikation mit dem Server in verschlüsselter Form abläuft und niemand sehen kann was ihr da so treibt.</p>
<p><a href="http://server.bigbasti.com/uploads/uploads/1122112211372335.png "><img class="aligncenter" src="http://server.bigbasti.com/uploads/uploads/1122112211372335.png " alt="" width="415" height="175" /></a></p>
<p>In 99% der Fälle sprechen wir hier über SSL über Serverseitige Authentifizierung, was soviel heißt wie der Server muss uns beweisen, dass er der ist für den er sich ausgibt. So wie wir unseren Ausweis vorzeigen müssen wenn wir ein Paket bei der Post abholen müssen weil der Postbote wiedermal zu faul war zu klingeln... Wir müssen der Post beweisen, dass wir der sind für den wir uns ausgeben.</p>
<p>Wie weist sich der Server denn nun aus? Einen Ausweis hat er nicht, aber er hat etwas sehr ähnliches, nämlich ein Zertifikat, das von einer dritten Stelle, nämlich einer CA (Certificate Authority - auf deutsch <a href="http://de.wikipedia.org/wiki/Zertifizierungsstelle" target="_blank">Zertifizierungsstelle</a>) signiert wurde.</p>
<p>Wenn wir das auf unser Ausweisbeispiel anwenden sieht es ca so aus: Jeder kann sich ein Blatt Papier mit einem Foto drucken wo sein Name draufsteht, aber euer Paket bei der Post werdet ihr damit nicht bekommen, da die Post der Herkunft des "Ausweises" nicht traut, es muss also von anderen Person (der die Post vertraut), die nicht ihr selbst seid, bestätigt werden, dass das wirklich ein echter Ausweis ist und dass das wirklich ihr seid. Im Falle eines Ausweises würde das wohl das Einwohnermeldeamt machen o.ä. diese würden euch einen Ausweis austellen dem andere vertrauen, da sie wissen, dass es aus einer vertrauenswürdigen Quelle kommt.</p>
<p>Wenn ihr euch also zu einem Server verbindet, der SSL nutzen will wird dieser euch also zunächst sein Zertifikat senden (seinen Ausweis) und nun seid ihr in der Pflicht zu entscheiden, ob ihr diesem Zertifikat (und somit dem Server) vertraut oder nicht.</p>
<p>Die (Vertrauens)-Prüfung übernimmt für euch meistens der Browser selbst. Jeder Browser kommt von Haus aus mit einer Liste von CAs  denen er blind vertraut. Diese Liste könnt ihr auch einsehen, sie ist häufig irgendwo in den Einstellungen des Browsers vergraben. Im Firefox findet ihr diese unter Einstellungen -&gt; Erweitert -&gt; Verschlüsselung -&gt;Zertifikate anzeigen -&gt; Zertifizierungstellen. Das sieht dann ca so aus:</p>
<div class="wp-caption aligncenter" style="width: 513px"><a href="http://server.bigbasti.com/uploads/uploads/11221115824123313.png"><img class=" " title="Vertrauenswürdige CAs" src="http://server.bigbasti.com/uploads/uploads/11221115824123313.png" alt="" width="503" height="372" /></a><p class="wp-caption-text">Vertrauenswürdige CAs</p></div>
<p>Das bedeutet, wenn ein Server dem Browser ein Zertifikat schickt, dass von einer dieser CAs signiert wurde, vertraut der Browser dem Server und baut die Verbindung zu ihm auf.</p>
<p>Was passiert denn nun wenn der Server uns ein unsigniertes Zertifikat schickt, oder ein Zertifikat dass von einer CA signiert wurde die dem Browser unbekannt ist?</p>
<p>Dann wird uns der Browser fragen, ob wir uns wirklich sicher sind, dass wir uns sicher sind, dass wir diese Seite wirklich aufrufen wollen. Dieses Fenster habt ihr (im FireFox) vielleicht auch schon gesehen:</p>
<div class="wp-caption aligncenter" style="width: 595px"><a href="http://server.bigbasti.com/uploads/uploads/112211151659671495.png"><img class=" " title="Firefox ist misstrauisch" src="http://server.bigbasti.com/uploads/uploads/112211151659671495.png" alt="" width="585" height="401" /></a><p class="wp-caption-text">Firefox ist misstrauisch</p></div>
<p>Nun müsst ihr also selbst entscheiden, ob ihr diesem Zertifikat vertraut. Hier sollte man aufpassen, denn wenn es um wichtige Sachen geht wie Online Banking sollte man von dieser Seite die Finger lasse, da es sich eventuell um ein <a href="http://de.wikipedia.org/wiki/Phishing" target="_blank">Phishing</a> versuch handeln könnte - diese Meldung ist niemals ein gutes Zeichen.</p>
<p>Wenn ihr hier das Zertifikat also akzeptiert, merkt der FireFox sich das und fragt bei der nächsten Verbindung nicht mehr nach da es für ihn ab nun ein vertrauenswürdiges Zertifikat ist.</p>
<p>Aber nicht nur die Browser haben einen solchen Zertifikate-Speicher, das Betriebssystem selbst hat ebenfalls eine Liste mit CAs denen es Vertrauen schänkt. Diese Liste kann in den Systemeinstellungen gefunden werden und wird sich häufig mit der des Browsers großenteils überschneiden. Unter Windows findest ihr diese unter Systemsteuerung -&gt; Netzwerk und Internet -&gt;Internetoptionen -&gt; Inhalte -&gt; Zertifikate -&gt; Vertrauenswürdige Stammzertifizierungsstellen</p>
<div class="wp-caption aligncenter" style="width: 529px"><a href="http://server.bigbasti.com/uploads/uploads/1122111524576561495.png"><img title="Windows Vertrauens CAs" src="http://server.bigbasti.com/uploads/uploads/1122111524576561495.png" alt="" width="519" height="477" /></a><p class="wp-caption-text">Windows Vertrauens CAs</p></div>
<p>Was steht eigentlich in so einem <a href="http://de.wikipedia.org/wiki/Public-Key-Zertifikat" target="_blank">Zertifikat</a>? Gucken wir doch mal rein:</p>
<div class="wp-caption aligncenter" style="width: 429px"><a href="http://server.bigbasti.com/uploads/uploads/1122111535131357227.png"><img title="Was steht in einem Zertifikat?" src="http://server.bigbasti.com/uploads/uploads/1122111535131357227.png" alt="" width="419" height="521" /></a><p class="wp-caption-text">Was steht in einem Zertifikat?</p></div>
<p>Jedes Zertifikat enthält diese Informationen:</p>
<ul>
<li>Anwendung (Ist es ein Server oder ein Clientzertifikat?)</li>
<li>Wer hat das Zertifikat ausgestellt?</li>
<li>Für wen wurde dieses Zertifikat ausgestellt</li>
<li>Wielang ist das Zertifikat gültig?</li>
<li>Die Signierungskette aller CAs die dieses Zertifikat signiert haben</li>
</ul>
<p>An Hand dieser Informationen wird entschieden, ob das Zertifikat akzeptiert wird oder nicht.</p>
<p>Zertifikate sind hierbei nichts besonderes, da jeder sich selbst Zertifikate ausstellen kann, es gibts dutzende Tools im Netz die euch Zertifikate generieren können, wie z.B. das kleine Javaprogramm "keytool" dass automatisch mit einem Java SDK mitinstalliert wird. Das Wichtige an einem Zertifikat ist immer seine Signatur, denn erst diese macht ein Zertifikat wertvoll und für andere Vertrauenswürdig.</p>
<p>Teil 1: Serverseitige Authentifizierung und Zertifikate<a title="Teil 1 der Serie" href="http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/"><br />
</a><a title="SSL Teil 2: Beidseitige Authentifizierung" href="http://blog.bigbasti.com/ssl-teil-2-beidseitige-authentifizierung/">Teil 2: Beidseitige Authentifizierung</a><a title="Teil 1 der Serie" href="http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/"><br />
</a><a title="SSL Teil 3: Der SSL Handshake" href="http://blog.bigbasti.com/ssl-teil-3-der-ssl-handshake/" target="_blank">Teil 3: Der SSL Handshake<br />
</a><a title="SSL Teil 4: Serverseitige Authentifizierung mit Java" href="http://blog.bigbasti.com/ssl-teil-4-serverseitige-authentifizierung-mit-java/">Teil 4: Serverseitige Authentifizierung mit Java</a></p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=1869&amp;md5=4be6ece20bfac62aa6c69ec2033b2d89" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/ssl-teil1-serverseitige-authentifizierung-und-zertifikate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jede Adventswoche ein Microsoft Press E-Book gratis</title>
		<link>http://blog.bigbasti.com/jede-adventswoche-ein-microsoft-press-e-book-gratis/</link>
		<comments>http://blog.bigbasti.com/jede-adventswoche-ein-microsoft-press-e-book-gratis/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 08:29:28 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=1439</guid>
		<description><![CDATA[Wie auch letztes Jahr verschenkt Microsoft Press auch dieses Jahr wieder E-Books. Dabei gibt es jede Adventswoche ein neues E-Book, dass kostenlos heruntergeladen werden kann.

Den Anfang macht heute das Windows 7 Home Premium "Maxibuch", das ca 1000 Seiten umfasst.


Microsoft Windows 7 wird mit "Microsoft Windows 7 Home Premium - Das MAXIBUCH" erst richtig schön. ...]]></description>
			<content:encoded><![CDATA[<p>Wie auch letztes Jahr verschenkt Microsoft Press auch dieses Jahr wieder E-Books. Dabei gibt es jede Adventswoche ein neues E-Book, dass kostenlos heruntergeladen werden kann.</p>
<p>Den Anfang macht heute das Windows 7 Home Premium "Maxibuch", das ca 1000 Seiten umfasst.</p>
<p><a href="http://blog.bigbasti.com/uploads/buch01.jpg"><img class="alignleft size-full wp-image-1440" title="buch01" src="http://blog.bigbasti.com/uploads/buch01.jpg" alt="" width="220" height="240" /></a></p>
<blockquote><p>Microsoft Windows 7 wird mit "Microsoft Windows 7 Home Premium - Das MAXIBUCH" erst richtig schön. Damit Sie die vielen Möglichkeiten entdecken und verstehen, hat sich das Autorenteam lange mit Windows 7 Home Premium auseinandergesetzt.<br />
Sie erhalten von uns kostenlos eine gelungene und sehr ausführliche Windows 7-Beschreibung!<br />
Wissen aus erster Hand auf über 1.000 Seiten! (PDF, 80.2 MB)<br />
Rechnen Sie unbedingt auch mit Tipps, wie Sie schneller, einfacher und sicherer arbeiten - und Spaß bekommen.</p></blockquote>
<p>Wer Interesse hat muss lediglich seine E-Mail Adresse auf der <a href="http://advent.microsoft-press.de/" target="_blank">Aktionsseite </a>eintragen und bekommt einen Download-link zugeschickt.</p>
<p>Nachtrag:</p>
<p>Anscheinend sind momentan die Server ziemlich ausgelastet:</p>
<blockquote><p>Entschuldigung.<br />
Unser Downloadserver ist überlastet.<br />
Bitte Versuchen Sie es in wenigen Minuten noch einmal.<br />
Vielen Dank für Ihre Verständnis.</p></blockquote>
<p>Aber zum Glück hat man die Ganze Woche Zeit um es herunterzuladen. <img src='http://blog.bigbasti.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://dotnet-kicks.de/kick/?url=http%3a%2f%2fblog.bigbasti.com%2fjede-adventswoche-ein-microsoft-press-e-book-gratis%2f"><img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.bigbasti.com%2fjede-adventswoche-ein-microsoft-press-e-book-gratis%2f" border="0" alt="kick it on dotnet-kicks.de" /></a></p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=1439&amp;md5=0a07883a27eb7c12356392c566aabaeb" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/jede-adventswoche-ein-microsoft-press-e-book-gratis/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ein Steiniger Weg: SuperDrive gegen SSD eintauschen</title>
		<link>http://blog.bigbasti.com/ein-steiniger-weg-superdrive-gegen-ssd-eintauschen/</link>
		<comments>http://blog.bigbasti.com/ein-steiniger-weg-superdrive-gegen-ssd-eintauschen/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 15:02:00 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/ein-steiniger-weg-superdrive-gegen-ssd-eintauschen/</guid>
		<description><![CDATA[Diejenigen von euch die mir bei Twitter folgen haben es wohl schon mitbekommen, dass ich das DVD Laufwerk meines MacBooks (late 2008) genannt SuperDrive gegen eine SSD eintauschen wollte.

Warum der Stress?

Also ich weiß nicht wie es bei euch ist, aber ich nutze das im MacBook verbaute DVD Laufwerk so gut wie nie! Ich habe ...]]></description>
			<content:encoded><![CDATA[<p>Diejenigen von euch die mir bei <a href="http://twitter.com/bigbasti87" target="_blank">Twitter</a> folgen haben es wohl schon mitbekommen, dass ich das DVD Laufwerk meines MacBooks (late 2008) genannt SuperDrive gegen eine SSD eintauschen wollte.</p>
<p><strong>Warum der Stress?</strong></p>
<p>Also ich weiß nicht wie es bei euch ist, aber ich nutze das im MacBook verbaute DVD Laufwerk so gut wie nie! Ich habe damit mal Windows installiert, oder auch mal Mac OS, ein mal habe ich sogar mal ein paar Dateien auf eine DVD gebrannt, aber mehr war es auch wirklich nicht.</p>
<p>So gut wie alle Daten die auf meinen Rechner kommen tuen es entweder übers Internet oder über einen USB-Stick. Mal ernsthaft wie oft verwendet ihr eure DVD Laufwerke?</p>
<p>Da ich schon seit längerem mit dem Gedanken Spiele mir eine SSD anzuschaffen, aber immer gezögert habe, da diese recht teuer sind und wenig Speicherplatz bieten als das man sie gegen die verbaute Festplatte tauschen könnte, habe ich mir gedacht, hey, warum nicht den Teil ausbauen, den du sowieso nicht nutzt?</p>
<p><strong>Erste Schwierigkeiten</strong></p>
<p>Wie ihr euch sicher denken könnt kann man ein ganzes DVD Laufwerk nicht einfach gegen eine viel kleinere SSD tauschen. Erstens ist da die Größe die nicht passt und zweitens auch der Anschluss, der ein etwas kleinerer ist am Laufwerk.</p>
<p>Ein Adapter muss her.</p>
<p>Meine ersten Suchversuche führten mich zum <a href="http://goo.gl/jUtM" target="_blank">Optibay</a> von MCE. Das hat mich wirklich aus den Socken genauen! Da soll man wirklich für ein Stück Allu mit einem, SATA Adapter drauf $100 plus Versand und Zoll bezahlen. – Nein danke!</p>
<p>Kurz darauf habe ich bei <a href="http://goo.gl/opvX" target="_blank">eBay</a> ein “Konkurrenz”-Produkt gefunden, dass nicht nur Optisch besser aussah, sondern mir auch noch preislich besser gefiel (13€ inkl Versand).</p>
<p>Knapp drei Wochen später kam das Päckchen dann auch bei mir an:</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/jww.jpg"><img style="padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="jww" src="http://blog.bigbasti.com/uploads/jww_thumb.jpg" border="0" alt="jww" width="276" height="359" /></a></p>
<p><strong>Die SSD</strong></p>
<p>Man kann wirklich viel Zeit in die Suche nach der “richtigen” SSD investieren, so war ich @<a href="https://twitter.com/twittlor" target="_blank">Twittlor</a> (Marek) wirklich dankbar für seinen Tipp, der mich zur <a href="http://goo.gl/7nPb" target="_blank">OCZ OCZSSD2-2VTXE60G</a> 60GB führte.</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/OCZ-Vertex-2-MLC-2_5-inch-SSD.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="OCZ-Vertex-2-MLC-2_5-inch-SSD" src="http://blog.bigbasti.com/uploads/OCZ-Vertex-2-MLC-2_5-inch-SSD_thumb.jpg" border="0" alt="OCZ-Vertex-2-MLC-2_5-inch-SSD" width="244" height="185" /></a></p>
<p>Nach einer kleinen Google Recherche (hier ein <a href="http://goo.gl/qrp3" target="_blank">Testbericht</a>) ging noch am selben Tag die Bestellung bei Amazon ein.</p>
<p><strong>Der Ein/Umbau</strong></p>
<p>Zwei Tage später hielt ich die SSD in den Händen. Nun hieß es ran an den Speck.</p>
<p>Mein Plan war folgender:</p>
<ol>
<li>Alte Festplatte formatieren und Mac OSX über DVD neu installieren (50GB)</li>
<li>DVD Laufwerk ausbauen, SSD einbauen und Windows über einen USB-Stick installieren</li>
</ol>
<p>Wie ich finde ein sehr guter und einfacher Plan, doch leider habe ich meine Rechnung ohne Apple gemacht.</p>
<p><strong>Das Apple-Problem</strong></p>
<p>Ich weiß nicht warum Apple immer mit dem Slogan wirbt, dass ihre Systeme so einfach wären. Denn sie sind es nicht!</p>
<p>So musste ich überrascht feststellen, dass das MacBook nicht von meinem Windows Installations USB-Stick booten konnte, obwohl andere Notebooks kein Problem war.</p>
<p>Nach einer Kurzen Suche fand ich heraus, dass Macs NUR Mac OS von einem Stick installieren können! Windows kann man NUR von CD/DVD installieren – was ist denn das für ein Kindergarten?</p>
<p><strong>Der Ein/Umbau – der zweite Versuch</strong></p>
<p>Nun musste ich meinen oberen Plan natürlich verwerfen, da ich Windows nicht mehr hätte installieren können, wenn das DVD Laufwerk erst einmal draußen war.</p>
<p>Also neuer Plan:</p>
<ol>
<li>Alte Festplatte formatieren und Mac OSX über DVD neu installieren (50GB)</li>
<li>Alte Festplatte ausbauen, SSD einbauen und Windows über DVD neuinstallieren</li>
<li>SSD ausbauen und Alte Festplatte wieder einbauen</li>
<li>DVD Laufwerk ausbauen und SSD einbauen</li>
</ol>
<p>ARGH! – Nun gut, geht nicht anders.</p>
<p>Als ich anfing nach den Anleitugen von <a href="http://goo.gl/sn9R" target="_blank">iFixit.com</a> die Festplatte auszubauen kam schon das nächste Problem. Die eine Schraube, die die Festplatte befestigt war so enorm festgeschraubt, dass ich den Schraubenkopf und einen Schraubenzieher zerstörte bei dem Versuch diese zu lösen.</p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto;" src="http://guide-images.ifixit.net/igi/iOkdv1JNl1NiJQqp.medium" alt="" width="396" height="297" /></p>
<p>Toll – fängt ja gut an. Nun war die Schraube nicht mehr lösbar, also musste schweres Geschütz her und die Schraube musste aufgebohrt werden.</p>
<p>Ich weiß nicht, ob ihr schon mal in euren Notebook rumgebohrt habt aber es war wirklich kein schönes Gefühl. Aber gut nach weiteren 20 Minuten war die Schraube raus.</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/Foto-2.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Foto 2" src="http://blog.bigbasti.com/uploads/Foto-2_thumb.jpg" border="0" alt="Foto 2" width="184" height="244" /></a></p>
<p>Nun konnte ich die SSD problemlos einbauen und Windows von der DVD installieren.</p>
<p>Nun kam der lustige Teil, der Ausbau des DVD Laufwerks. Wenn ihr schon mal in das Innere eures MacBooks geschaut habt wisst ihr, dass es keine einfache Angelegenheit ist, da diverse andere Teile das Laufwerk verdecken und somit vorher ausgebaut werden müssen um überhaupt an das Laufwerk ranzukommen.</p>
<p>Übrigens, wenn es bei euch noch nicht der Fall ist, verliert ihr bei diesem Schritt eure Garantie und Gewährleistungsansprüche gegenüber Apple.</p>
<p>Wer hierzu mehr wissen will schaut einfach in die Anleitung von <a href="http://goo.gl/nj16" target="_blank">iFixit</a>.</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/Foto-1-1.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Foto 1 (1)" src="http://blog.bigbasti.com/uploads/Foto-1-1_thumb.jpg" border="0" alt="Foto 1 (1)" width="248" height="329" /></a></p>
<p>Nach einigem Rumgefrickel war das Laufwerk raus. Phuh</p>
<p>Nun musste die SSD in den Chinesischen Adapter, und genau hier hat man die Qualitätsdefizite zu spüren bekommen die man durch den niedrigen Preis inklusive bekommen hat.</p>
<p>Denn die Stecker passten nicht 100%ig zusammen, da in dem Adapter der mittlere Separator ein wenig zu dick war. Also musste hier das Cutter Messe raus um diesen Missstand manuell zu beheben. Aber nach ein paar Minuten als Chirurg passte die SSD auf den Adapter.</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/Foto-5.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Foto 5" src="http://blog.bigbasti.com/uploads/Foto-5_thumb.jpg" border="0" alt="Foto 5" width="468" height="351" /></a>Tief durchatmen und den Adapter nun an die große leere Stelle im MacBook einbauen:</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/Foto-3.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Foto 3" src="http://blog.bigbasti.com/uploads/Foto-3_thumb.jpg" border="0" alt="Foto 3" width="287" height="381" /></a></p>
<p>Und so sah dann das Ergebnis aus:</p>
<p><a class="thickbox" href="http://blog.bigbasti.com/uploads/Foto-2-1.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="Foto 2 (1)" src="http://blog.bigbasti.com/uploads/Foto-2-1_thumb.jpg" border="0" alt="Foto 2 (1)" width="468" height="352" /></a></p>
<p>Der Adapter ist minimal dicker als das DVD Laufwerk, weswegen etwas schwieriger war nun die ganzen Teile wieder zusammenzusetzen.</p>
<p>Da die Technik im MacBook extrem klein ist sehen dem entsprechend auch die Anschlüsse aus, und sind EXTREM winzig! Manchmal hatte ich schon Angst diese überhaupt zu berühren. Die Kontakte sind sehr klein und sehr nah bei einander und so gut wie jeder Geräteanschluss ist über einen Adapter an dem Motherboard angeschlossen.</p>
<p><strong>Inbetriebnahme</strong></p>
<p>Tatsächlich ist das MacBook nach der Operation auch wieder angegangen und hat beide Festplatten problemlos erkannt. Bisher funktioniert auch alles wie gewohnt.</p>
<p>Zu Performance will ich noch keine Angaben geben, da ich nun erst einmal dabei bin alles neu zu installieren. Was ich aber bisher sagen kann, ist, dass mir dieses kleine Geräusch fehlt, dass das DVD Laufwerk immer gemacht hat wenn es anging, dieses kleine “Zucken” wenn man so will.</p>
<p>Das ganze Gerät ist des weiteren komplett lautlos, wenn nicht grade ein Flash Video läuft. <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-style: none;" src="http://blog.bigbasti.com/uploads/wlEmoticon-winkingsmile.png" alt="Zwinkerndes Smiley" /></p>
<p><strong>Konfiguration</strong></p>
<p>Bei einer SSD gibt es auch einige Einstellungen, die man am Betriebssystem vornehmen <span style="text-decoration: line-through;">muss</span> sollte, um die Lebenserwartung zu erhöhen. Ein wenig Arbeit nimmt uns Windows 7 (und nur 7) ab und stellt schon mal die Defragmentierung ab und macht ein paar weitere Konfigurationen.</p>
<p>Die weiteren Schritte habe ich aus dieser <a href="http://goo.gl/AuEx" target="_blank">sehr guten Anleitung</a> wo alle weiteren wichtigen Schritte, wie das deaktivieren des Prefetching und Superfetching beschrieben wird.</p>
<p><strong>Testbericht</strong></p>
<p>Wenn ich ein wenig Zeit mit dem Gerät verbracht habe, werde ich hier auch noch einen gesonderten Erfahrungsbericht schreiben.</p>
<p>Wenn ihr Fragen haben solltet einfach hier als Kommentar posten.</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=1354&amp;md5=dfc0c3a534d91377436b3b25eff8e9f5" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/ein-steiniger-weg-superdrive-gegen-ssd-eintauschen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ScreenShot Helper &#8211; erleichert den Umgang mit Bildern in der Windows Zwischenablage</title>
		<link>http://blog.bigbasti.com/screenshot-helper-erleichert-den-umgang-mit-bildern-in-der-windows-zwischenablage/</link>
		<comments>http://blog.bigbasti.com/screenshot-helper-erleichert-den-umgang-mit-bildern-in-der-windows-zwischenablage/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 09:42:15 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Programme]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=1052</guid>
		<description><![CDATA[Heute mal etwas in eigener Sache: Ich habe mal wieder ein kleines Tool für Windows fertiggestellt welches euch das leben etwas erleichern kann. Die Rede ist von ScreenShot Helper.
Bild 1: Benachrichtigung über eine neue Grafik in der Zwischenablage
ScreenShot Helper ist dafür gedacht Grafiken, die ihr in die Zwischenablage steckt schnell und einfach zu verarbeiten. ...]]></description>
			<content:encoded><![CDATA[<p>Heute mal etwas in eigener Sache: Ich habe mal wieder ein kleines Tool für Windows fertiggestellt welches euch das leben etwas erleichern kann. Die Rede ist von<a href="http://hp.bigbasti.com/de/software.aspx?show=ssh" target="_blank"> ScreenShot Helper</a>.</p>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/ssh1_big.png"><img class="aligncenter size-full wp-image-1053" title="ssh1_big" src="http://blog.bigbasti.com/uploads/ssh1_big.png" alt="" width="506" height="137" /></a><em>Bild 1: Benachrichtigung über eine neue Grafik in der Zwischenablage</em></p>
<p>ScreenShot Helper ist dafür gedacht Grafiken, die ihr in die Zwischenablage steckt schnell und einfach zu verarbeiten. Ein Bleispiel: Ihr wollt einem Bekannten einen Fehler oder etwas anderes zeigen, dass auf eurem Bildschirm passiert. Wenn ihr nur die Windows Tools verwendet müsst ihr erst einen Screenshot machen, dann Paint (oder ein anderes Bildprogramm) starten die Grafik dort einfügen, das Bild speichern, nun müsst ihr eine Webseite suchen auf die ihr das hochladen wollt um dann schließlich den Link zu bekommen, den ihr eurem Freund geben könnt.</p>
<p>Mit ScreenShot Helper wird dieser Vorgang stark vereinfacht. Das Programm erkennt automatisch, dass eine neue Grafik in der Zwischenablage ist und zeigt euch das Fenster aus Bild1. Nun könnt ihr mit einem Klick das Bild speichern oder es mit ebenfalls einem Klick hochladen und bekommt direkt den Link den ihr weiter verteilen könnt.</p>
<p>Ich bin mir dessen völlig bewusst, dass es sehr viele sehr ähnliche Tools da draußen im Web gibt die diese und noch weitere Funktionalitäten bieten. Ich wollte aber einfach nur ein leichtes schnelles Tool haben, dass genau das macht was ich brauche und dass ich weiter anpassen kann.</p>
<p>Vielleicht könnt ihr ja auch soetwas gut gebrauchen. <a href="http://hp.bigbasti.com/de/software.aspx?show=ssh" target="_blank">Hier gehts zum Programm</a>.</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=1052&amp;md5=a62ef9261163e49509c43af7865ef648" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/screenshot-helper-erleichert-den-umgang-mit-bildern-in-der-windows-zwischenablage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Lizenzschlüssel aus der Registry auslesen</title>
		<link>http://blog.bigbasti.com/windows-lizenzschlussel-aus-der-registry-auslesen/</link>
		<comments>http://blog.bigbasti.com/windows-lizenzschlussel-aus-der-registry-auslesen/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 08:00:25 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mocrosoft Office]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=416</guid>
		<description><![CDATA[Da der Beitrag über das Auslesen des Office Schlüssels sehr beliebt ist, habe ich nun auch das Lesen des Windows Schlüssels als Beispiel verfasst.

Das Vorgehen hierbei ist sogar noch einfacher als beim Office Schlüssel, da es keine Aufteilungen in Versionen gibt! In allen Windows NT Versionen (also alle ab XP) befindet sich der Schlüssel ...]]></description>
			<content:encoded><![CDATA[<p>Da der <a href="http://http://blog.bigbasti.com/den-office-lizenzschlussel-aus-der-registry-auslesen/" target="_self">Beitrag über das Auslesen des Office Schlüssels</a> sehr beliebt ist, habe ich nun auch das Lesen des Windows Schlüssels als Beispiel verfasst.</p>
<p>Das Vorgehen hierbei ist sogar noch einfacher als beim Office Schlüssel, da es keine Aufteilungen in Versionen gibt! In allen Windows NT Versionen (also alle ab XP) befindet sich der Schlüssel in der Registry unter diesem Pfad:</p>
<blockquote><p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion</p></blockquote>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/winkey.png"><img class="aligncenter size-full wp-image-417" title="winkey" src="http://blog.bigbasti.com/uploads/winkey.png" alt="winkey" width="572" height="356" /></a><em>Bild 1: Der Registryordner mit dem Windows Schlüssel</em></p>
<p>In diesem Ordner finden wir den Binärwert "DigitalProductId", der viele Hexadezimalzeichen enthält!</p>
<p>Der Code ist hierbei dem aus dem Officebeispiel sehr ähnlich, da er ja auch nichts anderes macht, als den im HEX-Code vorhandenen Key in lesbare Schrift umzuwandeln! Die einzige Schwierigkeit hierbei besteht darin, den Key richtig zusammen zusetzen, denn es wird nicht das komplette Alphabet verwendet um einen Windows Key zu generieren sondern nur diese Zeichen:</p>
<blockquote><p>B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9</p></blockquote>
<p>Wenn man das beachtet steht einem nichts mehr im Wege! Der Code aus diesem Beispiel stammt ausnahmsweise nicht von mir sondern von vcware.de - danke dafür an dieser Stelle!</p>
<p>Ich habe diesbezüglich wie immer ein kleines Demoprojekt angefertigt, das ihr euch herunterladenkönnt! <a href="http://blog.bigbasti.com/winkeyfinder" target="_self">Download</a></p>
<p><strong>Bitte berichtet ob es bei euch gut geklappt hat.</strong><br />
<span style="color: #800000;"><strong>Hier könnt ihr euch das komplette kostenlose Programm zum auslesen von Windows &amp; Office key <a href="http://hp.bigbasti.com/de/software.aspx?show=gmkb" target="_blank">herunterladen</a>.</strong></span> (English &amp; Deutsch)</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=416&amp;md5=e997038bbf6dc28a77ae0f43cbac4d81" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/windows-lizenzschlussel-aus-der-registry-auslesen/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Windows 7 und seine Schönheitsfehler Teil 2: Die Taskleiste</title>
		<link>http://blog.bigbasti.com/windows-7-und-seine-schonheitsfehler-teil-2-die-taskleiste/</link>
		<comments>http://blog.bigbasti.com/windows-7-und-seine-schonheitsfehler-teil-2-die-taskleiste/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 18:18:08 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programme]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=578</guid>
		<description><![CDATA[Letzte Woche habe ich unter Windows 7 etwas sehr seltsames beobachtet. Nach dem ich ein kleines Programm geschrieben hatte, dass ich zwischendurch nutzen wollte, wollte ich dieses an die Taskleiste "pinnen", damit ich es immer schnell griffbereit habe!
Bild 1: Links: Wie es sein sollte. Rechts: So sieht das "Problem" aus

Doch Pustekuchen! Ich konnte das ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.bigbasti.com/uploads/win77.png"><img class="alignleft size-full wp-image-662" title="win7" src="http://blog.bigbasti.com/uploads/win77.png" alt="win7" width="53" height="53" /></a>Letzte Woche habe ich unter Windows 7 etwas sehr seltsames beobachtet. Nach dem ich ein kleines Programm geschrieben hatte, dass ich zwischendurch nutzen wollte, wollte ich dieses an die Taskleiste "pinnen", damit ich es immer schnell griffbereit habe!</p>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/win75.png"><img class="aligncenter size-full wp-image-580" title="win75" src="http://blog.bigbasti.com/uploads/win75.png" alt="win75" width="554" height="146" /></a><em>Bild 1: Links: Wie es sein sollte. Rechts: So sieht das "Problem" aus</em></p>
<p>Doch Pustekuchen! Ich konnte das Programm, ja nicht mal eine Verknüpfung, die auf das Programm linkte an die Taskleiste pinnen! Seltsam, denn andere Programme, auch selbstgeschriebene, konnte ich problemlos anpinnen!</p>
<p>Woran kann das liegen? Alle Optionen, die man von anderen Programmen kennt waren nicht da! Die ganze Jumplist hatte nur den Eintrag "Fenster schließen". Die anderen Optionen wie "Programm an die Taskleiste pinnen" waren alle weg!</p>
<p>Die erste Vermutung war natürlich, es liegt am Code! - Son Mist - Also habe ich losgelegt und das Programm Stück für Stück von verschiedenen Codeteilen befreit bis ich garkeinen Code mehr im Programm hatte. Aber das "Problem" war immernoch nicht behoben!</p>
<p>Wie gesagt konnte ich andere Programme, die ich selbst gemacht habe anpinnen, nur dieses eine nicht. Also habe ich das getan, was jeder kompetente Programmierer tun würde, ich befragte Google! <img src='http://blog.bigbasti.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Leider konnte ich nichts wirklich brauchbares finden, das meinen Fall bestätigte. Schließlich wollte ich schon aufgeben und das Projekt neu anlegen, in der Hoffnung es würde nicht wieder auftauchen.</p>
<p>Zu meinem Glück habe ich davor ein Skript (an dem ich zur Zeit etwas herum spiel) verwendet, dass dieses Programm  (zusammen mit vielen anderen Dateien) umbenannt hatte. Nun hieß das Programm "ax4b.exe". und Überraschung - ich konnte es anpinnen.</p>
<p><strong>Es lag am Namen!</strong></p>
<p>Als ich dem Programm wieder seinen Originalnamen verlieh konnte ich es wieder nicht anpinnen! Achja, das Programm heißt "Uploadhelper.exe"</p>
<p>Wie es also scheint, sind bestimmte Programme unter Windows 7 von der Fähigkeit befreit sich an die Taskleiste pinnen zu können.</p>
<p>Wie ich dann nach einer weiteren Internetrecherche herausgefunden habe gibt es einen Registryeintrag namens "AddRemovenames" derhier zu finden ist:</p>
<blockquote><p><em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\AddRemoveNames</em></p></blockquote>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/win76.png"><img class="aligncenter size-full wp-image-584" title="win76" src="http://blog.bigbasti.com/uploads/win76.png" alt="win76" width="594" height="402" /></a><em>Bild 2: Der Registryeintrag mit den "verbotenen" Namen</em></p>
<p>Dieser enthält alle Schlüsselwörter, die alle Programme, die eins dieser Wörter im Namen <span style="text-decoration: underline;">beinhalten</span>, nicht an die Taskleiste pinnen lässt! Diese Wörter sind:</p>
<blockquote><p><em>Documentation;Help;Install;More Info;Readme;Read me;Read First;Setup;Support;What's New;Remove</em></p></blockquote>
<p>Und da mein Programm das Wort "help" im Namen hatte wurde es von dieser Regel betroffen.</p>
<p>Es scheint so zu sein, dass Microsoft keine Hilfe oder Setup Programme in der Taskleiste sehen will. Wobei ich wirklich nicht verstehen kann, warum "Documentation" in der Liste steht!</p>
<p>Also hat man als Entwickler nun die Wahl: Entweder man benennt sein Programm um, oder man löscht den entsprechenden Eintrag aus diesem Registryeintrag. Von dem letzteren würde ich allerdings abraten, da es ein enormer Eingriff in die Benutzereinstellungen wäre, und wer weiß, vielleicht benutzen noch andere Dienste diesen Eintrag und funktionieren dann eventuell nicht mehr!</p>
<p>Wenn man von dieser Beschränkung nichts weiß, kann es einen schon in den Wahnsinn treiben, denn wer vermutet denn bitte, dass es an dem Namen liegt?</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=578&amp;md5=46265961243d22bbc04ef2fcf0ba2d8a" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/windows-7-und-seine-schonheitsfehler-teil-2-die-taskleiste/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VB.NET: Dateioperationen mit Fortschrittsanzeige Teil 3 &#8211; Wiederaufnahme von Downloads</title>
		<link>http://blog.bigbasti.com/vbnet-dateioperationen-mit-fortschrittsanzeige-teil-3-wiederaufnahme-von-downloads/</link>
		<comments>http://blog.bigbasti.com/vbnet-dateioperationen-mit-fortschrittsanzeige-teil-3-wiederaufnahme-von-downloads/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 20:26:22 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=516</guid>
		<description><![CDATA[Wenn man grafische Oberflächen entwickelt wird man irgendwann an dem Punkt kommen wo man Dateien kopieren, verschieben oder herunterladen will. Wenn diese nicht grade wenig und klein sind bietet es sich natürlich an eine Fortschrittanzeige dafür zu erstellen. Damit wird sich diese Serie beschäftigen.

Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch

Wer kennt das ...]]></description>
			<content:encoded><![CDATA[<p>Wenn man grafische Oberflächen entwickelt wird man irgendwann an dem Punkt kommen wo man Dateien kopieren, verschieben oder herunterladen will. Wenn diese nicht grade wenig und klein sind bietet es sich natürlich an eine Fortschrittanzeige dafür zu erstellen. Damit wird sich diese Serie beschäftigen.</p>
<p><strong>Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch</strong></p>
<p>Wer kennt das nicht, man lädt eine große Datei herunter und plötzlich bricht die Internetverbindung ab. Alles umsonst, und der Download muss neu gestartet werden!</p>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/webloadgoon1.png"><img class="aligncenter size-full wp-image-521" title="webloadgoon1" src="http://blog.bigbasti.com/uploads/webloadgoon1.png" alt="webloadgoon1" width="475" height="171" /></a><em>Bild 1: Das Demoprojekt bei der Wiederaufnahme des Downloads</em></p>
<p>Viele Downloadmanager heutzutage unterstützen das so genannte "wiederaufnehmen" von Downloads, sodass man nach einem Abbruch nicht die ganze Datei von vorne laden muss.</p>
<p>Doch wie funktioniert das? In diesem Teil werden wir das Projekt aus Beispiel 2 um diese Funktionalität erweitern. Und es ist erschreckend einfach und benötigt nur eine geringe Modifikation!</p>
<p>Zunächst einmal die Theorie. Wenn ihr in den Code aus Teil 2 schaut werdet ihr feststellen, dass beim herunterladen der Datei ein Strom aufgebaut wird, aus dem wir die Daten herunterladen und lokal speichern.</p>
<p>Wenn ihr den Code aus dem Form_Closing() Ereignis löscht, und dann einen laufenden Download durch das Beenden des Programms abbrecht, werdet ihr feststellen, dass die "temporäre" Datei nochimmer auf der Festplatte liegt!</p>
<p>Diese Datei ist natürlich nutzlos, da wir nur eine Teilmenge davon geladen haben. Aber da wir herausfinden können, wieviele Bytes wir schon geladen haben wissen wir schon wo wir wieder ansetzen müssen!</p>
<p>Dementsprechend müssen wir den neuen Download nicht an Stelle 0 im Strom starten, sondern an stelle [Anzahl heruntergeladener bytes].</p>
<p>Ich möchte jetzt nicht den ganzen Code hier posten sondern nur die Schlüsselstelle  hier:</p>
<pre>
<pre class="brush: vb.net; ">

        Dim request As HttpWebRequest = HttpWebRequest.Create(url)

        request.Proxy = Nothing
        request.AddRange(CInt(curBytes))

        Dim response As HttpWebResponse = request.GetResponse

        If Not response.StatusCode = HttpStatusCode.PartialContent Then
            &#039;falls der Server wiederaufnahme nicht unterstützt bei 0 anfangen
            curBytes = 0
        End If
</pre>
</pre>
<p>Man muss beim erstellen des Requests und noch vor dem Response dem Server mitteilen, ab wo er die Daten schicken soll, da wir ja nicht die ganze Datei brauchen!</p>
<p>Dies machen wir mit dem Befehl request.<a href="http://msdn.microsoft.com/de-de/library/4ds43y3w(VS.80).aspx" target="_self">AddRange</a>(CInt(curBytes)) der dafür sorgt, dass der Stream an der von uns gewünschten Stelle startet!</p>
<p>Leider unterstützen nicht alle Server die Wiederaufnahme von Downloads. So kann es vorkommen, dass der Download nicht fortgesetzt werden kann. Diesen besonderen Fall muss man natürlich behandeln.</p>
<p>Wenn wir die Antwort vom Server bekommen (Response) können wir prüfen, welche Statusmeldung der Server zurückgegeben hat. Dafür benutzen wir die Methode response.<a href="http://msdn.microsoft.com/de-de/library/system.net.httpwebresponse.statuscode(VS.95).aspx" target="_self">StatusCode</a>.</p>
<p>Wenn alles gut gelaufen ist und der Server die Wiederaufnahme zulässt bekommen wir den Status Code 206 - <span class="selflink">PartialContent. Wenn der Server es nicht unterstützt kriegen wir den Code 200 - OK. </span></p>
<p><span class="selflink">Eine komplette Liste mit den Server Responses findet ihr im <a href="http://msdn.microsoft.com/de-de/library/system.net.httpstatuscode(VS.95).aspx" target="_self">MSDN</a>!</span></p>
<p><span class="selflink">Wenn wir den Code 200 bekommen müssen wir die Datei wieder von Null laden und müssen darauf mit der Rücksetzung im Code reagieren!</span></p>
<p><span class="selflink">Ich setze in der Demo noch den Proxy auf Null. Das mache ich, da ich ein paar Probleme hatte und der Stream etwas falsch ankam. Ihr könnt es gerne mal ohne diesen Befehl testen und dann hier berichten.<br />
</span></p>
<p>Um das ganze zu testen könnt ihr euch die Demo laden. Startet dann einfach einen Download und unterbrecht diesen irgendwo in der Mitte. Dann startet das Programm neu und startet den selben Download nochmal.</p>
<p>Ihr werdet nun gefragt, ob ihr diese Datei überschreiben wollt (Standartfrage von Windows) und ob ihr dann den Download fortsetzen wollt. Beides mit "Ja" beantworten.</p>
<p>Nun müsste das Programm den Download wiederaufnehmen.</p>
<p>Das Demoprojekt gibt es hier: <a href="http://blog.bigbasti.com/webdlv2" target="_blank">Download</a></p>
<p><a href="../vbnet-dateioperationen-mit-fortschrittsanzeige-teil-1-kopieren-verschieben/" target="_blank">Teil 1 - Kopieren und Verschieben von Dateien</a><br />
<a href="http://blog.bigbasti.com/vbnet-dateioperationen-mit-fortschrittsanzeige-teil-2-download-von-dateien/">Teil 2 - Download von Dateien</a><br />
Teil 3 - Wiederaufnahme von Downloads nach einem Abbruch<br />
Teil 4 - <span><span>Upload</span></span> von Dateien</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=516&amp;md5=2cc01d43f07b277a0f8039fd9ff8ccc5" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/vbnet-dateioperationen-mit-fortschrittsanzeige-teil-3-wiederaufnahme-von-downloads/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kostenloses Windows 7 E-Book von Microsoft</title>
		<link>http://blog.bigbasti.com/kostenloses-windows-7-e-book-von-microsoft/</link>
		<comments>http://blog.bigbasti.com/kostenloses-windows-7-e-book-von-microsoft/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 17:19:04 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=469</guid>
		<description><![CDATA[Wer schon mal ein Buch von Microsoft Press gekauft hat weis, dass diese Bücher Gold wert sind! Nun gibts ein Buch gratis als Download bis zum 31.10.


Das Buch beschäftigt sich mit Windows 7 und seinen Grundfunktionen:


	Programme und Mini-Anwendungen ausführen
	E-Mails senden, Termine planen, im Web surfen
	Fotos, Musik und Videos organisieren, Spiele spielen
	CDs und DVDs brennen ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Wer schon mal ein Buch von Microsoft Press gekauft hat weis, dass diese Bücher Gold wert sind! Nun gibts ein Buch gratis als Download bis zum 31.10.</p>
<p style="text-align: left;"><img class="alignnone" title="book.gif" src="http://register.microsoft-press.de/images/book.gif" alt="" width="452" height="372" /></p>
<p style="text-align: left;">
<p style="text-align: left;">Das Buch beschäftigt sich mit Windows 7 und seinen Grundfunktionen:</p>
<ul style="margin: 0pt 0pt 0pt 25px; padding: 0pt; text-align: left;">
<li>Programme und Mini-Anwendungen ausführen</li>
<li>E-Mails senden, Termine planen, im Web surfen</li>
<li>Fotos, Musik und Videos organisieren, Spiele spielen</li>
<li>CDs und DVDs brennen und eigene Filme erstellen</li>
<li>Drucker einrichten und ein Heimnetzwerk erstellen</li>
<li>Sicherheit verbessern und Windows 7 optimal einrichten</li>
</ul>
<p style="text-align: left;">Das Buch ist vor allem für Leute empfehlenswert, die noch nicht so viel Erfahrung mit Computern (Windows) sammeln konnten. Also wer noch eine Freundin hat kann der ja das Buch mal unterjubeln! <img src='http://blog.bigbasti.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: left;">Ich habs mir mal vorsichtshalber mal gesichert  - kost ja nix!</p>
<p style="text-align: left;">Zu finden hier: <a class="newslink" href="http://register.microsoft-press.de/" target="_blank">Windows 7 - Auf einen Blick</a></p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=469&amp;md5=7be25712a396a3f608f7af4a6ac0eec9" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/kostenloses-windows-7-e-book-von-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7  überzeugt mit tollem Treibermanagement</title>
		<link>http://blog.bigbasti.com/windows-7-uberzeugt-mit-tollem-treibermanagement/</link>
		<comments>http://blog.bigbasti.com/windows-7-uberzeugt-mit-tollem-treibermanagement/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 18:12:44 +0000</pubDate>
		<dc:creator>Sebastian Gross</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programme]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.bigbasti.com/?p=465</guid>
		<description><![CDATA[Seit nun ca 2 Monaten nutze ich Windows 7 Professional und bin sehr begeistert von diesem "Besten Windows aller Zeiten" wie Microsoft es sagt.

Warum? Nicht nur dass es sehr schnell läuft, die neuen Netzwerk Funktionen, dank welcher LAN Party noch mehr Spaß machen werden aber auch die neue Taskleiste (die "Superbar") sehr gut umgesetzt ...]]></description>
			<content:encoded><![CDATA[<p>Seit nun ca 2 Monaten nutze ich Windows 7 Professional und bin sehr begeistert von diesem "Besten Windows aller Zeiten" wie Microsoft es sagt.</p>
<p>Warum? Nicht nur dass es sehr schnell läuft, die neuen Netzwerk Funktionen, dank welcher LAN Party noch mehr Spaß machen werden aber auch die neue Taskleiste (die "Superbar") sehr gut umgesetzt ist.</p>
<p>Was einem aber nicht gleich ins Auge springt, sind die Neuerungen "unter der Haube". So ist mir heute, als ich meinen Drucker an dem PC anschloss folgendes aufgefallen:</p>
<p style="text-align: center;"><a href="http://blog.bigbasti.com/uploads/treiber.png"><img class="aligncenter size-full wp-image-466" title="treiber" src="http://blog.bigbasti.com/uploads/treiber.png" alt="treiber" width="536" height="242" /></a><em>Bild 1: Automatisch Treiberinstallation</em></p>
<p>Wie immer wenn man ein neues Gerät an dem Computer schließt erscheint der Treiber Assistent und versucht passende Treiber zu finden. Dies gelang ihm aber in früheren Windows Versionen aber (so gut wie) nie!</p>
<p>So musste ich immer meine Treiber CD von Canon rauskramen und die Treiber installieren, die ca 100 MB Groß waren, warum auch immer!</p>
<p>So war ich umsomehr überrascht als Windows alles eigenständig erkannte und installierte. Und das mit nur 10 MB statt 100! Das ganze habe ich gleich auch noch mit einem Nokia 95 getestet, dass eigentlich die Nokia PC Suite benötigt.</p>
<p>Auch diese wurde heruntergeladen und installiert! Also hier mal ein riesen Komplement an Microsoft.</p>
<p>Windows 7 ist in meinen Augen ein sehr gelungenes OS geworden! Ich selber nutze es auf meinem Macbook Unibody neben Snow Leopard. Wobei ich Mac OS schon seit knapp einem Monat nicht mehr gebootet habe, was schon was heißt finde ich!</p>
<p class="wp-flattr-button"></p> <p><a href="http://blog.bigbasti.com/?flattrss_redirect&amp;id=465&amp;md5=1a0caff57ab2ca624cef65712dedfaae" title="Flattr" target="_blank"><img src="http://blog.bigbasti.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bigbasti.com/windows-7-uberzeugt-mit-tollem-treibermanagement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

