<?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>Alexander Kiel &#187; Web Development</title>
	<atom:link href="http://www.alexanderkiel.net/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexanderkiel.net</link>
	<description>On Photography and other Things</description>
	<lastBuildDate>Wed, 27 Jan 2010 15:13:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Status of TLS/SNI in 04/2008</title>
		<link>http://www.alexanderkiel.net/2008/04/22/status-of-tls-sni/</link>
		<comments>http://www.alexanderkiel.net/2008/04/22/status-of-tls-sni/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 12:54:48 +0000</pubDate>
		<dc:creator>Alexander Kiel</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[CAcert]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[SNI]]></category>
		<category><![CDATA[TLS]]></category>

		<guid isPermaLink="false">http://alexk.homeip.net/?p=76</guid>
		<description><![CDATA[Since I share a VPS with Georg I&#8217;m interested in SNI to be able to drive various HTTPS sites on the same machine with only one IP.

If you use only HTTP, the Apache virtual host feature will do the magic already for many years. But with HTTPS you are out of luck until now. The [...]]]></description>
			<content:encoded><![CDATA[<p>Since I share a <acronym title="Virtual Private Server">VPS</acronym> with Georg I&#8217;m interested in <acronym title="Server Name Indication">SNI</acronym> to be able to drive various <acronym title="Hypertext Transfer Protocol over Secure Socket Layer">HTTPS</acronym> sites on the same machine with only one IP.</p>

<p>If you use only <acronym title="Hypertext Transfer Protocol">HTTP</acronym>, the Apache virtual host feature will do the magic already for many years. But with <acronym title="Hypertext Transfer Protocol over Secure Socket Layer">HTTPS</acronym> you are out of luck until now. The problem is the <acronym title="Transport Layer Security">TLS</acronym> handshake, which does not have something like the <code>Host</code> header in <acronym title="Hypertext Transfer Protocol">HTTP</acronym>. Because the <acronym title="Hypertext Transfer Protocol">HTTP</acronym> stream is covered by encryption until the <acronym title="Transport Layer Security">TLS</acronym> handshake is done, Apache has no chance to read the <code>Host</code> field to choose the right virtual host from the beginning on. So you are out of luck to deliver the right certificate to the client. Certificate hostname mismatches will arise in the users browser, which is not desirable.</p>

<p><span id="more-76"></span></p>

<p>As a solution for this secure virtual hosting problem the <a href="http://www.ietf.org/rfc/rfc4366.txt"><acronym title="Request for Comments">RFC</acronym> 4366</a> defines <acronym title="Server Name Indication">SNI</acronym> in section 3.1. The first <acronym title="Request for Comments">RFC</acronym> where <acronym title="Server Name Indication">SNI</acronym> is mentioned is <a href="http://www.ietf.org/rfc/rfc3546.txt"><acronym title="Request for Comments">RFC</acronym> 3546</a> which was issued in mid 2003, but until today in early 2008 Apache does not support <acronym title="Server Name Indication">SNI</acronym> per default. It seems to be a chicken and egg problem as described in <a href="http://utcc.utoronto.ca/~cks/space/blog/web/SSLNameProblemII"><acronym title="Server Name Indication">SNI</acronym> doesn&#8217;t work in practice</a>. On the one side the major web server Apache does not support it and on the other side the major browsers were slow to jump on. Opera 8 was the first in 2005, but important public browsers like <acronym title="Internet Explorer">IE</acronym> are still lacking support. Also major sites don&#8217;t bother because they have enough IP&#8217;s.</p>

<h2>Browser Compatibility Table</h2>

<p>I compiled a browser compatibility table to document the status of <acronym title="Transport Layer Security">TLS</acronym>/<acronym title="Server Name Indication">SNI</acronym> in April 2008. If you look at the table, the problem is located at WinXP and Webkit. While I assume that Webkit browsers will match up on OSX and Linux, I&#8217;m not sure about WinXP. On WinXP the lack of support (at least for <acronym title="Internet Explorer">IE</acronym>) is in the OS itself. IE7 running under Vista has support for <acronym title="Server Name Indication">SNI</acronym>, but under WinXP not.</p>

<table>
<thead>
<tr>
<th></th>
<th scope="row">WinXP</th>
<th scope="row">Vista</th>
<th scope="row">Linux</th>
<th scope="row">OSX</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="col"><acronym title="Internet Explorer">IE</acronym> 6<sup><a class="footnote" href="#ref-1">[1]</a></sup></th>
<td class="no"><span>no</span></td>
<td class="na" colspan="3"><span>N/A</span></td>
</tr>
<tr>
<th scope="col"><acronym title="Internet Explorer">IE</acronym> 7<sup><a class="footnote" href="#ref-2">[2]</a></sup></th>
<td class="no"><span>no</span></td>
<td class="yes"><span>yes</span></td>
<td class="na" colspan="2"><span>N/A</span></td>
</tr>
<tr>
<th scope="col"><acronym title="Internet Explorer">IE</acronym> 8<sup><a class="footnote" href="#ref-3">[3]</a></sup></th>
<td class="no"><span>no</span></td>
<td class="yes"><span>yes</span></td>
<td class="na" colspan="2"><span>N/A</span></td>
</tr>
<tr>
<th scope="col">Firefox 2<sup><a class="footnote" href="#ref-4">[4]</a></sup></th>
<td class="yes" colspan="4"><span>yes</span></td>
</tr>
<tr>
<th scope="col">Safari 3<sup><a class="footnote" href="#ref-5">[5]</a></sup></th>
<td class="no"><span>no</span></td>
<td><span>don&#8217;t know</span></td>
<td class="na"><span>N/A</span></td>
<td><span>don&#8217;t know</span></td>
</tr>
<tr>
<th scope="col">Opera 8+</th>
<td class="yes" colspan="4"><span>yes</span></td>
</tr>
<tr>
<th scope="col">Konqueror 3.5<sup><a class="footnote" href="#ref-6">[6]</a></sup></th>
<td class="na" colspan="2"><span>N/A</span></td>
<td class="no"><span>no</span></td>
<td class="na"><span>N/A</span></td>
</tr>
<tr>
<th scope="col">Konqueror 4<sup><a class="footnote" href="#ref-7">[7]</a></sup></th>
<td class="na" colspan="2"><span>N/A</span></td>
<td><span>unsure</span></td>
<td class="na"><span>N/A</span></td>
</tr>
</tbody>
</table>

<dl class="footnote">
<dt id="ref-1">[1]</dt>
<dd>
Tested as not working with <acronym title="Internet Explorer">IE</acronym> 6.0.2900.2180 on WinXP SP2 without any updates.
</dd>
<dt id="ref-2">[2]</dt>
<dd>
According IEBlog: <a href="http://blogs.msdn.com/ie/archive/2005/10/22/483795.aspx">Upcoming <acronym title="Hypertext Transfer Protocol over Secure Socket Layer">HTTPS</acronym> Improvements in Internet Explorer 7 Beta 2</a>. Tested as not working with <acronym title="Internet Explorer">IE</acronym> 7.0.5730.13 on WinXP SP2 with all updates until 04/22/2008.
</dd>
<dt id="ref-3">[3]</dt>
<dd>
Tested as not working with <acronym title="Internet Explorer">IE</acronym> 8.0.6001.17184 beta on WinXP SP2 with all updates until 04/22/2008.
</dd>
<dt id="ref-4">[4]</dt>
<dd>
According to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=116169">bug #116169</a>. Tested as working with Firefox 2.0.0.12 on Ubuntu 7.10 with all updates. 
</dd>
<dt id="ref-5">[5]</dt>
<dd>
Tested as not working with Safari 3.1.1 (525.18) on WinXP SP2 with all updates until 04/22/2008. 
</dd>
<dt id="ref-6">[6]</dt>
<dd>
Tested as not working with Konqueror 3.5.5-ubuntu3 on Ubuntu 6.10 with no updates (plain <acronym title="Digital Versatile Disc">DVD</acronym>). I only installed Konqueror from edgy main. 
</dd>
<dt id="ref-7">[7]</dt>
<dd>
More info at <a href="http://bugs.kde.org/show_bug.cgi?id=122433">bug #122433</a>.
</dd>
</dl>

<h2>At the End</h2>

<p>I think its not feasible to use <acronym title="Server Name Indication">SNI</acronym> today. Its best to look at it again in one or two years. I found another solution for my <acronym title="Hypertext Transfer Protocol over Secure Socket Layer">HTTPS</acronym> problem. I use one certificate for the whole server, which has multiple domain names in it. Its possible through multiple SubjectAltNames in the certificate. <a href="http://wiki.cacert.org/">CAcert</a> issues such certificates. All browsers accept certificates where the domain name matches one of the DNS SubjectAltNames.</p>

<h2>Resources</h2>

<ul>
<li>a <a href="https://sni.velox.ch/"><acronym title="Server Name Indication">SNI</acronym> test site</a>, so you can see if your environment supports it.</li>
<li><a href="http://daniel-lange.com/archives/2-Multiple-Apache-VHosts-on-the-same-IP-and-port.html">Daniel Lange&#8217;s summary of what supports <acronym title="Server Name Indication">SNI</acronym></a></li>
<li><a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=34607">the apache ticket to add <acronym title="Server Name Indication">SNI</acronym></a></li>
<li><a href="http://trac.lighttpd.net/trac/ticket/386">the lighttpd ticket to add <acronym title="Server Name Indication">SNI</acronym></a></li>
<li><a href="http://wiki.cacert.org/wiki/VhostTaskForce">VhostTaskForce at CAcert wiki</a></li>
<li><a href="http://wiki.cacert.org/wiki/VhostsApache">VhostsApache at CAcert wiki</a></li>
<li>Paul explains how <a href="http://journal.paul.querna.org/articles/2005/04/24/tls-server-name-indication/?postid=70"><acronym title="Transport Layer Security">TLS</acronym> Server Name Indication</a> works.</li>
<li>Ubuntu <a href="https://blueprints.launchpad.net/ubuntu/+spec/apache-tls-sni">Apache <acronym title="Transport Layer Security">TLS</acronym> to support <acronym title="Server Name Indication">SNI</acronym></a> Blueprint</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.alexanderkiel.net/2008/04/22/status-of-tls-sni/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using wget and the WDG Offline Validator to link check and validate your whole web site</title>
		<link>http://www.alexanderkiel.net/2007/09/18/using-wget-and-the-wdg-offline-validator-to-link-check-and-validate-your-whole-web-site/</link>
		<comments>http://www.alexanderkiel.net/2007/09/18/using-wget-and-the-wdg-offline-validator-to-link-check-and-validate-your-whole-web-site/#comments</comments>
		<pubDate>Tue, 18 Sep 2007 18:10:13 +0000</pubDate>
		<dc:creator>Alexander Kiel</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://alexk.homeip.net/2007/09/18/using-wget-and-the-wdg-offline-validator-to-link-check-and-validate-your-whole-web-site/</guid>
		<description><![CDATA[If you have a large web site or web application and care about dead links and valid HTML, it is a real pain to check for this. While I did run into this issue I collected some tools which I will present you now. 

While the fastest way for manual link checking is the LinkChecker [...]]]></description>
			<content:encoded><![CDATA[<p>If you have a large web site or web application and care about dead links and valid <acronym title="HyperText Markup Language">HTML</acronym>, it is a real pain to check for this. While I did run into this issue I collected some tools which I will present you now. <span id="more-35"></span></p>

<p>While the fastest way for manual link checking is the <a href="https://addons.mozilla.org/en-US/firefox/addon/532">LinkChecker Firefox Plugin</a>, it is not so easy to check our whole site for 404&#8217;s. Same thing with validation. For fast manual checking of a single page I would recommend to install the <a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer Toolbar</a> in Firefox and simply press Shift + Ctrl + H or Shift + Ctrl + A. But how to validate all pages or our site? And how doing it offline for performance reasons?</p>

<p>My approach is to mirror the whole web site with wget, look at the wget log for dead links and use the <acronym title="Web Design Group">WDG</acronym> Offline Validator to validate the mirrored <acronym title="HyperText Markup Language">HTML</acronym> pages.</p>

<h2>Mirror with wget</h2>

<p>I assume, you use Linux or a Unix like system. So wget wouldn&#8217;t be new for you or you will be able to get it for your system. It&#8217;s a pretty basic but powerful tool.</p>

<p>First you should create a new directory where wget could download all your pages. On your console you can execute this command line to get your whole site:</p>

<ol class="code"><li class="alt"><code>wget --mirror --keep-session-cookies -o wget.log</code></li></ol>

<p>I use the <code>--mirror</code> switch to simply fetch all. The <code>--keep-session-cookies</code> switch is useful is your site is dynamically created as this blog for example. <code>-o wget.log</code> says, it should put the output into this file. Be sure your server would hold against the stress!</p>

<p>Once wget finishes, you could use <code>less</code> or your favorite editor to search inside the wget.log for 404&#8217;s and the string <code>error</code>. This is all what you will need for link checking.</p>

<h2>Validation with the <acronym title="Web Design Group">WDG</acronym> Offline Validator</h2>

<p>I searched a while for a usable offline validator. The W3C one is a <acronym title="Common Gateway Interface">CGI</acronym> script which needs a running Apache and you have to do a <acronym title="Hypertext Transfer Protocol">HTTP</acronym> post in order to check your local <acronym title="HyperText Markup Language">HTML</acronym> file. It is basically the same thing as the public W3C Validator. The next one I did not choose is a Windows application called <a href="http://arealvalidator.com/">A Real Validator</a>. The disadvantages are that it costs money and has a little bit dated <acronym title="Graphical User Interface">GUI</acronym> which does not allow to filter for only invalid pages. So you have to scroll though hundreds of valid pages to find your invalide ones.</p>

<p>So at the end I use the <a href="http://htmlhelp.com/tools/validator/offline/index.html.en"><acronym title="Web Design Group">WDG</acronym> Offline Validator</a>. You can get it from this site but the best thing is that <a href="http://www.debian.org/">Debian</a> and <a href="http://www.ubuntu.com">Ubuntu</a> have it available in there package repositories. So you can just type:</p>

<ol class="code"><li class="alt"><code>sudo apt-get install wdg-html-validator</code></li></ol>

<p>(Be sure you have the universe repository in our list.)</p>

<p>To validate all the <acronym title="HyperText Markup Language">HTML</acronym> pages wget downloaded, just type:</p>

<ol class="code"><li class="alt"><code>find . -name "*.html" -exec validate -w {} \; &gt; validation.log</code></li></ol>

<p>This command finds all yout <acronym title="HyperText Markup Language">HTML</acronym> files in your current directory, executes the validate command on everyone and outputs the results in the validation.log file. While this runs, you can look at the validation.log with tail or you can view it afterwards in whatever editor you like best.</p>

<p>So that is basically all what you need to check your whole site for dead links and valid <acronym title="HyperText Markup Language">HTML</acronym>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.alexanderkiel.net/2007/09/18/using-wget-and-the-wdg-offline-validator-to-link-check-and-validate-your-whole-web-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some thoughts on Web Standards</title>
		<link>http://www.alexanderkiel.net/2007/08/30/some-thoughts-on-web-standards/</link>
		<comments>http://www.alexanderkiel.net/2007/08/30/some-thoughts-on-web-standards/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 12:52:34 +0000</pubDate>
		<dc:creator>Alexander Kiel</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://alexk.homeip.net/2007/08/30/some-thoughts-on-web-standards/</guid>
		<description><![CDATA[Today I&#8217;m on the way to renew my blog. One question that I ask me is: Should I use HTML 4.01 Strict or XHTML 1.0 Strict? To decide this I currently look thought blogs and web pages of well known web standard gurus. 

On 456 Berea Street I read the following on the Accessibility Page:



This [...]]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;m on the way to renew my blog. One question that I ask me is: Should I use <acronym title="HyperText Markup Language">HTML</acronym> 4.01 Strict or <acronym title="Extensible HyperText Markup Language">XHTML</acronym> 1.0 Strict? To decide this I currently look thought blogs and web pages of well known web standard gurus. <span id="more-5"></span></p>

<p>On <a href="http://www.456bereastreet.com">456 Berea Street</a> I read the following on the <a href="http://www.456bereastreet.com/accessibility/">Accessibility Page</a>:</p>

<blockquote>
<p>
This site is built on valid <acronym title="HyperText Markup Language">HTML</acronym> 4.01 Strict for structure and <acronym title="Cascading Style Sheets">CSS</acronym> for presentation.
</p>
<p>
A modern web browser like Firefox, Safari or Opera is needed to make the most out of this site, but thanks to the separation of content and presentation it should be accessible to any browsing device, including Internet Explorer.
</p>
</blockquote>

<p>Take this as the funny part of this post. Now I&#8217;m going into the silly <acronym title="HyperText Markup Language">HTML</acronym> vs. <acronym title="Extensible HyperText Markup Language">XHTML</acronym> discussion.</p>

<h3><acronym title="HyperText Markup Language">HTML</acronym> 4.01 Strict?</h3>

<p>So the real cracks use <acronym title="HyperText Markup Language">HTML</acronym> 4.01 Strict today even if they used <acronym title="Extensible HyperText Markup Language">XHTML</acronym> in the past. The key point choosing <acronym title="Extensible HyperText Markup Language">XHTML</acronym> is senseless today is that you have to deliver (X)<acronym title="HyperText Markup Language">HTML</acronym> pages as text/html because the famous Internet Explorer doesn&#8217;t understand application/xhtml+xml. But if you deliver as text/html all browsers interpret your nice <acronym title="Extensible HyperText Markup Language">XHTML</acronym> as tag soup anyway. Thats why some of the people caring about this stuff switched back to <acronym title="HyperText Markup Language">HTML</acronym>.</p>

<p>After playing some time with Wordpress and its Themes/Plugins I realized that it is not simple to switch to <acronym title="HyperText Markup Language">HTML</acronym> 4.01 Strict. The whole Wordpress world uses <acronym title="Extensible HyperText Markup Language">XHTML</acronym> 1.0 and every single peace outputs <code> /></code> instead of <code>></code> on empty tags. So without rewriting nearly all Wordpress code, it would not be possible to generate real valid <acronym title="HyperText Markup Language">HTML</acronym>.</p>

<p>The other fact that pushes me towards <acronym title="Extensible HyperText Markup Language">XHTML</acronym> is a article of Christoph Schneegans which reads <a class="external" href="http://schneegans.de/web/xhtml/" hreflang="de"><acronym title="Extensible HyperText Markup Language">XHTML</acronym> oder <acronym title="HyperText Markup Language">HTML</acronym>?</a>. He says that a <acronym title="HyperText Markup Language">HTML</acronym> Validator wouldn&#8217;t complain about valid SGML shortcuts which can cause rendering errors in browsers. To cite him &#8211; this markup is perfectly valid HTML:</p>

<blockquote cite="http://schneegans.de/web/xhtml/">
<ol class="code">
<li><code>&lt;!DOCTYPE html PUBLIC "-//W3C//<acronym title="Document Type Definition">DTD</acronym> <acronym title="HyperText Markup Language">HTML</acronym> 4.01//EN"&gt;</code></li>
<li><code>&lt;&gt;</code></li>
<li><code>&lt;title//</code></li>
<li><code>&lt;p ltr&lt;span&gt;&lt;/span&lt;/p&gt;</code></li>
<li><code>&lt;/&gt;</code></li>
</ol>
</blockquote>

<p>and it is equivalent to:</p>

<blockquote cite="http://schneegans.de/web/xhtml/">
<ol class="code">
<li><code>&lt;!DOCTYPE html PUBLIC "-//W3C//<acronym title="Document Type Definition">DTD</acronym> <acronym title="HyperText Markup Language">HTML</acronym> 4.01//EN"&gt;</code></li>
<li><code>&lt;html&gt;</code></li>
<li><code>&lt;head&gt;</code></li>
<li><code>&lt;title&gt;&lt;/title&gt;</code></li>
<li><code>&lt;body&gt;</code></li>
<li><code>&lt;p dir="ltr"&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;</code></li>
<li><code>&lt;/body&gt;</code></li>
<li><code>&lt;/html&#038;gt</code></li>
</ol>
</blockquote>

<p><strong>To summarize:</strong> I will use <acronym title="Extensible HyperText Markup Language">XHTML</acronym> 1.0 Strict delivered as &#8220;text/html&#8221; for now and maybe (X)HTML5 later on in some years.</p>]]></content:encoded>
			<wfw:commentRss>http://www.alexanderkiel.net/2007/08/30/some-thoughts-on-web-standards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

