<?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>My two ¢&#039;s &#187; bigip</title>
	<atom:link href="http://www.linuxaddicted.de/blog/tag/bigip/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxaddicted.de/blog</link>
	<description>A Gentoo addict, linux admin and developer</description>
	<lastBuildDate>Wed, 31 Mar 2010 12:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>BigIP Client Certificates</title>
		<link>http://www.linuxaddicted.de/blog/documentation/bigip-client-certificates/</link>
		<comments>http://www.linuxaddicted.de/blog/documentation/bigip-client-certificates/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 18:22:28 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bigip]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.linuxaddicted.de/?page_id=106</guid>
		<description><![CDATA[ table.addicted { border-width: 2px 2px 2px 2px; border-spacing: 0px; border-style: solid solid solid solid; border-color: gray gray gray gray; border-collapse: collapse; background-color: white; width: 80%; } table.addicted th { border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: outset outset outset outset; border-color: black black black black; background-color: #5c6d81; color: #000000; <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.linuxaddicted.de/blog/documentation/bigip-client-certificates/">BigIP Client Certificates</a></span>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
table.addicted {
        border-width: 2px 2px 2px 2px;
        border-spacing: 0px;
        border-style: solid solid solid solid;
        border-color: gray gray gray gray;
        border-collapse: collapse;
        background-color: white;
        width: 80%;
}
table.addicted th {
        border-width: 1px 1px 1px 1px;
        padding: 1px 1px 1px 1px;
        border-style: outset outset outset outset;
        border-color: black black black black;
        background-color: #5c6d81;
        color: #000000;
        -moz-border-radius: 0px 0px 0px 0px;
}
table.addicted td {
        border-width: 1px 1px 1px 1px;
        padding: 1px 1px 1px 1px;
        border-style: outset outset outset outset;
        border-color: black black black black;
        background-color: white;
        color: #000000;
        -moz-border-radius: 0px 0px 0px 0px;
        overflow: hidden;
}
</style>
<p>This howto will show you how to use client certificates to authenticate against applications hosted by a BigIP loadbalancer. You may find this howto (or parts of it) on <a href="http://ask.f5.com">ask.f5.com</a> as they was no documentation before on this topic. I forwarded it to F5 some time ago. <strong>This is the only way to use client certificates without purchasing addon modules from F5.</strong></p>
<h3>Purpose</h3>
<hr />
<p />
<p>If you host a website/application which should only be accessible by some users you you may have already thought about client certificates. This makes brute force attacks against login panels impossible.<br />
This increases the overall application security by adding another layer a user must pass.</p>
<p>The mapping between certificates and access rights is based on a LDAP directory.</p>
<h3>Overview</h3>
<hr />
<p />
<p>The loadbalancer reads the CN from the client certificate and searches the defined group for the virtual server for a matching entry. The loadbalancer verifies CA and CRL&#8217;s before the lookup takes place.</p>
<p><center><a href="http://blog.linuxaddicted.de/wp-content/uploads/2008/12/f5_ldap_auth.png"><img src="http://blog.linuxaddicted.de/wp-content/uploads/2008/12/f5_ldap_auth.png" alt="BigIP Certificate Auth" title="f5_ldap_auth" width="388" height="339" class="size-full wp-image-141" /></a></center></p>
<h3>LDAP Setup</h3>
<hr />
<p />
<p><strong>Example Tree</strong></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">                            dc<span style="color: #339933;">=</span>company<span style="color: #339933;">,</span>dc<span style="color: #339933;">=</span>com
                              <span style="color: #339933;">/</span>         \
                             <span style="color: #339933;">/</span>           \
                           <span style="color: #339933;">...</span>      ou<span style="color: #339933;">=</span>datacenter
                                     <span style="color: #339933;">/</span>        \
                                    <span style="color: #339933;">/</span>          \
                                  <span style="color: #339933;">...</span>       ou<span style="color: #339933;">=</span>webauth
                                              <span style="color: #339933;">/</span>    \
                                             <span style="color: #339933;">/</span>      \
                                       ou<span style="color: #339933;">=</span>users    ou<span style="color: #339933;">=</span>groups</pre></div></div>

<p><strong>User &#038; Group LDIF</strong></p>
<p>Here are two LDIF examples for users and groups:</p>
<p><center>User</center><br />
<code>dn: cn=Example User,ou=users,ou=webauth,ou=datacenter,dc=company,dc=com<br />
cn: Example User<br />
sn: Example User<br />
objectClass: person<br />
description: It's just a example user<br />
</code></p>
<p />
<p><center>Group</center><br />
<code>dn: cn=Example Group,ou=groups,ou=webauth,ou=datacenter,dc=company,dc=com<br />
cn: Example Group<br />
objectClass: posixGroup<br />
description: Group is allowed to connect to BigIP's VHOST secure.company.com<br />
memberUid: cn=Example User,ou=users,ou=webauth,ou=datacenter,dc=company,dc=com<br />
memberUid: cn=Example User No2,ou=users,ou=webauth,ou=datacenter,dc=company,dc=com<br />
gidNumber: 145<br />
</code></p>
<p>The &#8220;memberUid&#8221; has to match exactly the certificates CN because this is the key the BigIP is looking for.</p>
<h3>BigIP Configuration</h3>
<hr />
<p />
<p><strong>Authentication Configuration</strong></p>
<p>As a firsz step we create a new &#8220;Authentication Configuration&#8221;. Just open the web frontend and navigate to:</p>
<p>Local Traffic -> Profiles -> Authentication -> Configuration</p>
<p>You have to create a new config for every virtual host you want to secure. This is force by the LDAP group used because every config can only use one group. Here&#8217;s a example configuration:</p>
<table class="addicted">
<tr>
<th width="30%"><strong>Parameter</strong></th>
<th width="70%"><strong>Value</strong></th>
</tr>
<tr>
<td>Hosts</td>
<td>1.2.3.4</td>
</tr>
<tr>
<td>Search Type</td>
<td>User</td>
</tr>
<tr>
<td>User Base DN</td>
<td>ou=users,ou=webauth,ou=datacenter,dc=company,dc=com</td>
</tr>
<tr>
<td>User Key</td>
<td>cn</td>
</tr>
</tr>
<tr>
<td>Admin DN</td>
<td>DN for binding</td>
</tr>
<tr>
<td>Admin Password</td>
<td>Bind password</td>
</tr>
<tr>
<td>Group Base DN</td>
<td>ou=groups,ou=webauth,ou=datacenter,dc=company,dc=com</td>
</tr>
<tr>
<td>Group Key</td>
<td>cn</td>
</tr>
<tr>
<td>Group Member Key</td>
<td>memberUid</td>
</tr>
<tr>
<td>Valid Groups</td>
<td>Corresponding LDAP group</td>
</tr>
</table>
<h3>Authentication Profile</h3>
<hr />
<p />
<p>The next step is to create a profile which inherits the new created config. You need a profile for every configuration. Navigate to </p>
<p>Local Traffic -> Profiles -> Authentication -> Profiles</p>
<table class="addicted">
<tr>
<th width="30%"><strong>Parameter</strong></th>
<th width="70%"><strong>Value</strong></th>
</tr>
<tr>
<td>Type</td>
<td>SSL Client Certificate LDAP</td>
</tr>
<tr>
<td>Parent Profile</td>
<td>ssl_cc_ldap</td>
</tr>
<tr>
<td>Mode</td>
<td>Enabled</td>
</tr>
<tr>
<td>Configuration</td>
<td>NAME OF CONF JUST CREATED</td>
</tr>
</table>
<h3>CA Upload</h3>
<hr />
<p />
<p>If your CA certificate(s) have not been installed it&#8217;s time to do so. </p>
<p>Local Traffic -> SSL Certificates -> Import</p>
<h3>SSL Profiles</h3>
<hr />
<p />
<p>To use SSL (without client certificates too) you need a SSL profile. Navigate to</p>
<p>Local Traffic -> Profiles -> SSL -> Client</p>
<p>Create a new profile based on &#8220;clientsl&#8221; or one of your already defined profiles.</p>
<table class="addicted">
<tr>
<th width="30%"><strong>Parameter</strong></th>
<th width="70%"><strong>Value</strong></th>
</tr>
<tr>
<td>Chain</td>
<td>CompanyBundle</td>
</tr>
<tr>
<td>Trusted Certificate Authorities</td>
<td>CompanyBundle</td>
</tr>
<tr>
<td>Client Certificate</td>
<td>require</td>
</tr>
<tr>
<td>Frequency</td>
<td>always</td>
</tr>
<tr>
<td>Advertised Certificate Authorities</td>
<td>CompanyBundle</td>
</tr>
</table>
<h3>Virtual Host Configuration</h3>
<hr />
<p />
<p>You may create a new virtual host or modify a existing host. Navigate here</p>
<p>Local Traffic -> Virtual Servers</p>
<p>Modify the following parameters (if you already used SSL in this vhost):</p>
<table class="addicted">
<tr>
<th width="30%"><strong>Parameter</strong></th>
<th width="70%"><strong>Value</strong></th>
</tr>
<tr>
<td>SSL Profile (Client)</td>
<td>Profile created earlier</td>
</tr>
<tr>
<td>Authentication Profiles</td>
<td>Profile created earlier</td>
</tr>
</table>
<h3>That&#8217;s it!</h3>
<hr />
<p />
<p>Import your client certificates to your browser and enjoy your secure connection.</p>
<p>If you have any trouble don&#8217;t hesitate to contact me: daniel {A_T} linuxaddicted {D_O_T} de</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxaddicted.de/blog/documentation/bigip-client-certificates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

