<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2780703305680355567</id><updated>2012-02-18T06:29:30.129Z</updated><category term='FAM'/><category term='IPv6'/><category term='Atom'/><category term='Authn'/><category term='OAuth'/><category term='law'/><category term='REST'/><category term='Microformats'/><category term='cookies'/><category term='#guug11'/><category term='OpenSSL'/><category term='nagios'/><category term='CRUD'/><category term='service monitoring'/><category term='API'/><category term='Authz'/><category term='Google'/><category term='OpenID'/><category term='mod_ssl'/><category term='Raven'/><category term='breadcrumbs'/><category term='RSS'/><category term='Plone'/><category term='PKI'/><category term='Firefox'/><category term='Uam WebAuth'/><category term='Proxy'/><category term='Identity Mgmt'/><category term='Shib'/><category term='Certificates'/><category term='https'/><category term='Passwords'/><category term='web technologies'/><category term='SSL'/><category term='TLS'/><category term='Apache'/><category term='maps'/><category term='JSON'/><category term='JavaScript'/><category term='Google Apps'/><category term='HTML5'/><category term='data feeds'/><title type='text'>Indistinguishable from magic</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-1219712449943943555</id><published>2012-02-02T13:28:00.000Z</published><updated>2012-02-02T13:28:57.417Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Two sorts of authetnication</title><content type='html'>It&amp;nbsp;occurs&amp;nbsp;to me that, from a user's perspective, every authentication sits somewhere between the following two&amp;nbsp;extremes:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Authentications where it's strongly in the user's interest not to disclose their authentication credentials, but doing so has little impact on the&amp;nbsp;corresponding&amp;nbsp;service provider. &amp;nbsp;For example I'm probably going to be&amp;nbsp;careful&amp;nbsp;about my credentials for electronic banking (because&amp;nbsp;I don't want you to get my money) and for Facebook (because&amp;nbsp;I don't want you to start saying things to my friends that appear to come from me).&lt;/li&gt;&lt;li&gt;Authentications where it's mainly in the service provider's interest that the user doesn't&amp;nbsp;disclose their authentication credentials but it's of little importance to the user. For example&amp;nbsp;authentication&amp;nbsp;to gain access to&amp;nbsp;institution-subscribed electronic journals, or credentials giving access to personal subscription services such as&amp;nbsp;Spottify. In neither case is giving away my credentials to&amp;nbsp;third&amp;nbsp;parties likely to much&amp;nbsp;immediate&amp;nbsp;impact for me.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;This is obviously a problem for service providers in case two, because it significantly undermines any confidence they can have in any authentications, and may undermine their&amp;nbsp;business&amp;nbsp;model if it's based on number of unique users. There's not much you can do technically to address this, other than using non-copyable, non-forgeable&amp;nbsp;credentials (which are few and far between and typically expensive). It is of course traditional to address this with contracts and rules and regulations, but neither work well&amp;nbsp;when&amp;nbsp;the chance of being found out is low and the consequence small.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More interesting is what happens when you use the same credentials (SSO or single password, for example) for a range of services that sit in different places in this&amp;nbsp;continuum. I suspect that there is a strong possibility, human nature being what it is, that people will make credential-sharing decisions based on the properties of an individual services and without really considering that they are actually sharing access to everything.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;[I'd note in parsing a New Your Times article (&lt;a href="http://www.nytimes.com/2012/01/18/us/teenagers-sharing-passwords-as-show-of-affection.html"&gt;Young, in Love and Sharing Everything, Including a Password&lt;/a&gt;) that suggests that&amp;nbsp;young&amp;nbsp;people will sometimes share passwords as a way of demonstrating&amp;nbsp;&lt;span style="background-color: white; line-height: 22px; text-align: left;"&gt;devotion.&lt;/span&gt;&lt;span style="background-color: white; line-height: 22px; text-align: left;"&gt; I expect this is true too]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-1219712449943943555?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/1219712449943943555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2012/02/two-sorts-of-authetnication.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1219712449943943555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1219712449943943555'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2012/02/two-sorts-of-authetnication.html' title='Two sorts of authetnication'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-8819517783299609012</id><published>2012-01-25T15:26:00.002Z</published><updated>2012-01-25T15:26:42.693Z</updated><title type='text'>O2 changing web page content on the fly?</title><content type='html'>&lt;br /&gt;We recently noticed an oddity in the way some of our web pages were&amp;nbsp;appearing&amp;nbsp;when viewed via&amp;nbsp;some&amp;nbsp;3G providers, including at least O2. The pages in question includes something like this in the head section:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;!--[if IE 6]&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;style type="text/css" media="screen"&amp;gt;@import&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url(http://www.example.com/ie6.css);&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;![endif]--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which should have the effect of including the ie6.css stylesheet when the&amp;nbsp;document is viewed from IE6 but not otherwise.&lt;br /&gt;&lt;br /&gt;When accessed over 3G on some phones, &lt;i&gt;something&lt;/i&gt;&amp;nbsp;expands the&amp;nbsp;@import by replacing it with the content of the ie6.css style sheet before the browser sees it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;!--[if IE 6]&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;style type="text/css" media="screen"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...literal CSS Statements...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;![endif]--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which, while a bit braindead, would be OK if it were not for the fact that&amp;nbsp;the CSS file happens to contain (within entirely legal CSS comments) an example of an&amp;nbsp;HTML end-comment:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;!--[if IE 6]&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;style type="text/css" media="screen"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; /* Use like this&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;!--[if IE 6]&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;![endif]--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...more literal CSS Statements...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;lt;![endif]--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When parsed, this causes chaos. The first &amp;lt;!-- starts a comment and so hides&amp;nbsp;the &amp;lt;style&amp;gt; tag. But the --&amp;gt; inside the CSS then closes that comment,&amp;nbsp;leaving WebKit's HTML parser in the middle of a stack of CSS&amp;nbsp;definitions. It does the only thing it can do and renders the CSS as part of&amp;nbsp;the document.&lt;br /&gt;&lt;br /&gt;I don't know what is messing with the @import statements. I suspect some&amp;nbsp;sort of proxy inside O2's network, perhaps trying to optimise things and&amp;nbsp;save my phone from having to make an extra TCP connection to retrieve the&amp;nbsp;@included file. If so its failing spectacularly since its inlining a large&amp;nbsp;pile of CSS that my phone would never actually retrieve.&lt;br /&gt;&lt;br /&gt;You can see this effect in action by browsing to&amp;nbsp;&lt;a href="http://mnementh.csi.cam.ac.uk/atimport/"&gt;http://mnementh.csi.cam.ac.uk/atimport/&lt;/a&gt;. You should just see the word 'Test' on a red background, but for me over O2 I get some extra stuff that is the result of their messing around with my HTML.&lt;br /&gt;&lt;br /&gt;[There's also the issue that O2 seem to have&amp;nbsp;recently&amp;nbsp;been silently supplying the&amp;nbsp;mobile phone number of each device in the HTTP headers of each request it makes, but that's a&amp;nbsp;separate&amp;nbsp;issue:&amp;nbsp;&lt;a href="http://conversation.which.co.uk/technology/o2-sharing-mobile-phone-number-network-provider/"&gt;http://conversation.which.co.uk/technology/o2-sharing-mobile-phone-number-network-provider/&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-8819517783299609012?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/8819517783299609012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2012/01/o2-changing-web-page-content-on-fly.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8819517783299609012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8819517783299609012'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2012/01/o2-changing-web-page-content-on-fly.html' title='O2 changing web page content on the fly?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-669066669888677934</id><published>2011-12-19T16:39:00.001Z</published><updated>2011-12-19T16:52:07.939Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='web technologies'/><title type='text'>Computing Advent Calendars</title><content type='html'>I have always been a sucker for Advent Calendars on computing topics. I find them a&amp;nbsp;convenient&amp;nbsp;way to catch up on developments that I would have otherwise missed, and they come out at a time&amp;nbsp;when, with luck, things are a bit quieter so there's time to actually read them.&lt;br /&gt;&lt;br /&gt;This year I've been enjoying &lt;a href="http://sysadvent.blogspot.com/"&gt;SysAdvent&lt;/a&gt;. In a previous life when I did a lot of Perl development I was a great fan of the &lt;a href="http://www.perladvent.org/2011/"&gt;Perl Advent Calendar&lt;/a&gt; but I haven't read it in several years. Earlier today I came across &lt;a href="http://phpadvent.org/2011"&gt;PHP Advent&lt;/a&gt; which I didn't previously know about. For hard core web geeks there's always&amp;nbsp;&lt;a href="http://24ways.org/"&gt;24Ways&lt;/a&gt;. I'm sure&amp;nbsp;there&amp;nbsp;are lots more. For what it's worth I read these, and lots of other stuff, via RSS or equivalent feeds in my feed reader of choice (which at the moment happens to be &lt;a href="http://www.google.com/reader/"&gt;Google Reader&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Most of these have been running for a while and the previous editions are also available (for some you may have to make the obvious edits to the URLs to see earlier versions). But beware - just as this year's postings are often topical and cutting edge, ones from the past can easily turn out to have been overtaken by events or simply no longer sufficiently&amp;nbsp;fashionable.&lt;br /&gt;&lt;br /&gt;However you celebrate it, I'd like to wish you a happy Christmas and a productive new year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-669066669888677934?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/669066669888677934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/12/computing-advent-calendars.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/669066669888677934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/669066669888677934'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/12/computing-advent-calendars.html' title='Computing Advent Calendars'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-8168698073361339345</id><published>2011-12-19T12:14:00.001Z</published><updated>2011-12-19T16:05:43.162Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><title type='text'>Cookies - progress at last?</title><content type='html'>It looks as if there may at last be some progress on the vexed issue of how you can continue to use cookies (and similar) in the light of the new(ish)&amp;nbsp;&lt;a href="http://www.legislation.gov.uk/uksi/2003/2426/contents/made"&gt;Privacy and Electronic Communications Regulations&lt;/a&gt;. The ICO has published &lt;a href="http://www.ico.gov.uk/news/latest_news/2011/~/media/documents/library/Privacy_and_electronic/Practical_application/guidance_on_the_new_cookies_regulations.ashx"&gt;new guidance&lt;/a&gt; on all this, and various commentators seem to think it looks promising:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ico.gov.uk/news/blog/2011/half-term-report-on-cookies-compliance.aspx"&gt;ICO's own commentary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1112&amp;amp;L=WEBSITE-INFO-MGT&amp;amp;%20D=0&amp;amp;P=1631"&gt;JISCMail discussion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ukwebfocus.wordpress.com/2011/12/15/the-half-term-report-on-cookie-compliance/"&gt;Brian Kelly's UK Web Focus blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.out-law.com/en/articles/2011/december/icos-concrete-examples-give-businesses-a-better-chance-of-meeting-cookie-law-demands/"&gt;Out-law&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;There is however some concern that the&amp;nbsp;proposed approach to dealing with analytics cookies seems to be limited to a hint that the ICO's office just won't look too closely. There's worry that some public sector organisations will still feel that they&amp;nbsp;need&amp;nbsp;to ensure total compliance rather than just take a risk&amp;nbsp;management&amp;nbsp;approach:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://digitalbydefault.com/2011/12/14/a-crack-in-the-cookie-craziness/"&gt;A crack in the cookie craziness?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-8168698073361339345?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/8168698073361339345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/12/cookies-progress-at-last.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8168698073361339345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8168698073361339345'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/12/cookies-progress-at-last.html' title='Cookies - progress at last?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-6470317504383132677</id><published>2011-11-27T18:33:00.000Z</published><updated>2011-11-27T18:33:59.188Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='Authz'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='FAM'/><title type='text'>Federated (and so SAML, and so Shibboleth) account management</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;The Problem&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In an earlier post (&lt;a href="http://jw35.blogspot.com/2011/03/user-ids-in-shibboleth-world.html"&gt;User-ids in a Shibboleth world&lt;/a&gt;) I described the problem of deriving a 'userid', as required by much third-party software, from typical attributes supplied in a SAML federated authentication (particularly in the UK federation, but probably equally elsewhere in Europe). This is actually part of the wider problem of account management in a federated environment (as touched on in &lt;a href="http://jw35.blogspot.com/2009/09/federated-auth-is-less-than-half-battle.html"&gt;Federated AUTH is less than half the battle&lt;/a&gt;), and this posting is an attempt to pull together some thoughts on the subject.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;The context of this is a need to support web applications (for example MediaWiki, Plone, or Wordpress) which need to identify local users (members of the University of Cambridge) but which also need to support authenticated access from people outside the University (collaborators in other institutions, sponsors, representatives of funding bodies, etc.). Many of these have access to SAML identities in the UK federation (or elsewhere), and all three applications claim to have 'Shibboleth support', but in practice this support doesn't come anywhere near doing what we need. As mentioned in &lt;/span&gt;&lt;a href="http://jw35.blogspot.com/2011/03/user-ids-in-shibboleth-world.html" style="font-family: inherit;"&gt;User-ids in a Shibboleth world&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;, the primary problem seems to be an assumption that &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;eduPersonPrincipalName (or something equivalent) will always be available. We can (and do) make this available from our own IdP to our own SPs, but we can't expect it from elsewhere, and negotiating its release on a case-by-case basis is impracticable and in any case we don't actually need it. &lt;/span&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;I asked about this issue &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;on both the &lt;/span&gt;&lt;a href="https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1103&amp;amp;L=JISC-SHIBBOLETH&amp;amp;F=&amp;amp;S=&amp;amp;P=1057" style="font-family: inherit;"&gt; jisc-shibboleth@jiscmail.ac.uk&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; and &lt;/span&gt;&lt;a href="https://lists.internet2.edu/sympa/arc/shibboleth-users/2011-03/msg00254.html" style="font-family: inherit;"&gt;shibboleth-users@internet2.edu&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; mailing lists. I had rather assumed this would be a well known problem with obvious solutions, but the only significant response was from Scott Cantor who said:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;"I think they're written for "least effort" and to avoid fixing applications. That's not a strategy that will work long term."&lt;/i&gt;&lt;/blockquote&gt;&lt;b&gt;The Options&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So, what might work in the long term?&lt;br /&gt;&lt;span style="font-size: small;"&gt; &lt;br style="font-family: inherit;" /&gt;&lt;span style="font-family: inherit;"&gt; I think you first have to accept that this sort of federated environment differs from a typical single institution environment in a least two significant ways:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: inherit;"&gt;&lt;li&gt;You &lt;i&gt;will&lt;/i&gt; get a unique identifier for each user, but you must assume that it's totally opaque and that it's not suitable for display. Further, you have to assume that users will not be able to tell you in advance what this identifier is or is going to be.&lt;/li&gt;&lt;span style="font-size: small;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Lots of people will be able to authenticate who you don't want to have anything to do with. &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span class="blue"&gt;So you can't rely on the 'If they can authenticate they are part of the organisation' approximation that works in other situations.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ol&gt;I see two&amp;nbsp;approaches: A&lt;i&gt;ccount Linking&lt;/i&gt;, and A&lt;i&gt;ccount Creation&lt;/i&gt;:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Account Linking&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Under this&amp;nbsp;approach&amp;nbsp;you start by provisioning&amp;nbsp;ordinary, local accounts complete with locally-unique (and displayable!) user names and passwords and by&amp;nbsp;transmitting&amp;nbsp;the username/password information to the intended user in any appropriate&amp;nbsp;fashion. But once the intended user has authenticated with this information you allow them to link this account with a federated identity which they can subsequently use to authenticate in place of the local password. You could even regard the initial password as just a bootstraping device and expire it after a few uses, or after time, or after a federated authentication has completed.&lt;br /&gt;&lt;br /&gt;Anyone trying to authenticate using an unrecognised federated identity would get an error page refering them to whoever deals with account management. If accounts need non-default attributes (particular editing rights, administrator&amp;nbsp;privilege, etc) then these can either be set manually by administrators or they could be added following a&amp;nbsp;successful&amp;nbsp;federated authentication with particular attribute sets. &lt;br /&gt;&lt;br /&gt;Depending on the application you are protecting you might choose to restrict which federated identities you allow to be linked, based either on who asserts them and/or on attributes supplied with the authentication (i.e. you might require that a 'staff' resource can only be linked to an identity that includes an eduPersonScopedAffiliation value including 'staff'). You might also allow more than one identity to be linked to a single account. It all rather depends who has the strongest interest in the account being used only by the right person (you as application operator, or the user).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Account Creation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is to some extent the process envisaged in the latter sections of&amp;nbsp;&lt;a href="http://jw35.blogspot.com/2009/09/federated-auth-is-less-than-half-battle.html"&gt;Federated AUTH is less than half the battle&lt;/a&gt;. However software that needs a local 'user name' will have to create one that meets its own requirements when first creating a local account, and it can't assume that anything suitable will be available in the attribute values. This means that the 'Dynamic login' approach is going to be problematic since there probably won't be anywhere to store the association between this user name and the&amp;nbsp;corresponding&amp;nbsp;federated identity.&lt;br /&gt;&lt;br /&gt;As mentioned in the other post, some rules will be needed, presumably based on attributes supplied, to decide who can have an account at all. Anyone trying to authenticate using a identity that doesn't match these rules would again get an error page refering them to whoever deals with account management. Enhanced account&amp;nbsp;privilege&amp;nbsp;can be automatically granted based on attribute values or, once the user has authenticated for the first time (but probably not before), by manual&amp;nbsp;intervention&amp;nbsp;by administrators and by reference to the locally generated user name..&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hybrid&amp;nbsp;approach&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are almost always exceptions to rules. To allow for this you might want to adopt a hybrid approach. This might uses the &lt;i&gt;Account&amp;nbsp;Creation&lt;/i&gt;&amp;nbsp;approach for the majority of potential users,&amp;nbsp;because&amp;nbsp;it totally avoids 'one more password' and needs little on-going user administration. But for the&amp;nbsp;inevitable&amp;nbsp;cases where you need to allow access by someone who doesn't match the standard account creation rules you could fall back to the &lt;i&gt;Account Linking&lt;/i&gt; approach. Indeed, once you allow local accounts you have a tool that can if you wish use to allow access to people who don't themselves have access to suitable federated identities.&lt;br /&gt;&lt;br /&gt;All this is quite a lot more work than just lifting a string out of something like a REMOTE_USER environment variable and convincing you application to treat this as&amp;nbsp;evidence&amp;nbsp;of authentication. But to get the best from federated authentication it's what we are probably going to have to do, though in time and with luck we may find that someone has already done it for us...&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-6470317504383132677?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/6470317504383132677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/07/federated-and-so-saml-and-so-shibboleth.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6470317504383132677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6470317504383132677'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/07/federated-and-so-saml-and-so-shibboleth.html' title='Federated (and so SAML, and so Shibboleth) account management'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2511678353057621788</id><published>2011-11-24T10:00:00.001Z</published><updated>2011-11-24T10:06:36.960Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><title type='text'>So how are we getting on with cookies?</title><content type='html'>Remember all that fuss earlier in the year about the new cookie rules? Well, it's six months since the ICO's office gave us all a year's grace&amp;nbsp;during&amp;nbsp;which they didn't expect to actually be enforcing the new regulations. And how are you all getting on with&amp;nbsp;becoming&amp;nbsp;compliant? Worked out how to legally continue to use Google Analytics yet? Scheduled the redevelopments needed for compliance?&lt;br /&gt;&lt;br /&gt;While things may be quite now, I confidently expect another flurry of publicity, and difficult&amp;nbsp;questions, in the spring by which time it's going to be too late. Here's one recent blog&amp;nbsp;posting&amp;nbsp;on the subject:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.storm-consultancy.com/blog/misc-web-stuff/the-cookie-monster/"&gt;http://www.storm-consultancy.com/blog/misc-web-stuff/the-cookie-monster/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2511678353057621788?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2511678353057621788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/11/so-how-are-we-getting-on-with-cookies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2511678353057621788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2511678353057621788'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/11/so-how-are-we-getting-on-with-cookies.html' title='So how are we getting on with cookies?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-1416914302772345645</id><published>2011-08-10T10:10:00.001+01:00</published><updated>2011-08-10T11:11:35.765+01:00</updated><title type='text'>301 Moved Permanently (to a new office)</title><content type='html'>After 10 years and 11 months sitting at the same desk in the Computing Service I've finally ended up moving office (to P24 if you know your way around the UCS, otherwise I'm still as unfindable as I've always been). This is part of a plan to make space for a new member of the Information Systems Team who starts&amp;nbsp;in a&amp;nbsp;couple of weeks, and&amp;nbsp;fulfils&amp;nbsp;my ambition to get the entire team at least on the same floor, if not in the same office. But it's still a bit of a&amp;nbsp;wrench and I'm worried that, if truth be told, all my best ideas may have been stolen from my former officemates...&lt;br /&gt;&lt;br /&gt;The space left by my departure:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qySctOrudBU/TkJJ27eTpdI/AAAAAAAAAJg/CS3Vjs7_6mE/s1600/photo1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://1.bp.blogspot.com/-qySctOrudBU/TkJJ27eTpdI/AAAAAAAAAJg/CS3Vjs7_6mE/s320/photo1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;...and my new home:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OnX7HyN8ZO4/TkJJ6WP5qTI/AAAAAAAAAJk/ggmxLBtr63E/s1600/photo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-OnX7HyN8ZO4/TkJJ6WP5qTI/AAAAAAAAAJk/ggmxLBtr63E/s320/photo.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-1416914302772345645?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/1416914302772345645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/08/301-moved-permanently-to-new-office.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1416914302772345645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1416914302772345645'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/08/301-moved-permanently-to-new-office.html' title='301 Moved Permanently (to a new office)'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qySctOrudBU/TkJJ27eTpdI/AAAAAAAAAJg/CS3Vjs7_6mE/s72-c/photo1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-7038190484977808627</id><published>2011-07-06T08:25:00.002+01:00</published><updated>2011-07-06T13:20:29.247+01:00</updated><title type='text'>IT Support from 300 ft</title><content type='html'>At the (Cambridge) &lt;a href="http://www.citmg.group.cam.ac.uk/"&gt;College IT Managers'&lt;/a&gt; &lt;a href="http://www.citmg.group.cam.ac.uk/duxford.html"&gt;2009 Conference&lt;/a&gt; at the Imperial War Museum, Duxford I was lucky enough to win a flight in a tiger moth in the prize draw. I've been a bit slow getting around to taking this up, but finally got around to it last weekend. I got to fly from Duxford up to Madingley and back, and even got to fly the plane a bit myself (no doubt with the pilot's hands not far from his set of controls). Initial impressions: Tiger Moths are &lt;i&gt;really&lt;/i&gt; small and feel as if they are made out of Mecarno, you can't see where you are going, and in the air they feel as if they are blowing around like a piece of paper! Flying the plane feels a bit like sailing, but in three dimensions rather than two (and, at least last Sunday, with less water).&lt;br /&gt;&lt;br /&gt;Here's some photographic proof of the event. Thank you CITMG!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-03hOGolGOVk/ThQLh-qV8iI/AAAAAAAAAJE/H05niPCCv8I/s1600/P1010146.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-03hOGolGOVk/ThQLh-qV8iI/AAAAAAAAAJE/H05niPCCv8I/s320/P1010146.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-7038190484977808627?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/7038190484977808627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/07/it-support-from-300-ft.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7038190484977808627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7038190484977808627'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/07/it-support-from-300-ft.html' title='IT Support from 300 ft'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-03hOGolGOVk/ThQLh-qV8iI/AAAAAAAAAJE/H05niPCCv8I/s72-c/P1010146.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-7760918694062783129</id><published>2011-06-18T08:42:00.000+01:00</published><updated>2011-06-18T08:42:23.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPv6'/><title type='text'>IPv6 Day in Cambridge - Success and Non-event!</title><content type='html'>IPv6 day (8th June) in the University was largely a non-event, and so can be declared a success! This seems to match experiences reported elsewhere.&lt;br /&gt;&lt;br /&gt;We are not aware of any significant problems experienced by University users in accessing any services on the day, including external ones known to be participating in IPv6 day such as Google and Facebook. The core of the University network is&amp;nbsp;connected&amp;nbsp;to the global v6 internet, but most distribution networks in&amp;nbsp;departments&amp;nbsp;and colleges only&amp;nbsp;connect&amp;nbsp;using v4 at the moment. Those networks that are&amp;nbsp;connected&amp;nbsp;to the global v6 internet (including the one connecting my desktop workstation) worked fine on the day as expected.&lt;br /&gt;&lt;br /&gt;In the&amp;nbsp;run-up&amp;nbsp;to the day we enabled v6 on a number of central services, including &lt;a href="http://www.cam.ac.uk/"&gt;the main University web server&lt;/a&gt;, the &lt;a href="http://sms.cam.ac.uk/"&gt;Streaming Media Service&lt;/a&gt; (both the web interface and the HTTP download service), the &lt;a href="http://search.cam.ac.uk/"&gt;'new' interface to our search engine&lt;/a&gt;, the &lt;a href="http://training.cam.ac.uk/"&gt;University Training Booking System&lt;/a&gt;, and the central mail service (SMTP, POP, IMAP). On the day we&amp;nbsp;published&amp;nbsp;AAAA records for these services alongside the normal A records from about 08:30 to 19:00 BST.&lt;br /&gt;&lt;br /&gt;With the exception of the web server, all these services were enabled more or less as they would be for a v6 production service, though a few features (such as automatic v6 address transition between cluster members, and adapting log&amp;nbsp;analysis&amp;nbsp;to recognise v6 addresses) were not completed in time. The web server used a seperate Apache reverse proxy to provide v6&amp;nbsp;connectivity&amp;nbsp;to avoid having to&amp;nbsp;disturb&amp;nbsp;its configuration. While doing this, and subsequently, we identified various issues and surprises that I've already&amp;nbsp;mentioned (&lt;a href="http://jw35.blogspot.com/2011/05/ipv6-gotchas-and-8th-june-2011.html"&gt;here&lt;/a&gt;, &lt;a href="http://jw35.blogspot.com/2011/06/ipv6-day-more-problems-than-expected.html"&gt;here&lt;/a&gt;, and &lt;a href="http://jw35.blogspot.com/2011/06/more-ipv6-gotchas.html"&gt;here&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;The University web server received&amp;nbsp;8,981 requests from 280&amp;nbsp;distinct clients over v6. By comparison it received a total of 1,257,012 requests over both protocols for the entire 24 hour period, meaning that v6 requests probably represented about 1.5% of the total. The breakdown of 8,351 &lt;i&gt;native&lt;/i&gt; v6 requests from 230 clients by approximate country of origin appears in the table below.&lt;br /&gt;&lt;br /&gt;What was interesting was the relatively high number of clients (50) making requests over transitional &lt;a href="http://en.wikipedia.org/wiki/6to4"&gt;6to4&lt;/a&gt; connections (630). Most of these (36 clients making 476 requests) were from inside the University. Most or all of these clients will have had perfectly good native v4 connectivity to www.cam and this confirms (if confirmation were needed) that rather a lot of systems prefer IPv6, even if provided by a transition technology such as 6to4, over IPv4. Interestingly we didn't see any &lt;a href="http://en.wikipedia.org/wiki/Teredo_tunneling"&gt;Teredo&lt;/a&gt; traffc.&lt;br /&gt;&lt;br /&gt;6to4 caused the only significant incident of the day, when a department mail server switched to using IPv6 over a 6to4 route being advertised by a user workstation elsewhere on the department subnet. This mailserver sends all its outgoing mail via the University's central internal mail switch, but that won't accept messages from machines with 6to4 addresses because it doesn't see them as 'inside'. The problem was quickly fixed, but it seems clear that, ironically, problems caused by 6to4 and Toredo 'transitional' connectivity may represent a significant barrier to further IPv6 roll-out.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;b&gt;Native IPv6 requests to &lt;a href="http://www.cam.ac.uk/"&gt;http://www.cam.ac.uk/&lt;/a&gt; on IPv6 Day, by approximate country of origin&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;[Here 'UCS STAFF' represents clients on the Computing Service staff network, 'UNIVERSIY' represents those elsewhere in the University, 'JANET' those elsewhere on &lt;a href="http://en.wikipedia.org/wiki/JANET"&gt;JANET&lt;/a&gt;, and 'United Kingdom' those elsewhere in the UK].&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 2619 UCS STAFF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 1373 China&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; 1290 Brazil&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 835 JANET&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 630 UNIVERSITY&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 420 United Kingdom&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 293 United States&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 171 Greece&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 123 France&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; 110 Czech Republic&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 97 Russian Federation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 81 Germany&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 66 Japan&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 Portugal&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 47 Netherlands&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36 Finland&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 33 Canada&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 33 Serbia&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 17 Spain&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 Switzerland&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 Ireland&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 Saudi Arabia&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 Hong Kong&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 Italy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 Korea, Republic of&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 Norway&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 Australia&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 New Zealand&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Geolocation provided by Maxmind's &lt;a href="http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz"&gt;free GeoLite IPv6 Country&lt;/a&gt;database. "This product includes GeoLite data created by MaxMind, available from&lt;a href="http://www.maxmind.com/"&gt;http://www.maxmind.com/&lt;/a&gt;."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-7760918694062783129?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/7760918694062783129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/06/ipv6-day-in-cambridge-success-and-non.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7760918694062783129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7760918694062783129'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/06/ipv6-day-in-cambridge-success-and-non.html' title='IPv6 Day in Cambridge - Success and Non-event!'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-3536170525486753399</id><published>2011-06-13T09:34:00.001+01:00</published><updated>2011-06-13T12:47:42.227+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPv6'/><title type='text'>More IPv6 gotchas</title><content type='html'>Our participation in IPv6 day (which I might get around to writing up one day) has lead me to identify three more &lt;a href="http://jw35.blogspot.com/2011/05/ipv6-gotchas-and-8th-june-2011.html"&gt;'gotchas' relating to IPv6 deployment&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;IPv6 tunnels come up outside the wire&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://jw35.blogspot.com/2011/06/ipv6-day-more-problems-than-expected.html"&gt;predicted in advance&lt;/a&gt;, and born out by our experience on the day, it's clear that lots of clients will use transitional IPv6 connectivity (&lt;a href="http://en.wikipedia.org/wiki/6to4"&gt;6to4&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Teredo_tunneling"&gt;Teredo&lt;/a&gt;) even when contacting services also available over native IPv4. Worse, some machines with 6to4 connectivity will advertise themselves as IPv6 routers and other machines on the same subnet will use their connectivity in preference to native IPv4.&lt;br /&gt;&lt;br /&gt;In addition to the obvious problem that this transitional connectivity may be broken, or blocked, or massively sub-optimal, there the additional unexpected (to me) problem that machines doing this will be using 6to4 or Teredo IP addresses &lt;span style="font-family: inherit;"&gt;(2002::/16 or 2001:0000::/32 respectively) &lt;/span&gt;and so will appear to be outside you local network even if they are actually inside. This has serious implications for continued attempts to do access control by IP address.&lt;br /&gt;&lt;br /&gt;Both addressing schemes actually embed local IPv4 addresses in the v6 addresses they use so you could - perhaps - choose to recognise these. But if you do you'll be in the interesting position of having 'internal' traffic coming into your network from the outside!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Fragmentation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IPv6 doesn't support packet fragmentation by routers, but does require that a sender reduces its packet size and retransmits in response to an ICMP6 type 2 'Packet too big' message.&amp;nbsp; If this mechanism fails, perhaps because ICMP packets are being blocked but also for any other reason, you may find for example that users can connect to a web site but not get any content back.&lt;br /&gt;&lt;br /&gt;This is because the initial connection establishment and HTTP GET request all use small packets but everything goes wrong the moment the web server starts sending full packets containing the data requested. Unhelpfully, web server access logs may look fine when this happens, with the only hint of problems being that too few bytes may have been transmitted (though given a big enough TCP window and a small enough document even this may not be obvious).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Old software&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Even though IPv6 has been around for a while, support for it is still missing or broken in a lot of software (especially if you use 'stable' or 'Long Term Support'&amp;nbsp; Linux distributions whose versions will inevitably be somewhat less that 'bleeding edge').&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;For example even though the SLAPD LDAP daemon supports IPv6, my colleagues failed to find a way to get the version included in SLES 10 to support both v4 and v6 at the same time, though it was happy to do one or the other. In addition, this version didn't seem to support IPv6 addresses in its access control list syntax.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;I also had a problem geolocating the IPv6 clients that accessed our web server. The geolocation database I normal use (the free &lt;a href="http://www.maxmind.com/app/geolitecountry"&gt;GeoLite Country&lt;/a&gt; and friends from &lt;a href="http://maxmind/"&gt;Maxmind&lt;/a&gt;) does support IPv6, and the version of their C API supplied with the current Ubuntu LTS (10.04&amp;nbsp; Lucid Lynx) is &lt;i&gt;just&lt;/i&gt; new enough (1.4.6) to cope. But the versions of the Perl and Python bindings needed to process IPv6 both need 1.4.7 of the C API, and since the library is used by quite a lot of Ubuntu utilities upgrading it isn't trivial. In the end I had to build a private version of the C API and the Perl and Python bindings but that was one more bit of work I wasn't expecting.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-3536170525486753399?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/3536170525486753399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/06/more-ipv6-gotchas.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3536170525486753399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3536170525486753399'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/06/more-ipv6-gotchas.html' title='More IPv6 gotchas'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-4023276607819178887</id><published>2011-06-04T11:20:00.000+01:00</published><updated>2011-06-04T11:20:58.307+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPv6'/><title type='text'>IPv6 day - more problems than expected?</title><content type='html'>A couple of posts on the &lt;a href="http://webmedia.company.ja.net/edlabblogs/developmenteye/"&gt;JANET Development Eye blog&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://webmedia.company.ja.net/edlabblogs/developmenteye/2011/05/12/world-ipv6-day/"&gt;http://webmedia.company.ja.net/edlabblogs/developmenteye/2011/05/12/world-ipv6-day/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://webmedia.company.ja.net/edlabblogs/developmenteye/2011/06/02/22000-users/"&gt;http://webmedia.company.ja.net/edlabblogs/developmenteye/2011/06/02/22000-users/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;together with links from them to some &lt;a href="http://www.getipv6.info/index.php/Customer_problems_that_could_occur"&gt;useful pages on the ARIN wiki&lt;/a&gt; suggest that rather more people may experience problems on &lt;a href="http://www.worldipv6day.org/"&gt;IPv6 day&lt;/a&gt; than I had perhaps previously expected. The main problem, ironically, seems to be the widespread deployment by default in many OSs and networks of workarounds intended to provide access to IPv6-only resources from machines with only v4 connectivity. The problem is that these workarounds are often broken, or blocked, or massively sub-optimal, but that applications may still try to use these in preference to v4 even when accessing dual-stack services.&lt;br /&gt;&lt;br /&gt;Really worrying is that measurements by Google suggest that many University networks, with their 'light-touch' approach to regulating network-connected devices, may be badly affected by all this. I suppose we will see on Wednesday!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-4023276607819178887?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/4023276607819178887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/06/ipv6-day-more-problems-than-expected.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4023276607819178887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4023276607819178887'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/06/ipv6-day-more-problems-than-expected.html' title='IPv6 day - more problems than expected?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-669539334179900610</id><published>2011-05-26T11:29:00.003+01:00</published><updated>2011-05-26T11:42:55.030+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><title type='text'>More cooking with cookies</title><content type='html'>Sorry, this blog isn't intended to be all about cookies. I'm not even very interested in them but this whole EU regulation thing just keeps growing and this is as good a place to keep notes about it as anywhere.&lt;br /&gt;&lt;br /&gt;The&amp;nbsp;Department for Culture, Media and Sport has published an open letter on the subject:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dcms.gov.uk/images/publications/cookies_open_letter.pdf"&gt;http://www.dcms.gov.uk/images/publications/cookies_open_letter.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;This seems to be trying to make some interesting assertions, including the idea that consent doesn't always need to be obtained in advance (based on the subtle difference of some instances being preceded by "prior" and some not). It does seem to say that whatever you do they don't think that relying on current browser cookie&amp;nbsp;controls&amp;nbsp;is enough.&lt;br /&gt;&lt;br /&gt;The other interesting development is the addition of a banner to the ICO's web site that tells you about its cookie use and allows you to opt into more cookies (and&amp;nbsp;incidentally&amp;nbsp;get rid of the banner):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ico.gov.uk/"&gt;http://www.ico.gov.uk/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;(Hint: if you want to go back to the default state after you've accepted their cookies then delete the cookie called&amp;nbsp;ICOCookiesAccepted, or all cookies from&amp;nbsp;www.ico.gov.uk).&lt;br /&gt;&lt;br /&gt;I think they are&amp;nbsp;implementing&amp;nbsp;this in their CMS and so serving different versions of their pages to different people, so an identical approach won't work on a purely static site. Note BTW that this means they have to disable caching which may have performance and load implications.&amp;nbsp;I have an idea&amp;nbsp;that a pure JavaScript approach might be possible for a static site, but my&amp;nbsp;JavaScript isn't up to it! I'm rather hoping that Google might provide a canned solution along these lines for Analytics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-669539334179900610?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/669539334179900610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/05/more-cooking-with-cookies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/669539334179900610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/669539334179900610'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/05/more-cooking-with-cookies.html' title='More cooking with cookies'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-7755573076085243475</id><published>2011-05-24T14:25:00.003+01:00</published><updated>2011-05-26T11:41:39.122+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><title type='text'>Further thoughts on cookies (or lack thereof)</title><content type='html'>&lt;br /&gt;The&amp;nbsp;amendments&amp;nbsp;to&amp;nbsp;&lt;a href="http://www.legislation.gov.uk/uksi/2003/2426/contents/made"&gt;The Privacy and Electronic Communications (EC Directive) Regulations 2003&lt;/a&gt;&amp;nbsp;as they affect the use of cookies have now been published in&amp;nbsp;&lt;a href="http://www.legislation.gov.uk/uksi/2011/1208/contents/made"&gt;The Privacy and Electronic Communications (EC Directive) (Amendment) Regulations 2011&lt;/a&gt;. What's surprising (to me) is how little has actually changed, though obviously a small change to legislation can clearly have a wide effect. What also fooled me is that if you don't read the &lt;a href="http://www.ico.gov.uk/~/media/documents/library/Privacy_and_electronic/Practical_application/advice_on_the_new_cookies_regulations.pdf"&gt;ICO's guidance&lt;/a&gt; carefully (as I didn't) you might (as I did) think the change was bigger than it was. For example I thought paragraph (4) was new, and it isn't. In fact it hasn't changed at all.&lt;br /&gt;&lt;br /&gt;One interpretation of all this is that many/most sites may already fail to comply with the 'old' regulations. Were you really giving subscribers "the opportunity to refuse the storage of or access to that information"? ...&amp;nbsp;because&amp;nbsp;if you were it should surely be trivial to turn the tests around and get consent instead. You could argue that all that's happened now is that, by requiring consent, the new regulations have made contraventions&amp;nbsp;more obvious.&lt;br /&gt;&lt;br /&gt;For your delight, here is paragraph 6 from the original &amp;nbsp;regulations with (if I've got it right) the new&amp;nbsp;amendments&amp;nbsp;applied to it (removals struck&amp;nbsp;through, new text underlined):&lt;br /&gt;&lt;blockquote&gt;Confidentiality of communications&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;6.—(1) Subject to paragraph (4), a person shall not &lt;s&gt;use an electronic communications network to store information, or to&lt;/s&gt;&amp;nbsp;&lt;u&gt;store or&lt;/u&gt; gain access to information stored, in the terminal equipment of a subscriber or user unless the requirements of paragraph (2) are met.&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(2) The requirements are that the subscriber or user of that terminal equipment—&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(a) is provided with clear and comprehensive information about the purposes of the storage of, or access to, that information; and&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;s&gt;(b) is given the opportunity to refuse the storage of or access to that information&lt;/s&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;u&gt;(b) has given his or her consent&lt;/u&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(3) Where an electronic communications network is used by the same person to store or access information in the terminal equipment of a subscriber or user on more than one occasion, it is sufficient for the purposes of this regulation that the requirements of paragraph (2) are met in respect of the initial use.&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;u&gt;(3A) For the purposes of paragraph (2), consent may be signified by a subscriber who&amp;nbsp;&lt;/u&gt;&lt;u&gt;amends or sets controls on the internet browser which the subscriber uses or by using&amp;nbsp;&lt;/u&gt;&lt;u&gt;another application or programme to signify consent.&lt;/u&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(4) Paragraph (1) shall not apply to the technical storage of, or access to, information—&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(a) for the sole purpose of carrying out &lt;s&gt;or facilitating&lt;/s&gt; the transmission of a communication over an electronic communications network; or&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;(b) where such storage or access is strictly necessary for the provision of an information society service requested by the subscriber or user.&lt;/blockquote&gt;Not all that different, is it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-7755573076085243475?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/7755573076085243475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/05/further-thoughts-on-cookies-or-lack.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7755573076085243475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7755573076085243475'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/05/further-thoughts-on-cookies-or-lack.html' title='Further thoughts on cookies (or lack thereof)'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2966823909317494984</id><published>2011-05-19T08:51:00.002+01:00</published><updated>2011-05-20T13:49:32.514+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPv6'/><title type='text'>IPv6 Gotchas, and 8th June 2011</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://isoc.org/wp/worldipv6day/files/2011/05/IPv6-test-flight-blue-256-trans.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://isoc.org/wp/worldipv6day/files/2011/05/IPv6-test-flight-blue-256-trans.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;IPv6 has been 'imminent' for a very long time. However it's &lt;a href="http://www-uxsup.csx.cam.ac.uk/~jw35/ipv6-day.html"&gt;shortly&lt;/a&gt; going to have a bit of a boost.&amp;nbsp;8th June, 2011 is '&lt;a href="http://isoc.org/wp/worldipv6day/"&gt;World IPv6 day&lt;/a&gt;' when various big players (Google, Facebook, Yahoo!, Akamai, ...) will enable IPv6 access to their services alongside the existing v4 access as a world-wide test flight for a wider deployment. In Cambridge, some of the services run by the &lt;a href="http://www.cam.ac.uk/cs/"&gt;University Computing Service&lt;/a&gt; will be &lt;a href="http://ucsnews.csx.cam.ac.uk/articles/2011/04/19/kipv6-day-june-8th-2011"&gt;participating&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For almost everyone this will make no difference at all - if, like most people, you only have have access to IPv4 then you will just go on using that as you always have. Likewise if you have working IPv6 you should see no difference even though you'll be using it rather more than normal. But if you have &lt;i&gt;broken&lt;/i&gt; IPv6 support you are likely to have problems on the day. If you want to check, the test pages at&amp;nbsp;&lt;a href="http://test-ipv6.com/"&gt;http://test-ipv6.com/&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://omgipv6day.com/"&gt;http://omgipv6day.com/&lt;/a&gt;&amp;nbsp;seem to be useful, and the University's &lt;a href="http://www.cam.ac.uk/cs/myip/"&gt;My IP&lt;/a&gt; page will at least tell you if have IPv6&amp;nbsp;connectivity&amp;nbsp;with the University.&lt;br /&gt;&lt;br /&gt;It's possible to think of IPv6 as just IPv4 with longer addresses, but there are enough differences and gotchas to make life difficult for both clients and servers. Here are some that we've identified:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Auto-configuration. IPv6&amp;nbsp;natively&amp;nbsp;supports auto-configuration, so if you connect most (recent) computers to an&amp;nbsp;Ethernet&amp;nbsp;that includes an IPv6 router the computer will acquire&amp;nbsp;an IPv6 interface complete with address and default route without you having to do anything. A computer with an active IPv6 interface will normally try to use IPv6 when talking to a service that advertises a IPv6 address, so you may find ourself using IPv6 without knowing it. This has a couple of exciting consequences:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If the IPv6 router you contacted isn't actually connected to the v6 Internet then your traffic isn't going to go anywhere useful. Your computer will probably fall back to using IPv4, but probably after a long (multiple tens of seconds) delay. This is going to look to users as if the internet is going very s l o w l y. It's&amp;nbsp;rumoured&amp;nbsp;that some versions of Windows will under some circumstances spontaneously advertise themselves as IPv6 routers.&lt;/li&gt;&lt;li&gt;Even if you are successfully using v6 (knowingly or otherwise), unless you do something your address won't be in the DNS. So looking it up won't result in a .cam.ac.uk (or whatever) host name, and services that make access control decisions based on client host name aren't going to recognise you. [Even if the service makes decisions based on address rather than host name it will get things wrong if its access control lists haven't been extended to include the necessary IPv6 range(s)].&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If a service advertises a v6 address but doesn't actually respond to requests on that address then again there could be a longish delay before your computer falls back to trying IPv4.&lt;/li&gt;&lt;li&gt;It's entirely possible (though probably not a good idea!) for a service to behave completely differently when accessed over IPv6 from how it does over IPv4. For a start, the process of resolving host names to addresses is entirely separate for IPv4 and IPv6 so there's no particular reason for the two addresses to end up on the same server. Further, web servers providing virtual hosts need a mapping between IP addresses and the corresponding virtual hosts and it's all to easy (as the operators of www.ja.net found some time ago) to forget to extend this mapping to include v6 addresses, with the result that v4 and v6 users end up seeing the content for different virtual hosts when requesting the same URL.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The IPv4 address 127.0.0.1 always corresponds to the local computer and conventionally has the name localhost. It's quite common for components of a server to communicate using this address (e.g. a web application and its database), and equally common to actively restrict communication to this address or name. The coresponding v6 address is '::1' - if this doesn't correspond to the name 'localhost' or if access lists only recognise 127.0.0.1 then, if IPv6 is enabled on a server, it may find that it can't tall to itself!&lt;/li&gt;&lt;li&gt;There are a lot of programs out there, in particular log analysis programs, that implicitly expect IP addresses to look like 131.111.8.46. Such programs may be 'surprised' to come across addresses like 2001:630:200:8080::80:0. How they behave will depend on how well they have been written, but in some cases this may not be pretty. Further, note that library calls that lookup v4 addresses to find the coresponding host name may not work with v6 addresses.&lt;/li&gt;&lt;li&gt;Firewalls and packet filters will need IPv6 configurations to match their IPv4 ones, and they are unlikely to be able to automatically derive one from the other. So, by default, they are likely to either block all IPv6 traffic or allow it - neither is likely to be what's wanted.&lt;/li&gt;&lt;li&gt;A lot of networks (especially home ones) use RFC 1918 'private' addresses and network address translation (NAT) when talking to the wider Internet. While not intended as a security measure, this does somewhat shelter machines on such network from active attack from the Internet. Use of private addresses and NAT are a response to the shortage of IPv4 addresses which isn't a problem in the IPv6 world, and so they are not widely supported (if at all). So enabling v6 on a previously 'private' network may expose previously hidden security vulnerabilities to the world, which may be unfortunate. &lt;/li&gt;&lt;/ul&gt;IPv6 is probably finally coming. Some of us may get an early brush with it on 8th June. It really is time to start thing about the consequences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2966823909317494984?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2966823909317494984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/05/ipv6-gotchas-and-8th-june-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2966823909317494984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2966823909317494984'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/05/ipv6-gotchas-and-8th-june-2011.html' title='IPv6 Gotchas, and 8th June 2011'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-1664187445020895809</id><published>2011-04-14T08:34:00.003+01:00</published><updated>2011-04-14T08:37:45.568+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Why you shouldn't give away your password</title><content type='html'>So, you want to embed details of you Twitter, or Facebook, or &amp;lt;insert flavour of the month here&amp;gt; account on you blog. There's a widget that will do this (in fact the widget is the only way to do this) and 'all' you need to give it is you user name and password. You are using a blog provided by a big well known provider so of course you can trust them not to misuse your credentials. What can possibly go wrong?&lt;br /&gt;&lt;br /&gt;This:&lt;br /&gt;&lt;a target="_blank" href="http://techcrunch.com/2011/04/13/hacker-gains-access-to-wordpress-com-servers/"&gt;http://techcrunch.com/2011/04/13/hacker-gains-access-to-wordpress-com-servers/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-1664187445020895809?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/1664187445020895809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/04/why-you-shouldn-give-away-your-password.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1664187445020895809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1664187445020895809'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/04/why-you-shouldn-give-away-your-password.html' title='Why you shouldn&amp;#39;t give away your password'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-8179895420512704721</id><published>2011-03-15T10:44:00.000Z</published><updated>2011-03-15T10:44:35.543Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='FAM'/><title type='text'>User-ids in a Shibboleth world</title><content type='html'>&lt;br /&gt;&lt;i&gt;[This is a copy of a &lt;a href="https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1103&amp;amp;L=JISC-SHIBBOLETH&amp;amp;F=&amp;amp;S=&amp;amp;P=1057"&gt;question posted to the&amp;nbsp;JISC-SHIBBOLETH@JISCMAIL.AC.UK mailing list&lt;/a&gt; which, to date, hasn't seen much in the way of responses to the questions at the end]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;A lot of existing web apps have wired into in the, often at a very low&amp;nbsp;level, the idea that each 'user' has associated with them a unique,&amp;nbsp;short-ish, fairly friendly identifier. Traditionally these were things like&amp;nbsp;jw35 or 2006STUD42, though it's increasingly common to use an email address&amp;nbsp;belonging to the user instead. Quite often these are (in fact or in&amp;nbsp;practise) the primary key into the application's user database and they tend&amp;nbsp;to get displayed (as in "Hello jw35", or in things like usage logs) and&amp;nbsp;these two usages are often not distinguished.&lt;br /&gt;&lt;br /&gt;When converting existing software for a SAML environment there's the&amp;nbsp;question of what to use to fill this slot. If you have ePPN available then&amp;nbsp;that will probably work (because it looks like an email address) but in the&amp;nbsp;UK federation that's unlikely. The 'old' form of ePTID (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rUL8A3M667VfsiCImQVFffN9cNk=@cam.ac.uk&lt;/span&gt;) might just about work, though it's&amp;nbsp;ugly when displayed. The new form is close to unusable for display purposes:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;https://shib-test.raven.cam.ac.uk/shibboleth!https://mnementh.csi.cam.ac.uk/shibboleth/ucam!rUL8A3M667VfsiCImQVFffN9cNk=.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course if you are creating accounts in advance and only later binding&amp;nbsp;them to SAML identities you can use whatever user-id scheme you want, but&amp;nbsp;what if you are creating accounts 'on the fly'?&lt;br /&gt;&lt;br /&gt;We've noticed that 'off the shelf' Shibboleth adaptations (most recently for&amp;nbsp;Plone and MediaWiki) tend to simply use what turns up in REMOTE_USER which,&amp;nbsp;by default, will be the first of ePPN and the old and new forms of ePTID&amp;nbsp;that isn't blank. In a UK federation context this doesn't really work, and I&amp;nbsp;suspect many of these adaptations were written for contexts where ePPN is&amp;nbsp;more widely available.&lt;br /&gt;&lt;br /&gt;What have other people working in the UK environment done to address this&amp;nbsp;problem, assuming you are seeing it too? Is there a 'best practise'?&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-8179895420512704721?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/8179895420512704721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/03/user-ids-in-shibboleth-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8179895420512704721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8179895420512704721'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/03/user-ids-in-shibboleth-world.html' title='User-ids in a Shibboleth world'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-5797640551624916587</id><published>2011-03-14T11:24:00.007Z</published><updated>2011-05-17T18:03:10.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='law'/><title type='text'>Consent to be required for cookies? (updated 2011-03-15 and 2011-05-11 and 2011-05-17)</title><content type='html'>An amendment to the EU Privacy and Electronic Communications Directive comes into effect on 25 May 2011. This makes it necessary to obtain consent before storing and retrieving usage information on users’ computers. Details are unclear, mainly because the UK government has&amp;nbsp;apparently&amp;nbsp;yet to publicise any information on how this requirement will be&amp;nbsp;implemented&amp;nbsp;in the UK, but in the limit it could require every web site to obtain informed user consent before setting any cookies, which is going to be interesting...&lt;br /&gt;&lt;br /&gt;Here are some external references to the topic:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.out-law.com/page-10510"&gt;Out-Law.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ico.gov.uk/for_organisations/privacy_and_electronic_communications/the_guide/cookies.aspx"&gt;Information Commissioner&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jisclegal.ac.uk/ManageContent/ViewDetail/tabid/243/ID/1917/New-Law-on-Cookies-Coming-into-Force.aspx"&gt;JISCLegal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://localgovernmentlawyer.co.uk/index.php?option=com_content&amp;amp;view=article%20&amp;amp;id=6059%3Aico-urges-public-sector-to-prepare-for-change-in-law-on-use-of-cookies&amp;amp;catid=59%3Agovernance-a-risk-articles&amp;amp;q=&amp;amp;Itemid=27"&gt;LocalGovermentLawyer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/support/forum/p/Google+Analytics/thread?tid=6a4329cd152b47e1&amp;amp;hl=en"&gt;Google Analytics Support Forum&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;i&gt;Updated 2011-03-15: More links&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.bbc.co.uk/news/technology-12668552"&gt;BBC News&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sitepoint.com/2011/03/10/eu-cookie-crumbling-crisis/"&gt;Sitepoint&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.davidnaylor.co.uk/eu-cookies-directive-interactive-guide-to-25th-may-and-what-it-means-for-you.html"&gt;David Naylor&lt;/a&gt; (with helpful demonstration of best practice :-)&lt;/li&gt;&lt;li&gt;&lt;a href="http://webmedia.company.ja.net/edlabblogs/regulatory-developments/2011/03/14/cookie-law-time-to-act/"&gt;Andrew Cormack's blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.out-law.com/page-11807"&gt;Out-LAw.com&lt;/a&gt; (again)&lt;/li&gt;&lt;/ul&gt;Updated 2011-05-11: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ico.gov.uk/~/media/documents/library/Privacy_and_electronic/Practical_application/advice_on_the_new_cookies_regulations.pdf"&gt;Guidance from the Information Commissioner's Office&lt;/a&gt; (2011-05-09)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.culture.gov.uk/news/media_releases/8051.aspx"&gt;DCMS Press Release&lt;/a&gt; (2011-04-15)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Updated 2011-05-17:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://webmedia.company.ja.net/edlabblogs/regulatory-developments/2011/05/12/cookies-now-time-to-wake-up/"&gt;Andrew Cormack's blog&lt;/a&gt; (again) (2011-05-12)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-5797640551624916587?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/5797640551624916587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/03/consent-to-be-required-for-cookies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5797640551624916587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5797640551624916587'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/03/consent-to-be-required-for-cookies.html' title='Consent to be required for cookies? (updated 2011-03-15 and 2011-05-11 and 2011-05-17)'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-3951743955918199241</id><published>2011-03-02T11:26:00.001Z</published><updated>2011-03-02T11:46:23.977Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Other people's content shown to be dangerous</title><content type='html'>In &lt;a href="http://jw35.blogspot.com/2010/01/promiscuous-javascript-considered.html"&gt;Promiscuous JavaScript considered dangerous&lt;/a&gt; I said that including content from elsewhere on your pages was dangerous, not only because the people supplying the content might be malicious but also because they might fail to prevent third parties from injecting malicious content. &lt;br /&gt;&lt;br /&gt;Judging by &lt;a href="http://www.bbc.co.uk/news/technology-12608651"&gt;this BBC News article&lt;/a&gt; this is exactly what happened recently to the web sites of the London Stock Exchange, Autotrader, the Vue cinema chain and a number of other organisations as a result of displaying adverts provided by the advertising firm Unanimis. This will have caused problems for these various organisations' clients, and reputational damage and hassle for the organisations themselves.&lt;br /&gt;&lt;br /&gt;Ideally you'd carefully filter other people's content before including it in your pages. But you may not be able to do this if, for example, the supplier requires you to let everything through untouched or if you are using the promiscuous JavaScript approach. In such cases you are entirely dependent on the competence of the supplier and, as demonstrated here, some are more competent than others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-3951743955918199241?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/3951743955918199241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/03/other-peoples-content-shown-to-be.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3951743955918199241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3951743955918199241'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/03/other-peoples-content-shown-to-be.html' title='Other people&apos;s content shown to be dangerous'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-4752894508711397484</id><published>2011-02-17T10:20:00.001Z</published><updated>2011-02-19T12:02:55.499Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='#guug11'/><category scheme='http://www.blogger.com/atom/ns#' term='Authz'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>Google Apps: SSO and IdM at #GUUG11</title><content type='html'>Here are some slides from a presentation I gave on Google Apps SSO and Identity Management at &lt;a href="http://guug11.lboro.ac.uk/"&gt;the inaugural 'Google Apps for Education UK User Group' meeting&lt;/a&gt; at Loughborough University on 15th February 2011:&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_6939574" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/jw35/jw-gappsssoandidm" title="Google Apps - SSO and Identity Management at the University of Cambridge"&gt;Google Apps - SSO and Identity Management at the University of Cambridge&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse6939574" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jw-gapps-sso-and-idm-110215165147-phpapp01&amp;stripped_title=jw-gappsssoandidm&amp;userName=jw35" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6939574" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jw-gapps-sso-and-idm-110215165147-phpapp01&amp;stripped_title=jw-gappsssoandidm&amp;userName=jw35" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jw35"&gt;Jon Warbrick&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-4752894508711397484?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/4752894508711397484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/02/google-apps-sso-and-idm-at-guug11.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4752894508711397484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4752894508711397484'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/02/google-apps-sso-and-idm-at-guug11.html' title='Google Apps: SSO and IdM at #GUUG11'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-8135468234493044800</id><published>2011-02-09T17:52:00.003Z</published><updated>2011-02-10T13:47:30.298Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificates'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Loops in PKI certificate hierarchies and Firefox bugs</title><content type='html'>In &lt;a href="http://jw35.blogspot.com/2010/05/splits-and-joins-in-pki-certificate.html"&gt;a previous posting&lt;/a&gt;, I mentioned being surprised to discover that PKI certificate hierarchies were more complicated than the strict trees that I had always assumed them to be. At the time I rather assumed that they must be &lt;a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph"&gt;directed acyclic graphs&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I've subsequently realised that there is nothing to prevent them from being cyclic graphs and have actually found a loop in an existing commercial hierarchy. Unfortunately it looks as if I wasn't the only person making false assumptions since it seems that certificate loops trigger an old-but-not-yet fixed bug in Firefox that prevents certificate chain verification.&lt;br /&gt;&lt;br /&gt;Certificates contain within them the 'Distinguished Name' (DN) of a further certificate that contains the public half of the key used to sign the first certificate. Certificate are only identified by name, and there is nothing to stop multiple certificates sharing the same name (though all the certificates with the same name had better contain the same key or new and exciting bad things will probably happen). All this is what I worked out last time.&lt;br /&gt;&lt;br /&gt;What I've discovered that's new is illustrated in the following diagram:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_diCVFt7FduE/TVK-ylmeBdI/AAAAAAAAAI8/erWyGJrJrpc/s1600/trimmed-comodo-certs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="171" src="http://1.bp.blogspot.com/_diCVFt7FduE/TVK-ylmeBdI/AAAAAAAAAI8/erWyGJrJrpc/s400/trimmed-comodo-certs.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This represents part of the hierarchy under which certificates are&lt;a href="http://www.ja.net/services/jcs/"&gt; issued to UK HE institutions by JANET&lt;/a&gt; (and I think by similar organisations in other countries) under a contract with &lt;a href="http://www.comodo.com/"&gt;Comodo&lt;/a&gt;. In this diagram:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The blocks with grey backgrounds represent key pairs. The numbers at the top of the box are the first half of the key's 'Key Identifier'.&lt;/li&gt;&lt;li&gt;The smaller blocks represent certificates containing the corresponding public keys.&lt;/li&gt;&lt;li&gt;The arrows link certificates to the keys that signed them (and so which can validate them).&lt;/li&gt;&lt;li&gt;Certificates with red backgrounds represent self-signed certificates that are trusted roots (at least on my copy of Firefox). The certificate with blue background represent an example server certificate.&lt;/li&gt;&lt;li&gt;The number in each certificate is the first half of the certificate's SHA-1 hash. &lt;/li&gt;&lt;li&gt;Certificates with a&amp;nbsp; green border represent the recommended verification chain for JANET-issued certificates.&lt;/li&gt;&lt;/ol&gt;Copies of the certificates involved (and others) can be found &lt;a href="http://www-uxsup.csx.cam.ac.uk/%7Ejw35/comodo-certificates/"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The problem here are the two certificates "31:93:..." and "9E:99:...", since each represents a potential verification route for the other. Neither are part of the 'official' verification chain for JANET-issued certificates. "9E:99:..." is distributed by Comodo in support of other of their certificate products. I don't know where "31:93:..." comes from, but I assume it appears in someone else's 'official' certificate chain. Both these 'intermediate' certificates will presumably be included in certificate bundles by particular web servers and, once serverd, tend to be cached by web browsers.&lt;br /&gt;&lt;br /&gt;The problem is that, once a web browser has a copy of both of these there's a danger of it going into a spin since each is an apparently acceptable&lt;br /&gt;parent for the other.&amp;nbsp; It turns out that Firefox has exactly this problem, as described &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=479508"&gt;in bug 479508&lt;/a&gt;. Unfortunately this bug last saw any action in March 2008 so it's not clear when, if ever, it's going to be fixed. There are some other reports of what I suspect is the same problem &lt;a href="http://www.blogger.com/%20http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=589023"&gt;here&lt;/a&gt; and &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=619241"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So who's problem is it? Clearly Firefox could and should be more careful in how it constructs certificate chains. It's possible that other SSL software is vulnerable to similar problems, though I've only seen this manifest in Firefox (and only then occasionally). But I also wonder what the Certification Authorities thought they were doing when they issued these certificates. As far as I can see they were both issued as 'cross-certification' certificates, intended to allow server certificates issued under one root certificate to be validated by reference to another. Issuing one of these isn't a problem. Issuing a pair clearly is. &lt;br /&gt;&lt;br /&gt;A work around, should this problem bite you, should be to delete "31:93:..." and "9E:99:..." from Firefox's certificate store. Neither are roots, and any server that needs them to get its certificate verified should be providing them, so deleting them should be entirely safe. The work-around should last until you next pick up copies of both of these, at which point you'll need to delete them again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-8135468234493044800?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/8135468234493044800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/02/loops-in-pki-certificate-hierarchies.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8135468234493044800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8135468234493044800'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/02/loops-in-pki-certificate-hierarchies.html' title='Loops in PKI certificate hierarchies and Firefox bugs'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_diCVFt7FduE/TVK-ylmeBdI/AAAAAAAAAI8/erWyGJrJrpc/s72-c/trimmed-comodo-certs.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-3341830123368738972</id><published>2011-02-01T08:21:00.001Z</published><updated>2011-02-01T08:43:37.736Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificates'/><title type='text'>Root certificates for MacOS OpenSSL</title><content type='html'>&lt;div class="author"&gt;In &lt;a href="http://jw35.blogspot.com/2010/05/doing-certificate-verification-in.html"&gt;an earlier post&lt;/a&gt; I mentioned that, while MacOS includes OpenSSL it isn't preconfigured with any trusted root certificates. So before you can use it to do SSL properly you need to provide a set.&amp;nbsp;&lt;/div&gt;&lt;div class="author"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="author"&gt;My previous post suggested extracting them from the bundle that comes with Firefox, but I've recently come across a &lt;a href="http://www.madboa.com/geek/pine-macosx/"&gt;useful article about Alpine on MacOS&lt;/a&gt; by&lt;span class="authorname"&gt;&lt;span class="firstname"&gt; Paul&lt;/span&gt; &lt;span class="surname"&gt;Heinlein&lt;/span&gt;&lt;/span&gt; &lt;i class="email"&gt;&amp;lt;&lt;a href="mailto:heinlein@madboa.com"&gt;heinlein@madboa.com&lt;/a&gt;&amp;gt;&lt;/i&gt; in which he points out that the MacOS operating system already has a set of preconfigured roots and that these can be extracted using the Keychain Access utility for use by OpenSSL. See &lt;a href="http://www.madboa.com/geek/pine-macosx/#openssl"&gt;his posting for details&lt;/a&gt;, but to quote from it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open the Keychain Access application and choose the System Roots keychain. Select the Certificates category and you            should see 100 or more certificates listed in the main panel of the window.&lt;/li&gt;&lt;li&gt;Click your mouse on any of those certificate entries and then select them all with &lt;span class="guimenu"&gt;Edit&lt;/span&gt;            → &lt;span class="guimenuitem"&gt;Select All&lt;/span&gt; (&lt;span class="shortcut"&gt;&lt;b&gt;&lt;span class="keysym"&gt;Cmd&lt;/span&gt;+&lt;span class="keycap"&gt;&lt;b&gt;A&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Once the certificates are all highlighted, export them to a file: &lt;span class="guimenu"&gt;File&lt;/span&gt; → &lt;span class="guimenuitem"&gt;Export Items…&lt;/span&gt;. Use &lt;span class="quote"&gt;“&lt;span class="quote"&gt;cert&lt;/span&gt;”&lt;/span&gt; as the filename            and make sure &lt;span class="quote"&gt;“&lt;span class="quote"&gt;Privacy Enhanced Mail (.pem) &lt;/span&gt;&lt;/span&gt;has been chosen as            the file format.&lt;/li&gt;&lt;li&gt;Copy the newly created &lt;code class="filename"&gt;cert.pem&lt;/code&gt; into the &lt;code class="filename"&gt;/System/Library/OpenSSL&lt;/code&gt; directory&lt;/li&gt;&lt;/ol&gt;Now, I wonder why Apple didn't do this for us? &lt;/div&gt;&lt;div&gt;&lt;div class="author"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-3341830123368738972?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/3341830123368738972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/02/root-certificates-for-macos-openssl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3341830123368738972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3341830123368738972'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/02/root-certificates-for-macos-openssl.html' title='Root certificates for MacOS OpenSSL'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2619604243718236752</id><published>2011-01-29T16:00:00.000Z</published><updated>2011-01-29T16:00:27.623Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='Identity Mgmt'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='Uam WebAuth'/><title type='text'>Thoughts on "Initial authentication"</title><content type='html'>"&lt;i&gt;If it was easy we'd have already done it!&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;I've recently contributed to some work on 'Password management". Here are some of the thoughts that I've managed to condense into words. Don't be disappointed - they raise at least as many questions as they answer.&lt;br /&gt;&lt;br /&gt;1) Looking say five years ahead I think we need to talk about 'authentication' and not just 'passwords'. Given their vulnerability to keyboard sniffing it seems to me that within five years it will be necessary at least to support (though perhaps not require) some sort(s) of non-password based authentication for some systems.&lt;br /&gt;&lt;br /&gt;2) While there will be pressure do so, it might be better not to try to solve everyone's problems. For example in some cases it might still be best to create a shared password system for use only on a limited set of systems and not allow anyone else to use it.&lt;br /&gt;&lt;br /&gt;3) The understandable enthusiasm for SSO by some is at variance with an equal enthusiasm, in some cases promoted by the same people, for aggressive inactivity timeouts on individual systems. Meeting &lt;i&gt;everyone's&lt;/i&gt; individual security requirements may result in an unusable service.&lt;br /&gt;&lt;br /&gt;4) The group developing HTML5 have adopted a policy that says "In case of conflict, consider users over authors over implementers over specifiers over theoretical purity". It might be sensible to adopt something similar in this area (suitably adapted). Or perhaps not... Discuss.&lt;br /&gt;&lt;br /&gt;5) A critical feature of any authentication system is who is able to reset its authentication credentials (i.e. reset passwords or equivalent), because they (all of them) can subvert the security of the systems (all of them) that use it. It looks to me to be difficult to simultaneously meet the expectations of people who would like easy local reset of passwords and the operators of some 'high risk' systems who want tight control of access.&lt;br /&gt;&lt;br /&gt;6) Given the existence of a central password verification service overloading existing protocols (LDAP, Radius, ...), I don't see any technical way to restrict the clients that can use it since clients don't identify themselves. Such use could be restricted by rules, but they would be hard to enforce, and by non-100% perfect technical restrictions (e.g. client IP address filtering). So anyone providing such a service will have to accept that in practise it will be open to anyone to use. You could implement a central password verification service using something like SAML, where clients are strongly identified, but then there wouldn't be any clients to use it.&lt;br /&gt;&lt;br /&gt;7) Accepting that we'll at least have to accept passwords for the foreseeable future (even if we accept other things in parallel), then the not-unreasonable idea that people will only willing accept using two passwords restricts us to a maximum of two authentication systems. So how about:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a) A 'low trust' service verifying a single password over one or more commonly used protocols (so LDAP, RADUIS, TACAS), intended for use in situations where we can't do better (3rd party service that can only do LDAP auth, WebDAV service that has to work with common clients that can only do username/password, etc).Document that this is a low trust service, that server operators can intercept passwords in transit, etc. Require good practive as a condition of using the service - don't ship passwords over unsecured networks, don't write them to disk, etc. Perhaps make token attempts to restrict client access (e.g. by IP address) but accept and document that this won't be perfect. This violates all my &lt;a href="http://jw35.blogspot.com/2009/11/secure-use-of-passwords.html"&gt;prerequisites for secure use of passwords&lt;/a&gt;, but perhaps on balance doing so is necessary to support what needs to be supported.&lt;/li&gt;&lt;li&gt;b) A 'higher trust' service where credential disclosure is limited to local workstations and a logically single central server. Web redirection based protocols (i.e. Ucam_WebAuth, Shibboleth) and Kerberos (and so Windows AD) meet this requirement and provide at least some single sign-on. Web redirect, and perhaps Kerberos could both use things other than a password for initial authentication. SPNEGO holds the possibility of transparently transferring a pre-existing Kerberos session into a web redirection-based system thus widening SSO for existing Kerberos users but leaving open password or other authentication for access to web systems in situations when Kerberos isn't available. &lt;/li&gt;&lt;/ul&gt;Item (b) violates my third prerequisite for secure use of passwords ("It must be possible for password holders to decide when it is safe to divulge their password"), but I'm coming to the conclusion that the price of adhering to this principle does not warrant the cost.&lt;br /&gt;&lt;br /&gt;8) If you can't stomach the single shared password idea, an alternative might be a 'Managed Password Service' that extended the 'token' (in the current University Computing Service sense) idea by centrally managing multiple password sets (one for each 'system'). So the administrator of a new system somewhere could mint a new password set for their system and configure their system to do password verification against it using LDAP, RADIUS or anything else supported. Users could set and reset these passwords under the authority of their web redirect/Kerberos credentials. The end-system would have to it's own &lt;i&gt;authorisation&lt;/i&gt; since in principle anyone could create a password for any system. This doesn't give 'two passwords', but it does at least allow one password to manage all the others.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2619604243718236752?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2619604243718236752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/01/thoughts-on-initial-authentication.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2619604243718236752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2619604243718236752'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/01/thoughts-on-initial-authentication.html' title='Thoughts on &quot;Initial authentication&quot;'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-263159903764075096</id><published>2011-01-12T14:13:00.002Z</published><updated>2011-01-12T16:30:31.226Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='Microformats'/><title type='text'>Microformats (lots of Microformats)</title><content type='html'>I've wanted to play with &lt;a href="http://en.wikipedia.org/wiki/Microformat"&gt;microformats&lt;/a&gt; for some time. The need to rework my (still somewhat minimal) &lt;a href="http://www-uxsup.csx.cam.ac.uk/%7Ejw35/"&gt;work home page&lt;/a&gt; provided an ideal opportunity. To see the effect you'll need a browser plug-in such as &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4106/"&gt;Operator&lt;/a&gt; for Firefox, or to use something like the &lt;a href="http://www.google.com/webmasters/tools/richsnippets"&gt;Google Rich Snippits testing tool&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Essentially microformats (and their friends - see below) provide a way of marking up HTML content with additional semantics to allow automatic parsing that wouldn't otherwise be possible. For example a human would know this this supplies my telephone number: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  Jon Warbrick&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; Tel: +44 1223 337733&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; &amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;but if I mark it up like this&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;p class="vcard"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;   &amp;lt;span class="fn"&amp;gt;Jon Warbrick&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  Tel: &amp;lt;span class="tel"&amp;gt;+44 1223 337733&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;  &amp;lt;/p&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;then microformat-aware processors should be able to reliably extract the number and associate it with my name - and then perhaps use this to create a contact list entry or put a call through to me. Similar microformats exist for events, reviews, licences, etc.  &lt;br /&gt;&lt;br /&gt;It turns out that there are (at least) three different, competing microformat-like systems out there:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Microformat"&gt;Microformats&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;The original offering in this area. Aims to add semantic markup for various classes  of 'thing' to standards-conforming HTML 4.01/XHTML 1.0. It largely does this using HTML structure and a range of pre-defined class names.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/RDFa"&gt;RDFa&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;("Resource Description Framework in attributes") defines a set of attribute-level extensions to &lt;a href="http://en.wikipedia.org/wiki/XHTML"&gt;XHTML&lt;/a&gt; which make it possible to add semantic markup using RDF syntax.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Microdata"&gt;Microdata&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;This is a (proposed) feature of &lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML5&lt;/a&gt; that adds semantic markup in a similar way to microformats, but using new attributes &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-itemscope"&gt;itemscope&lt;/a&gt;, &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#names:-the-itemprop-attribute"&gt;itemprop&lt;/a&gt;, &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-itemtype"&gt;itemtype&lt;/a&gt; and &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-itemref"&gt;itemref&lt;/a&gt; rather than overloading class. As an experiment I've also tried &lt;a href="http://www-uxsup.csx.cam.ac.uk/%7Ejw35/jw35-microdata.html"&gt;marking up my contact details using microdata&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-263159903764075096?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/263159903764075096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2011/01/microformats-lots-of-microformats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/263159903764075096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/263159903764075096'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2011/01/microformats-lots-of-microformats.html' title='Microformats (lots of Microformats)'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2001546596344970160</id><published>2010-08-09T20:50:00.002+01:00</published><updated>2010-08-10T08:53:14.121+01:00</updated><title type='text'>If only Virgin Media were competent...</title><content type='html'>Is it too much to ask for a broadband supplier to get forward and reverse DNS registrations for their own addresses right?&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;b&gt;$&lt;/b&gt; who&lt;br /&gt;jw35     pts/0        2010-08-09 19:32 (81.98.240.47)&lt;br /&gt;&lt;b&gt;$&lt;/b&gt; dig +short -x 81.98.240.47&lt;br /&gt;cpc2-cmbg4-0-0-cust814.know.cable.virginmedia.com.&lt;br /&gt;&lt;b&gt;$&lt;/b&gt; dig +short cpc2-cmbg4-0-0-cust814.know.cable.virginmedia.com&lt;br /&gt;81.98.&lt;b&gt;243&lt;/b&gt;.47&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Result: OpenSSH restriction based on hostname fails because the client hostname can't be established and I waste an hour trying to debug the problem.&lt;br /&gt;&lt;br /&gt;Actually it's worse than that:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;$ dig +short -x 81.98.243.47&lt;br /&gt;cpc2-cmbg4-0-0-cust814.&lt;b&gt;cmbg&lt;/b&gt;.cable.virginmedia.com.&lt;br /&gt;$ dig +short cpc2-cmbg4-0-0-cust814.cmbg.cable.virginmedia.com&lt;br /&gt;81.98.243.47&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Argh!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update 2010-08-10&lt;/i&gt;: It looks as if the problem may be resolving. The authoritative name servers for 240.98.81.in-addr.arpa (ns[1,2,3,4].virginmedia.net) seem to be serving consistent results:&lt;tt&gt;&lt;br /&gt;&amp;nbsp;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;$ dig +short +norecurse @ns1.virginmedia.net -x 81.98.240.47&lt;br /&gt;cpc2-cmbg4-0-0-cust46.cmbg.cable.virginmedia.com&lt;br /&gt;$ dig +short +norecurse @ns1.virginmedia.net cpc2-cmbg4-0-0-cust46.cmbg.cable.virginmedia.com&lt;br /&gt;81.98.240.47&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately they serve this information with 7 day TTLs and it's going to be several more days before the bogus information if finally purged from DNS server caches.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2001546596344970160?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2001546596344970160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/08/if-only-virgin-media-were-competent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2001546596344970160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2001546596344970160'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/08/if-only-virgin-media-were-competent.html' title='If only Virgin Media were competent...'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-8531919483365389517</id><published>2010-05-18T15:09:00.006+01:00</published><updated>2010-05-18T18:28:35.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificates'/><title type='text'>Splits and joins in PKI certificate hierarchies</title><content type='html'>I've always visualised PKI certificate hierarchies as strict trees. In this view, CA root certificates either directly authenticate end-user server and client certificates, or they authenticate multiple intermediate certificates, which may in their turn authenticate multiple further intermediate certificates, which eventually authenticate end-user certificates:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_diCVFt7FduE/S_KhIxUCTJI/AAAAAAAAAH0/il_e8mYKUtU/s1600/tree.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://2.bp.blogspot.com/_diCVFt7FduE/S_KhIxUCTJI/AAAAAAAAAH0/il_e8mYKUtU/s320/tree.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;What hadn't occurred to me was that these hierarchies can also branch upward, with certificates being authenticated by more than one certificate above it:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_diCVFt7FduE/S_KiUMyRioI/AAAAAAAAAH8/y7RvfnfBTKg/s1600/tree2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_diCVFt7FduE/S_KiUMyRioI/AAAAAAAAAH8/y7RvfnfBTKg/s320/tree2.png" width="233" /&gt;&lt;/a&gt;&lt;/div&gt;But as it happens I've recently come across two real-live examples of this in commercial CA certificate hierarchies.&lt;br /&gt;&lt;br /&gt;The first is in the one operated by &lt;a href="http://www.comodo.com/"&gt;Comodo&lt;/a&gt; implementing the &lt;a href="http://www.ja.net/services/jcs/index.html"&gt;JANET Certificate Service&lt;/a&gt; for UK HE sites. According to the documentation, the 'O=TERENA, CN=TERENA SSL CA' certificate chains to one ultimately authenticated by&amp;nbsp; 'O=AddTrust AB, CN=AddTrust External CA Root'. But it can just as easily be verified by a commonly installed root 'O=The USERTRUST Network, CN=UTN-USERFirst-Hardware'. I've no idea why it's like this.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_diCVFt7FduE/S_KX3hZK92I/AAAAAAAAAHk/GN7fUdAiVF4/s1600/comodo-certs-trimmed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/_diCVFt7FduE/S_KX3hZK92I/AAAAAAAAAHk/GN7fUdAiVF4/s400/comodo-certs-trimmed.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;The second is in a hierarchy operated by &lt;a href="http://www.thawte.com/"&gt;Thawte&lt;/a&gt;. Here they are introducing a new 2048-bit root certificate, but as a precaution have also created an intermediate certificate that chains back to the old root:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_diCVFt7FduE/S_KYVFjzNgI/AAAAAAAAAHs/OAxggxU8L6E/s1600/thawte-certs-trimmed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://4.bp.blogspot.com/_diCVFt7FduE/S_KYVFjzNgI/AAAAAAAAAHs/OAxggxU8L6E/s400/thawte-certs-trimmed.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This all has interesting implications for certificate verification since there are now multiple possible paths from an end user certificate to a potential root. From a little experimentation it appears that Firefox and Safari manage to find the shortest path to a configured root, but CryptoAPI (and so Internet Explorer and most of the rest of Windows) and OpenSSL take the certificate chain as provided by the server and then try verification from the end of that without ever trying to backtrack &lt;i&gt;(but see note below)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This makes it impossible to take advantage of having both roots available since, taking the Thawte case, if you include the 'O=thawte, Inc., CN=thawte Primary Root CA' intermediate in the chain then your Windows/OpenSSL clients are bound to end up attempting verification against 'O=Thawte Consulting cc, CN=Thawte Premium Server CA' (and failing if they don't have it), and if you don't they will verify against the 'O=thawte, Inc., CN=thawte Primary Root CA' root (and failing if the don't have that).&lt;br /&gt;&lt;br /&gt;The situation isn't helped by the fact that (if I'm reading it right) the relavent RFC describes verification from root to leaf even though in practice you'll always be doing it from leaf to root.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note&lt;/i&gt;: subsequent further experimentation suggests that it's more complicated. Firefox does seem to be finding the shorter path in the Thawte case,&amp;nbsp; but finds the longer path in the Comodo case and fails validation if the 'O=AddTrust AB, CN=AddTrust External CA Root' is disabled. It's possible that the behaviour is influenced by other data in the various certificates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-8531919483365389517?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/8531919483365389517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/05/splits-and-joins-in-pki-certificate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8531919483365389517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/8531919483365389517'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/05/splits-and-joins-in-pki-certificate.html' title='Splits and joins in PKI certificate hierarchies'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_diCVFt7FduE/S_KhIxUCTJI/AAAAAAAAAH0/il_e8mYKUtU/s72-c/tree.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-5198600281084713640</id><published>2010-05-17T15:44:00.005+01:00</published><updated>2011-02-01T08:28:23.843Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Certificates'/><title type='text'>Doing certificate verification in OpenSSL clients (properly)</title><content type='html'>Many SSL-capable applications, particularly those that started life on a Unix/Linux platform, use &lt;a href="http://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; to implement the SSL protocol. Amongst other checks, SSL clients are expected to verify that certificates that they receive from servers have been correctly signed by a Certification Authority (CA) that the client has been configured to trust, but doing this correctly (or at all) with OpenSSL turns out to be harder than you might think.&lt;br /&gt;&lt;br /&gt;For a start, OpenSSL can be instructed not to bother with verification. This can seem like an easy way to get rid of annoying error messages and to make&amp;nbsp; things work, but doing so makes clients vulnerable to server impersonation and man-in-the-middle attacks. Most clients do verification by default, but things like &lt;a href="http://curl.haxx.se/"&gt;curl&lt;/a&gt;'s&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;-k&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;--insecure&lt;/span&gt; command line options,&amp;nbsp; and &lt;a href="http://www.washington.edu/pine/"&gt;Pine&lt;/a&gt;'s &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/novalidate-cert&lt;/span&gt; option in mailbox and SMTP server definitions will suppress this. The first step towards doing certificate verification properly is to make sure you have verification turned on.&lt;br /&gt;&lt;br /&gt;The next problem is that to verify a server certificate a client must have access to the root certificates of the CAs it chooses to trust. OpenSSL can access these in two ways: either from a single file containing a concatenation of root certificates, or from a directory containing the certificates in separate files. In the latter case, the directory must also contain a set of symlinks pointing to the certificate files, each named using a hash of the corresponding certificate's subject's Distinguished Name. OpenSSL comes with a program, c_rehash, that generates or regenerates these symlinks and it should be run whenever the set of certificates in a directory changes. All the certificates should be in PEM format (base64 encoded certificate data, &amp;nbsp; enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" lines).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[Actually it's worse than this, because the client also needs access to any intermediate certificates that are needed to construct a chain linking the servers certificate to the corresponding root. It's the server's responsibility to provide these in intermediates along with its own certificate but sometimes they don't, making verification difficult or impossible. See below for how to detect this problem]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The OpenSSL library has compiled-in default locations for root certificates. You can find out what it is by first running the OpenSSL &lt;a href="http://www.openssl.org/docs/apps/version.html"&gt;version&lt;/a&gt; utility:&lt;br /&gt;&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;openssl version -d&lt;/blockquote&gt;to find OpenSSL's configuration directory. The default certificate file is called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;certs.pem&lt;/span&gt;, and the default certificate directory is called &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;certs&lt;/span&gt;, both within this configuration directory. However be careful: it's not unusual to have multiple copies of the OpenSSL library installed on a single system and different versions of the library may have different ideas of where the configuration directory is. You need to be running a copy of 'version' that's linked against the same copy of the OpenSSL library as the client you are trying to configure.&lt;br /&gt;&lt;br /&gt;The base OpenSSL distribution no longer puts anything in these locations. Debian (and so Ubuntu), and OpenSUSE/SLES 11 have a seperate package that install an extensive collection of roots. SLES10's OpenSSL package installs a small and idiosyncratic set, and OpenSSL under Mac OSX installs none at all. Worse, while the library knows about these default locations, applications have to make a concious decision to use them, and some don't -&amp;nbsp; for example, wget seem to do so but ldapsearch doesn't.&lt;br /&gt;&lt;br /&gt;OpenSSL applications generally have configuration options for selecting a certificate file and/or directory. Sometimes these are command line options (the OpenSSL utilities use -CAfile and -CApath; curl uses --cacert and --capath), sometimes they appear in configuration files (the OpenLDAP utilities look for TLS_CACERT and TLS_CACERTDIR in ldap.conf or ~/.ldaprc), and client libraries will have their own syntax (the Perl Net::LDAP module supports 'cafile' and 'capath' options in calls to both the Net::LDAPS-&amp;gt;new() and $ldap-&amp;gt;start_tls() methods).&lt;br /&gt;&lt;br /&gt;However the locations are established, you'll need an appropriate collection of root certificates - at least containing one for each CA that issued the certificates on the the servers you want to talk to. It's often easiest if these are in the default locations, but you can put them anywhere as long as you tell you clients where to find them. You should of course be a little careful about this - by installing root certificates you are choosing to trust the corresponding CAs with at least part of your system's security. One approach is only to install roots as and when you need them to contact particular servers, but beware that this may lead to unexpected problems in the future if a server gets a new certificate from a new CA that you don't yet trust. In practice the easiest and probably best approach may be to use either a distribution-supplied collection of roots or to extract the root certificates from something like the Mozilla certificate bundle (see for example the make-ca-bundle utility distributed with curl). [&lt;i&gt;Update 2011-02-01:&lt;/i&gt; see &lt;a href="http://jw35.blogspot.com/2011/02/root-certificates-for-macos-openssl.html"&gt;this new post&lt;/a&gt; for a better solution under MacOS]&lt;br /&gt;&lt;br /&gt;So, putting this together, you need to do the following to use OpenSSL properly:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure you have enabled, or at least haven't suppressed, certificate verification.&lt;/li&gt;&lt;li&gt;Get yourself an appropriate set of root certificates. If you add these to a certificate directory, remember to run c_rehash afterwards to recreate the hash symlinks.&lt;/li&gt;&lt;li&gt;If you install these certificates in one of OpenSSL's default locations and you application uses those locations then everything should work immediatly. Otherwise, add appropriate configuration to tell the application where to look.&lt;/li&gt;&lt;/ol&gt;You can test that OpenSSL itself is getting things right using the &lt;a href="http://www.openssl.org/docs/apps/s_client.html"&gt;s_client&lt;/a&gt; utility. Run something like&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;openssl s_client -connect &lt;i&gt;&amp;lt;host name&lt;/i&gt;&amp;gt;:&lt;i&gt;&amp;lt;port&amp;gt;&lt;/i&gt;&lt;port&gt; -CApath &lt;i&gt;&amp;lt;certificate directory&amp;gt; &lt;/i&gt;&lt;/port&gt;&lt;i&gt;&lt;port&gt;&lt;path&gt;&lt;/path&gt;&lt;/port&gt;&lt;/i&gt;&lt;/pre&gt;&lt;/blockquote&gt;Replacing &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;host name&amp;gt;&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;port&amp;gt;&lt;/span&gt;, and &lt;tt&gt;&lt;port&gt;&lt;/port&gt;&lt;/tt&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;certificate directory&amp;gt;&lt;/span&gt;&lt;i&gt;&lt;i&gt; &lt;/i&gt;&lt;/i&gt;appropriately (&lt;tt&gt;&lt;port&gt;&lt;/port&gt;&lt;/tt&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;port&amp;gt;&lt;/span&gt; needs to be 443 for a HTTPS server, 636 for LDAPS, etc.)&lt;span style="font-family: inherit;"&gt;. Or replace &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-CApath&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt; &lt;/i&gt;with &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-CAfile&lt;/span&gt; &lt;file&gt; to select a file containing root certificates. &lt;/file&gt;&lt;/span&gt;Thisactually establishes a connection to the server - you can terminate itby typing ctrl-c or similar.&lt;br /&gt;&lt;br /&gt;If you see "Verify return code: 0 (ok)" then everything worked and the server's certificate was successfully validated. If you see "Verify return code: 20 (unable to get local issuer certificate)" then OpenSSL was unable to verify the certificate, &lt;i&gt;either&lt;/i&gt; because it doesn't have access to the necessary root certificate &lt;i&gt;or&lt;/i&gt; because the server failed to include a necessary intermediate certificate. Yiou can check for the latter by adding the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-showcerts&lt;/span&gt; option to the command line - this will display all the certificates provided by the server and you should expect to see everything necessary to link the server certificate up to but not including one of the roots you've installed. If you see "Verify return code: 19 (self signed certificate in certificate chain)" then &lt;i&gt;either&lt;/i&gt; the servers is really trying to use a self-signed certificate (which a client is never going to be able to verify), &lt;i&gt;or&lt;/i&gt; OpenSSL hasn't got access to the necessary root but the server is trying to provide it itself (which it shouldn't do becasue it's pointless - a client can never trust a server to supply the root coresponding to the server's own certificate). Again, adding &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-showcerts &lt;/span&gt;will help you diagnose which. Once you've got OpenSSL itself to work, move on to your actual client and hopefully it will work too.&lt;br /&gt;&lt;br /&gt;Um, and that's about all, though there is one more wrinkle. Several applications that can use OpenSSL can also use GnuTLS and/or NSS instead. This can change many of the details above. In particular, GnuTLS only supports certificate files, not certificate directories but clients using it don't always report this. As a result you can waste (i.e. I have wasted) lots of time trying to work out why something like ldapsearch is continuing to reject server certificates despite being passed an entirely legitimate&amp;nbsp; directory of CA root certificates...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-5198600281084713640?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/5198600281084713640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/05/doing-certificate-verification-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5198600281084713640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5198600281084713640'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/05/doing-certificate-verification-in.html' title='Doing certificate verification in OpenSSL clients (properly)'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-898258748352153210</id><published>2010-04-30T11:20:00.000+01:00</published><updated>2010-04-30T11:20:34.336+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web technologies'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><title type='text'>Webapps and HTTP Error codes</title><content type='html'>Someone recently asked me&lt;br /&gt;&lt;blockquote&gt; HTTP servers can return HTTP error codes. Should an application (e.g. a grails application) send back HTTP errors/codes, or in case of error, send back an HTTP code 200, and then send back some form of application error code/message ?&lt;/blockquote&gt;IMHO you should use appropriate HTTP error codes where possible, it's just not always possible.&lt;br /&gt;&lt;br /&gt;For example, a request for a non-existent URL really should return 404, otherwise you will find search engines repeatedly indexing you human-readable error page. Likewise, our local directory returns a real 404 if you try to look at the details for someone who dosen't exist.&lt;br /&gt;&lt;br /&gt;I'd suggest that 'server exploded horribly' should also return 500, and that broken requests could be reported as 400, but beyond this there are few response codes that are really relevant to a web application (apart from 'functional' ones like the 300 series). By all means use anything else that makes sense, but check the standard carefully - many codes don't mean what they superficially appear to mean. How you should report an 'application' error that doesn't map on to an existing code is beyond me (200 with explanation, 400 with explination?). There are also 'errors' which are not really errors - like not finding any results in a search.&lt;br /&gt;&lt;br /&gt;Remember that it's perfectly possible to include an application error code or message in the text of a page returned with a non-200 HTTP status code. But you do have to accept that some browsers (thank you Microsoft, but also modern Firefoxes) may suppress your useful, hand-crafted message in favour of their own generic, unhelpful one. Sometimes making your error message long enough will encourage browsers to display it after all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-898258748352153210?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/898258748352153210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/04/webapps-and-http-error-codes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/898258748352153210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/898258748352153210'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/04/webapps-and-http-error-codes.html' title='Webapps and HTTP Error codes'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-5563325563004224971</id><published>2010-02-19T15:40:00.002Z</published><updated>2010-02-19T15:40:59.530Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='breadcrumbs'/><title type='text'>The problem with breadcrumb trails</title><content type='html'>You won't find me objecting to anything in this:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;a href="http://derivadow.com/2010/02/18/the-problem-with-breadcrumb-trails/"&gt;http://derivadow.com/2010/02/18/the-problem-with-breadcrumb-trails/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-5563325563004224971?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/5563325563004224971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/02/problem-with-breadcrumb-trails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5563325563004224971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5563325563004224971'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/02/problem-with-breadcrumb-trails.html' title='The problem with breadcrumb trails'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-1425956277818032237</id><published>2010-02-11T08:29:00.005Z</published><updated>2010-02-11T14:04:44.761Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='service monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='nagios'/><title type='text'>Getting nagged by Nagios</title><content type='html'>&lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; is an entirely usable service monitoring system - I'm aware of at least three implementations within the University Computing Service alone. There are some aspects of its design (or, I suspect, its evolution) that I don't particularly like, but all in all it's much, much better than nothing.&lt;br /&gt;&lt;br /&gt;An important feature is its powerful and capable configuration system. As usual this is a two edged sword because you have to understand the resulting complexity to take advantage of the power. I have two things to offer that might help: some general configuration guidelines, and a diagram.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Guidelines&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Keep the number and size of edits to the distribution-supplied config files to a minimum.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Arrange that related names and aliases share a common prefix (e.g. &lt;i&gt;foo&lt;/i&gt; in what follows) so that theysort together (host names, which are most usefully based on DNS names, can be an exception tothis)&lt;/li&gt;&lt;li&gt; Keep to a minimum the number of distinct names created (e.g. use &lt;i&gt;foo&lt;/i&gt; as both a contact and a contact group name and so don't create &lt;i&gt;foo-contactgroup&lt;/i&gt;)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Note that, unlike most other 'names', service_description isn't a global name and only needs to be unique within the set ofhosts that provide it. It doesn't need and shouldn't have a &lt;i&gt;foo&lt;/i&gt; prefix, and should be a short, human-readable, description of the service&lt;/li&gt;&lt;li&gt; Keep names (especially those commonly displayed in the web apps) as short as reasonably possible&lt;/li&gt;&lt;li&gt; Express group membership by listing group name in the individual objects, &lt;b&gt;NOT&lt;/b&gt; by listing the individual objects in the group definition (or if you want, the other way around but be consistent!)&lt;/li&gt;&lt;li&gt; Use inheritance wherever possible to avoid replicating common settings&lt;/li&gt;&lt;li&gt; Use a naming convention so that separate groups of people can create global names without clashing&lt;/li&gt;&lt;li&gt;Store information belonging to each group of people in a predictablelocation (e.g. always put host information in files or directoriesstarting "host") to make navigation easier&lt;/li&gt;&lt;li&gt; Optimise the web-based display&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;The UCS's Unix Support group has further developed these guidelines into a configuration standard that helps them monitor large numbers of services with minimal configuration work and with several different groups of people maintaining the configuration. Part of the key to this is putting the configuration for each separate group of services into separate sub-directories and incorporating this information into the main&lt;tt&gt; nagios.cfg&lt;/tt&gt; with 'cfg_dir'.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Object relationships&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nagios's &lt;a href="http://nagios.sourceforge.net/docs/2_0/xodtemplate.html"&gt;Template-Based Object Configuration&lt;/a&gt; is one of its most powerful features but it's difficult to get you head around it when starting out. Here's a diagram that might help - it shows most of the relationships between the various objects:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_diCVFt7FduE/S3O-Yxk4bcI/AAAAAAAAAHE/gGxqa8Q5wUs/s1600-h/nagios-objects.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://1.bp.blogspot.com/_diCVFt7FduE/S3O-Yxk4bcI/AAAAAAAAAHE/gGxqa8Q5wUs/s400/nagios-objects.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-1425956277818032237?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/1425956277818032237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/02/getting-nagged-by-nagios.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1425956277818032237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1425956277818032237'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/02/getting-nagged-by-nagios.html' title='Getting nagged by Nagios'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_diCVFt7FduE/S3O-Yxk4bcI/AAAAAAAAAHE/gGxqa8Q5wUs/s72-c/nagios-objects.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2155557759115624353</id><published>2010-02-10T20:00:00.000Z</published><updated>2010-02-10T20:00:13.426Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenID'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='Uam WebAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='FAM'/><title type='text'>Authentication: Think before you proxy</title><content type='html'>There are three obvious ways to add authentication such as Ucam Webauth or Shibboleth or OpenID to a web application:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add the authentication code to the application itself (what the Java world calls 'Application Managed Security')&lt;/li&gt;&lt;li&gt;Implement the authentication in the web server or container hosting the application (Java's 'Container Managed Security')&lt;/li&gt;&lt;li&gt;Implement the authentication in an HTTP proxy in front of the application&lt;/li&gt;&lt;/ul&gt;The proxy option has some obvious quick gains: a single proxy can protect multiple applications; it's normally easy to leverage existing 'container managed' implementations to build such proxies; using a proxy probably requires much less modifications of existing applications (sometimes none). But I'm going to argue that this approach, while appropriate and even necessary in some circumstances, should be avoided where possible. Here are some reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Security&lt;/b&gt;: to be useful, the proxy has to pass on information (such as user name at the very least) to its downstream client and obviously has to do this is a way that can't be influenced by an attacker. About the only option (if you are sticking to HTTP for communication between the proxy and its downstream client) is by adding extra HTTP request headers. It's not easy to be absolutely sure&amp;nbsp; that these headers can't somehow be injected by an attacker (by talking directly to the downstream client, by supplying them in a request and convincing the proxy to pass them on, etc., etc.).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Availability of attributes&lt;/b&gt;: Shib and other similar systems potentially make lots of information about the authenticating user available as attributes. Unless you arrange for your proxy to pass all of these on (and there could be lots and you might not know in advance what they all are) then your clients will loose out. There's also the problem that (in theory, if not in practise) that users are able to control what information about them is disclosed to which services. With multiple services behind a single proxy it's going to be a case of one size having to fit all.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Confused logs&lt;/b&gt;: clients behind proxies see all connections as coming from the proxy. This makes their logs less useful than they might be and frustrates any attempt to limit access by IP address (which is actually a bad thing anyway IMHO, but that's another story). There are ways around this, though most then suffer from the security problems mentioned above.&lt;/li&gt;&lt;li&gt;&lt;b&gt;One more system&lt;/b&gt;: the proxy is one more system to build, maintain and in particular to understand. I have a theory that authentication services in some big web applications are a bit 'hit and miss' (and 'electronic journals' are big offenders here) precisely because they are big, layered applications that almost no one (or perhaps actually no one in a few cases) really understands.&lt;/li&gt;&lt;/ul&gt;I think my underlying feeling would be that a proxy is an entirely appropriate, if not quite as simple as it first appears, way to implement authentication for some particulare application, but that care should be taken not to slip into using one in every case. Like they say, once you've got a hammer everything starts looking like a nail...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2155557759115624353?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2155557759115624353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/02/authentication-think-before-you-proxy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2155557759115624353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2155557759115624353'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/02/authentication-think-before-you-proxy.html' title='Authentication: Think before you proxy'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-7419174619305591444</id><published>2010-02-05T08:55:00.000Z</published><updated>2010-02-05T08:55:26.640Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='data feeds'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Identity Mgmt'/><title type='text'>Core data stores in a University context</title><content type='html'>I've just come across what I think is a really interesting post about core data stores in a University context:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://alexbilbie.blogs.lincoln.ac.uk/2010/02/04/core-dot-lincoln/"&gt;http://alexbilbie.blogs.lincoln.ac.uk/2010/02/04/core-dot-lincoln/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I haven't thought this through fully, but on first glance it seems to me that much of what's identified as needed at Lincoln would be directly relavent in Cambridge. The idea that University systems should be making interfaces to raw data available, for use by other University systems and potentially by others, has been bubbling around in the back of my mind for a while (and is something that I know is already happening in systems such as &lt;a href="http://www.cam.ac.uk/cs/arch/dspace.html"&gt;dSpace&lt;/a&gt; and the &lt;a href="http://sms.cam.ac.uk/"&gt;Streaming Media Service&lt;/a&gt;) and this post seems to be helping to crystalise some of those thoughts. Perhaps I'll come back to this topic in a later post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-7419174619305591444?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/7419174619305591444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/02/core-data-stores-in-university-context.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7419174619305591444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/7419174619305591444'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/02/core-data-stores-in-university-context.html' title='Core data stores in a University context'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-5236694688681799702</id><published>2010-01-19T12:01:00.001Z</published><updated>2010-02-11T14:16:00.063Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Atom'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><title type='text'>Promiscuous JavaScript considered dangerous</title><content type='html'>A trick commonly used to incorporate content from one web site into pages provided by another is for the provider site to make available a piece of JavaScript which inserts the required content into any page when loaded and executed. There are lots of examples - see for example &lt;a href="http://talks.cam.ac.uk/custom_view?list=5606"&gt;Talks.cam 'Custom views'&lt;/a&gt;, or the Met Office's &lt;a href="http://www.metoffice.gov.uk/public/pws/components/"&gt;Weather widgit&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This is realy neat, and has the huge advantage that it doesn't need any server-side support to impliment (typically RSS/Atom would need work on the server to collect and format the feeds) and can be deployed by just about anyone with editing access to the pages in question and the ability to cut and paste.&lt;br /&gt;&lt;br /&gt;But it comes at a huge price. JavaScript that you include in your pages (wherever it comes from) has largely unfettered access to those pages. So it can rewrite you content, read cookies (and so steal authentication sessions), post content back to your server, etc., etc. So consider, before doing so, that adding JavaScript to your pages that is controlled by someone else amounts to giving that 'someone else' editing rights to your page. Are you happy to do that?&lt;br /&gt;&lt;br /&gt;Of course reputable providers of this sort of JavaScript won't do anything like this deliberatly. But you do need to consider that they might do it accidently - it's particularly easy for them to mess up other JavaScript on you pages (for example the Met Office widgit above sets the JavaScript global variable moDays without any check if it's being used elsewhere). This trick is oftern used to provide feed information that may have been originally supplied to the provider site by even more third parties. There's the danger that the provider's cross site scripting protection may be incomplete, opening the posibility of unknown third parties being able to inject JavaScript into your pages, which is bad. And if you are relying on someone else's cross site scripting protection you need to know what character encoding they are doing it for and to be sure that you are setting a compatible one (this is discussed in a very helpful and to their credit very honest &lt;a href="http://talks.cam.ac.uk/document/warnings%20about%20the%20security%20of%20embedding%20feeds%20in%20your%20site"&gt;page supplied by Talks.cam&lt;/a&gt; that describes the risks of using their 'Promiscuous JavaScript' offering).&lt;br /&gt;&lt;br /&gt;Note that I'm &lt;i&gt;NOT&lt;/i&gt; saying that you shouldn't use this trick (as a supplier or as a provider). I am suggesting that you should be aware of the risks and make an apropriate assement of how they affect any particular deployment before proceding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-5236694688681799702?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/5236694688681799702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2010/01/promiscuous-javascript-considered.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5236694688681799702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/5236694688681799702'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2010/01/promiscuous-javascript-considered.html' title='Promiscuous JavaScript considered dangerous'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-3747180449705377362</id><published>2009-12-13T17:22:00.004Z</published><updated>2010-02-23T17:35:50.967Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Apache configuration file layouts</title><content type='html'>A traditional Apache configuration consists of one file (httpd.conf) that contains all the required configuration directives. However a single file is a problem for&amp;nbsp; packaging systems where different packages are responsible for different aspects of Apache's operation. For them it's much easier if they can contribute one or more files containing configuration fragments and if these are then incorporated into the Apache configuration using the 'Include' directive. While convenient for the packaging system, this is less convenient for the system administrator who now finds his Apache configuration spread across multiple files in several directories. Here are a two diagrams showing the configuration file layout in two common Linux distributions - Debian (and so Ubuntu), and SLES:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Debian&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_diCVFt7FduE/S4QRZc4Id4I/AAAAAAAAAHM/Vla4p82M6AU/s1600-h/debian-include-sequence.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_diCVFt7FduE/S4QRZc4Id4I/AAAAAAAAAHM/Vla4p82M6AU/s320/debian-include-sequence.png" /&gt;&lt;/a&gt;&lt;/div&gt;Note that the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mods-enabled&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;hosts-enabled &lt;/span&gt;directories contain symlinks to files actually stored in the parallel &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mods-available&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;hosts-available&lt;/span&gt; directories,&amp;nbsp; and that commands, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a2enmod&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a2dismod&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a2ensite&lt;/span&gt; and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;a2dissite&lt;/span&gt;, are provided to manipulate these symlinks. Within the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mods-{available,enabled}&lt;/span&gt; directories, the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;*.load&lt;/span&gt; files contain the Apache configuration directive to load the module in question; the coresponding &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;*.conf&lt;/span&gt; files contain configuration directives necessary for the module. &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;httpd.conf&lt;/span&gt; is included for backwards compatability and to support installing 3rd party modules directly via &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;apxs2&lt;/span&gt;. See the file &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/apache2/README&lt;/span&gt; for more details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;SLES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_diCVFt7FduE/SyUd_zyrZbI/AAAAAAAAAGA/OgBTwvT6qu0/s1600-h/sles-include-sequence.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_diCVFt7FduE/SyUd_zyrZbI/AAAAAAAAAGA/OgBTwvT6qu0/s640/sles-include-sequence.png" /&gt;&lt;/a&gt;&lt;/div&gt;The files shown in yellow boxes, all of which appear in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/apache2/sysconfig/&lt;/span&gt; directory, are regenerated automatically from information in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/etc/sysconfig/apache2/&lt;/span&gt; on Apache startup and so shouldn't be hand edited. See comments at the top of /etc/apache2/httpd.conf for more information.&lt;br /&gt;&lt;br /&gt;This diagram is for SLES10 and Apache 2; similar arrangements were used with SLES 9 and Apache 1.3, with '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;apache2&lt;/span&gt;' replaced by '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;httpd&lt;/span&gt;' in filenames. In SLES 9 it was necessary to run &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SuSEconfig&lt;/span&gt; to regenerate the files based on sysconfig information. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;2010-02-23: Debian diagram amended - the 'master' file was incorrectly labelled httpd.conf and should have been apache2.conf. Apart from anything else, you can't have httpd.conf including itself!&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-3747180449705377362?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/3747180449705377362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/12/apache-configuration-file-layouts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3747180449705377362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/3747180449705377362'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/12/apache-configuration-file-layouts.html' title='Apache configuration file layouts'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_diCVFt7FduE/S4QRZc4Id4I/AAAAAAAAAHM/Vla4p82M6AU/s72-c/debian-include-sequence.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-304044623138795314</id><published>2009-12-09T09:45:00.002Z</published><updated>2009-12-15T08:42:41.969Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><title type='text'>Paul Walk's 'Infrastructure service anti-pattern</title><content type='html'>Following on from &lt;a href="http://jw35.blogspot.com/2009/12/service-to-service-communication.html"&gt;Service-to-service communication&lt;/a&gt;, I've just seen a excelent blog posting in &lt;a href="http://blog.paulwalk.net/"&gt;paul walk's weblog&lt;/a&gt; entitled '&lt;a href="http://blog.paulwalk.net/2009/12/07/an-infrastructure-service-anti-pattern/" rel="bookmark" title="Permanent Link to An infrastructure service anti-pattern"&gt;An infrastructure service anti-pattern&lt;/a&gt;' which makes an excellent case for how machine APIs should be used. Well worth reading.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-304044623138795314?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/304044623138795314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/12/following-on-from-service-to-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/304044623138795314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/304044623138795314'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/12/following-on-from-service-to-service.html' title='Paul Walk&apos;s &apos;Infrastructure service anti-pattern'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-6718543586294814600</id><published>2009-12-07T08:36:00.001Z</published><updated>2009-12-07T08:41:21.350Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Raven'/><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='CRUD'/><category scheme='http://www.blogger.com/atom/ns#' term='Authz'/><category scheme='http://www.blogger.com/atom/ns#' term='Atom'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Service-to-service communication</title><content type='html'>The University of Cambridge's &lt;a href="http://www.cam.ac.uk/cs/raven/"&gt;Raven&lt;/a&gt; service workswell enough for interactive logins using a web browser, but doesn't(and was never intended to) support non-interactive authentication, orauthentication between one service and another, rather than between peopleand services. Here's a set of suggestions for filling thisgap and for supporting general service-to-service communication - I happen to like these today but I'm making no promises that Iwon't have changed my mind by tomorrow.&lt;br /&gt;&lt;br /&gt;For 'proxied' or non-interactive authentication on behalf on individuals I'd recommend &lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt;.This is essentially a standardised protocol for establishing a tokenthat grants one service limited, delegated access in a user's name toanother service. There's a good example of how it could work in the &lt;span style="font-size: small;"&gt;&lt;a href="http://hueniverse.com/2007/10/beginners-guide-to-oauth-part-ii-protocol-workflow/" rel="bookmark" title="Permanent Link to Beginner’s Guide to OAuth – Part II : Protocol Workflow"&gt;Beginner’s Guide to OAuth – Part II : Protocol Workflow.&lt;/a&gt;&lt;/span&gt; OAuth is gaining significant traction in social networking applications.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Forservice to service communication I'd recommend SSL/TLS using mutualauthentication by certificate. Since we are assuming thatauthentication is required we should also assume that confidentiality is necessary so the protection offered by SSL/TLS seems appropriate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Certificate trust could just beestablished bilaterally between pairs of services, but the complexityof this grows with the square of the number of services involved. Better would be to establish an in-house Public Key Infrastructure with a central in-house CertificationAuthority (CA) that could issue certificates for this purpose. Somedifficult policy decisions will be needed about who is allowed to applyfor certificates in the name of which services, but once made it should be possible to largely automate the CA by providing aRaven-authenticated web interface for certificate management. Note that these certificates would need to identify 'services',rather than just computers, so the parties to a conversation could for example be the'CS IP Register Database' and the 'Department of Important StudiesNetwork Management system'. We'd need to sort out a namingconvention. An important service provided by the CA would need to be the maintenance of a Certificate Revocation List.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Authorisation I'd leave to the services involved. Both OAuth and certificate authentication establish the 'identity' of a party in a conversation and it should be easy enough to use this identity within whatever authorisation system a service already uses. For example, &lt;a href="http://www.lookup.cam.ac.uk/"&gt;Lookup&lt;/a&gt; could be adapted to allow certificate DNs to appear alongside user identifiers as members of groups used for access control.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Finally we need to identify protocols by which services can communicate. I suggest something lightweight and vaguely '&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;'ish. Authorities differ on what exactly REST requires, but here I just mean a basic &lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD&lt;/a&gt; interface carried over HTTP and mapped onto HTTP primitives PUT, GET, POST, DELETE, etc. Data should probably be serialised using simple &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;, though other formats such as &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt; are a possibility. Existing XML schema can be used where appropriate, for example the&amp;nbsp; &lt;a href="http://www.blogger.com/goog_1260171459700"&gt;At&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://tools.ietf.org/html/rfc4287"&gt;om Syndication Format&lt;/a&gt; can be used to represent lists (particularly search results), and the &lt;a href="http://tools.ietf.org/html/rfc5023"&gt;Atom Publishing Protocol&lt;/a&gt; is probably worth considering to support the creation and modification of resources (see Wikipedia for &lt;a href="http://en.wikipedia.org/wiki/Atom_%28standard%29"&gt;an introduction to Atom&lt;/a&gt;).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;The advantage of this approach is that it provides a lightweight and technology neutral interface using tools (HTTP servers and clients) that are widely available and reasonably well understood. It even allows an amount of&amp;nbsp; experimentation using nothing but a web browser. It also opens the possibility of in-browser manipulation of data, especially if results are available in JSON. Against this there's the need for an API design for each new service and the requirement for programming work at both the client and server ends. One way&amp;nbsp; of supporting this is to distribute at least one example client library with each new API. An important selling point for this approach is the fact that it underpins almost all of the current 'cloud' offerings - see the &lt;a href="http://code.google.com/apis/gdata/"&gt;Google Data Protocol&lt;/a&gt;, &lt;a href="http://code.google.com/apis/gdata/"&gt;Amazon Web Services&lt;/a&gt;, &lt;/span&gt;&lt;a href="http://developer.yahoo.com/social/rest_api_guide/index.html"&gt;Yahoo Social API&lt;/a&gt;, etc.&lt;br /&gt;&lt;br /&gt;There &lt;i&gt;are&lt;/i&gt; other posibilities for filling the various slots mentioned above - obvious ones being &lt;a href="http://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH&lt;/a&gt; to provide confidentiality and strong mutual authentication, and &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt; to provide interservice communication. I happen to think (today, as mentioned above) that the set I've listed here would currently provide the best solution. Why might be the subject of subsequent posts.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-6718543586294814600?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/6718543586294814600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/12/service-to-service-communication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6718543586294814600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6718543586294814600'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/12/service-to-service-communication.html' title='Service-to-service communication'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-722785926005362158</id><published>2009-11-14T17:13:00.004Z</published><updated>2009-11-16T09:38:05.561Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Raven'/><category scheme='http://www.blogger.com/atom/ns#' term='Passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='Uam WebAuth'/><title type='text'>Re-using Raven's password database</title><content type='html'>&lt;i&gt;[This posting was originally published on an internal wiki in early 2009and is republished here to increase its exposure. Whatis says remains relevant today]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The University's &lt;a href="http://www.cam.ac.uk/cs/raven/"&gt;Raven authentication system&lt;/a&gt; currently provides a usable authentication system for interactive, web-based applications but doesn't support non-interactive web-based applications, nor non-web ones. This excludes many potential uses: Windows/MacOS/Unix logon, IMAP, POP, SMTP, LDAP, WebDAV (and so CalDAV), etc., etc. Since Raven of necessity has a database containing username/password pairs for most people in the University, and most people know their Raven password, it is tempting to assume that extending it to support these other uses would be easy. &lt;br /&gt;&lt;br /&gt;This post explores ways in which authentication based on 'Raven passwords' could be extended and tries to point out some of the advantages and drawbacks of each proposal. In reading this, you need to consider the security properties you might actually want from such a system (hint: it's not important that legitimate users have to provide their password before gaining access to something, what is important is that people can't realistically gain access using an identity that is not their own - these are &lt;i&gt;not&lt;/i&gt; the same thing!). It is also important to consider who might be attempting to attack what, and how much we care about it: are we talking about a) a bored University student, b) a tabloid journalist, c) an organised criminal, or d) the American NSA, and are they trying to gain access to a) their mate's photo archive, b) the next heir to the throne's email account, c) the University financial system?&lt;br /&gt;&lt;br /&gt;This paper only considers ways in which the existing, single Raven password might be usefully reused and ignores possibilities such as as using multiple passwords, one-time password lists, cryptographic smartcards and tokens, fingerprint readers, multi-tier authentication, etc. It also ignores two very real problems with 'static' passwords: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;It is effectively impossible to prevent people giving their password away, and they do!&lt;/li&gt;&lt;li&gt;Users have to type their password into something - typically the workstation that they are sitting in front of. Depending on the workstation, it is entirely possible that it has been compromised, for example with a virus that installs a key logger or by a malicious or inept system administrator.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Option the first: forget passwords&lt;/span&gt;&lt;br /&gt;Stepping back a bit, we could forget passwords and just ask people what their user-id is. This would even simplify Raven itself:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_diCVFt7FduE/Sv7hXfv4PHI/AAAAAAAAAFg/T6zHgV7m8M8/s1600-h/Simple-raven-login.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_diCVFt7FduE/Sv7hXfv4PHI/AAAAAAAAAFg/T6zHgV7m8M8/s320/Simple-raven-login.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;This would save people from having a password that they needed to remember, and would save the Computing Service from having to issue them.&amp;nbsp; Both of these would be significant advantages. Anyone could easily set up almost any system 'protected' in this way - the hard part might actually be ''stopping'' it from asking for a password.&lt;br /&gt;&lt;br /&gt;The obvious downside is that we'd have to trust everyone who can get to a login prompt not to lie (and for many networked services this means everyone in the entire world), and so this is rather unrealistic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Option the second: use a single fixed password&lt;/span&gt;&lt;br /&gt;Rather than forgetting passwords completely, we could could use a single, fixed, 'well known' password to protect all accounts. This would be easy to remember (and easy to recover if you forgot it). It would also be fairly easy to set up a system protected in this way. &lt;br /&gt;&lt;br /&gt;Now we only have to trust all the people who ever knew the password not to lie. It&amp;nbsp; is fair to assume that a 'secret' legitimately known by 55,000 (and rising) people (those who have ever had a Raven account) would not stay a secret for long so we'd still be trusting quite a lot of people not to lie, if not the whole world. It would also be next to impossible ever to change this password. Again, this is probably not a realistic option (though this doesn't actually stop people using it, though usually on a small scale - think of the codes used to arm and disarm intruder alarm systems).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Option the third: distribute a list of user name/plaintext password pairs&lt;/span&gt;&lt;br /&gt;We could (in theory, though not currently in practice) extract a list of user names and corresponding plain text passwords from Raven, one for each user, and then distribute this list to every system that needs to authenticate users. &lt;br /&gt;&lt;br /&gt;Users could then quote their user name and password, the system could look up the the user name and compare the offered password with the one on the list - if it matches they would get in, if not they wouldn't. Implementing authentication in this way would be fairly easy, and system administrators could post-process the list into whatever form their system actually needed.&lt;br /&gt;&lt;br /&gt;This would avoid having to trust users not to lie - the vast majority of users would only be able to successfully authenticate as themselves.&lt;br /&gt;&lt;br /&gt;The list itself, however, would now be a major problem. &lt;i&gt;&lt;b&gt;Anyone&lt;/b&gt;&lt;/i&gt; with access to it could authenticate as &lt;i&gt;&lt;b&gt;any user&lt;/b&gt;&lt;/i&gt; on &lt;i&gt;&lt;b&gt;any system&lt;/b&gt;&lt;/i&gt; relying on this authentication service. Worse, since many people use the same password in multiple places, anyone with access to the list could probably also forge authentication on entirely unrelated systems.&lt;br /&gt;&lt;br /&gt;All of the managers of all of the systems using the authentication service would inherently have access to the list, so we would have to trust them. Even if we assume that none of these administrators would ever be actively malicious, there would still the danger that they might accidentally or recklessly leak the list (from a hacked server, on a memory stick, on a laptop left on a train, etc.). So the security of each system under this model would still depend on a whole group of people that each system's administrator has no particular reason to trust. In practice the only option would be to severely restrict the systems that could participate, to the point where such a service could never provide 'universal' authentication for the University.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Option the fourth: distribute a list of user name/'crypted' password pairs&lt;/span&gt;&lt;br /&gt;Rather than distributing plaintext passwords, we could distribute them 'non-reversibly encrypted' (or 'hashed') - for example using the 'crypt' or 'md5' password format used in Unix password files. In principle this would make it possible to check that a proffered password is correct (by hashing it and checking that the hashed versions match), without exposing all the passwords on the list.&lt;br /&gt;&lt;br /&gt;Unfortunately, hashed passwords can be recovered by a 'dictionary attack', in which an attacker generates a dictionary of words and their hashed equivalents and then searches the hashed passwords for matches. Since users have a bad habit of choosing common words (or trivial variations of them) as passwords, such an attack can be expected to recover a reasonable proportion of passwords. So even with hashed passwords the list would be vulnerable to compromise and would still have to be treated as confidential. &lt;br /&gt;&lt;br /&gt;In addition, everyone logging-in would still have to offer their plaintext password for verification, at which point it would still be vulnerable given a malicious or negligent system administrator. Consider two systems 'A' and 'B', both using such a system and with some users in common. What grounds can system 'A's administrators have for believing that system 'B's administrators will not (accidentally or deliberately) capture, and disclose or use, user name/password pairs that would allow forged logins on system 'A'. What if system 'A' were on the Student Run Computer System web site and system 'B' was the University Financial System, or vice-versa?&amp;nbsp; &lt;br /&gt;&lt;br /&gt;There is unfortunately a more insidious problem. If asked for their 'central authentication system password', how could a user know that it is safe to quote it? Passwords are only safe if you don't disclose them, but to use them that is exactly what you have to do. If you disclose them to a malicious system then you've lost. This is the basis of 'phishing' attacks aimed (with some success) at getting people to disclose the electronic banking or mail system passwords. Given all of the following, which are the bogus sites that is just trying to capture your password?&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_diCVFt7FduE/Sv7jQKhsgaI/AAAAAAAAAFo/o7u1-sQEnPc/s1600-h/Login-box-montage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_diCVFt7FduE/Sv7jQKhsgaI/AAAAAAAAAFo/o7u1-sQEnPc/s400/Login-box-montage.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;There is no obvious solution to any of this.&lt;br /&gt;&lt;br /&gt;It's worth noting in addition that many authentication schemes (particularly those using some sort of challenge-response) need access to plaintext passwords, or at least particular hashes of the passwords, and so can't be supported by any scheme that distributes pre-hashed passwords.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Option the fifth: central password verification&lt;/span&gt;&lt;br /&gt;Even if a list could be made to work,&amp;nbsp; distributing it would be difficult especially if it needs to be done in a timely manner. One solution would be to have a 'central password verification service'. In this model, a system using the authentication service solicits a user name and password for a user and forwards them to the central service which returns a match/no match response. Almost any network protocol could be used for this, but it is common to use LDAP and overload LDAP's 'user login' process to provide authentication. Alternatives include POP, IMAP, RADIUS, and home-grown protocols. &lt;br /&gt;&lt;br /&gt;This approach successfully avoids exposing the list of everyone's plaintext or hashed passwords to system administrators (and potentially others) which significantly reduces the exposure. It unfortunately still requires that users's plaintext passwords be disclosed as they authenticate, and does nothing to help users decide when they should and should not quote their password.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Protocols used for remote password verification need to be configured so that they don't expose plaintext passwords on the network, and so the authentication server can't be impersonated and used to collect passwords. Doing this correctly makes things considerably more complicated and is something which is often omitted.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Option the sixth: Kerberos (or similar)&lt;/span&gt;&lt;br /&gt;Kerberos was designed precisely to overcome many of these problems. It allows a central verification service to assert that a user knows a password, and so has authenticated themselves, without the user having to disclose their password to anything other than their local workstation. It uses assorted cryptographic sleights of hand to do this and has numerous other important properties, such as preventing the recipient of an assertion from using that to impersonate the user on any other service.&lt;br /&gt;&lt;br /&gt;In principle Raven could be extended to become a Kerberos central verification service (a 'KDC'). But using Kerberos comes at a cost. Firstly the user's local workstation needs Kerberos software installed and configured. Secondly the Kerberos protocol is significantly more complicated than a user name/password exchange, so unless the systems to be protected already supports it then there are likely to be difficulties.&lt;br /&gt;&lt;br /&gt;One interesting development is that Microsoft have adopted Kerberos (or at least, a version of Kerberos) for authentication under Windows. For example every Windows Active Directory Domain is also a KDC. By establishing appropriate trust relationships between Windows KDCs throughout the University it might be possible to use a Raven password to authenticate to an Active Directory Domain and then to rely on Kerberos for further onward authentication as and when required. Similar Kerberos-based login arrangements are available for MacOS and Linux. It is possible that in this environment a malicious or inept AD administrator could compromise authentication - further research is required to establish if it is practical. &lt;br /&gt;&lt;br /&gt;Kerberos reduces the number of times that passwords need to be entered and so reduces, but does not eliminate, the problem of educating users about when the should and should not provide their passwords when asked. Note that some software, for example this &lt;a href="http://modauthkerb.sourceforge.net/%20"&gt;'Kerberos' module for Apache&lt;/a&gt;, will misuse the initial Kerberos user authentication process by soliciting the user's user name and plaintext password and then seeing if it can authenticate as the user. In this they are just using the Kerberos system as a central password verification service with all the problems that this entails described earlier. Again, it's not obvious how to enable users to safely detect this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Where does Raven currently fit into this?&lt;/span&gt;&lt;br /&gt;The current Ucam WebAuth system used by Raven, and a whole range of similar web-redirect-based systems, depends on the client software in use being a web browsers and on browsers including as standard a fortuitous combination of features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for HTTP redirects, allowing the client to be instructed to contact the authentication server direct, allowing communication that bypasses the server initiating authentication;&lt;/li&gt;&lt;li&gt;Support for the https: protocol, providing both security for the user's password on the wire and a way for users to positively confirm that they are communicating with the real authentication server and not an imposter (and so that it ''is'' safe to disclose their password); and&lt;/li&gt;&lt;li&gt;Provision of a user interface which can solicit a user and and password.&lt;/li&gt;&lt;/ul&gt;Ucam WebAuth has some features in common with Kerberos, but without the need to distribute or configure client software, though its use does require much more investment at the server end than a simple user name/password system. It does, crucially, only require the user to disclose their password to the central authentication server and provides a way for users to easily identify it. As a result it, just, manages to provide a reasonably reliable authentication system using passwords, but of course only in a web environment.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-722785926005362158?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/722785926005362158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/11/re-using-ravens-password-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/722785926005362158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/722785926005362158'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/11/re-using-ravens-password-database.html' title='Re-using Raven&apos;s password database'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_diCVFt7FduE/Sv7hXfv4PHI/AAAAAAAAAFg/T6zHgV7m8M8/s72-c/Simple-raven-login.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2723250908836262539</id><published>2009-11-13T11:59:00.003Z</published><updated>2009-11-14T17:21:19.729Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Secure use of passwords</title><content type='html'>&lt;i&gt;[This posting was originally published on an internal wiki in 2006 and is republished here to increase its exposure. I believe that what is says remains entirely relevant]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Passwords are about the best tool we have for identifying people on-line. There are alternatives, but they have financial and organisational costs that don't scale to the 30,000 people at the University of Cambridge. Unfortunately passwords are actually a very poor tool for this purpose and there are a number of prerequisites that must be met if they are to work at all. Three related ones interest me in particular - one that many people understand, two that they don't.&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Prerequisite 1&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;b&gt;Passwords must not travel in clear over insecure networks.&lt;/b&gt; Many networks are relatively easy to snoop. Most wireless networks are trivial to snoop and doing so doesn't even need physical access. Anyone who manages to capture a userid and password by snooping can impersonate the user for as long as the userid/password pair remains valid, and may be able to leverage this to gain further privilege. Most people understand this.&lt;br /&gt;&lt;br /&gt;&lt;/dd&gt;&lt;dt&gt;&lt;b&gt;Prerequisite 2&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;b&gt;Passwords must not be divulged in clear to untrusted systems.&lt;/b&gt; It's no good having a secure central password validation service if third-party systems collect userids and passwords and pass them on to the central service. Any one of these systems could maliciously capture userids and passwords, or accidentally or recklessly expose them. Even if access to the central validation system is itself secure, a common failing of such third-parties is for them to cause or encourage passwords to be sent in clear on insecure networks.&lt;br /&gt;&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;Of course it's tempting to say "My system's secure so it's safe for me to do this". The problem is that, given &lt;i&gt;n&lt;/i&gt; such systems it's necessary for each to trust the other &lt;i&gt;n - 1&lt;/i&gt;. Clearly this doesn't scale much beyond &lt;i&gt;n = 1&lt;/i&gt;. &lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;These two can actually be combined: &lt;b&gt;Passwords must not travel in clear over insecure networks or through any system that anyone doesn't trust&lt;/b&gt;.&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Prerequisite 3&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;b&gt;It must be possible for password holders to decide when it is safe to divulge their password&lt;/b&gt;. They need to divulge their password to authenticate, but divulging it also makes it possible for others to impersonate them.&lt;br /&gt;&lt;br /&gt;&lt;/dd&gt;&lt;dd&gt;A system that only ever requires a password to be entered on one particular secure form on one particular web site goes some way towards meeting this requirement. Even if many people don't understand the issues it is likely that at least some will, and will identify and report other occasions on which they are asked for this password. Such other requests are likely to be dangerous or malicious. As the number of occasions on which a particular password is legitimatly requested rises, so does the difficulty of explaining and understanding what these occasions are. Beyond a small number, most people will reflexively enter their password whenever they are asked for it. This will result in an increase in likelihood of malicious or accident password interception and so a decrease in the reliability of the authentication system.&lt;br /&gt;&lt;/dd&gt;&lt;/dl&gt;Remember, when considering password-based authentication systems, that the important thing isn't that legitimate users get challenged for a password before gaining access, even though this is the behaviour commonly checked by management. The important thing is that people can not realistically gain access using an identity that is not their own, and &lt;i&gt;this isn't the same thing!&lt;/i&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2723250908836262539?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2723250908836262539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/11/secure-use-of-passwords.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2723250908836262539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2723250908836262539'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/11/secure-use-of-passwords.html' title='Secure use of passwords'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-1528782803317797254</id><published>2009-11-09T10:01:00.000Z</published><updated>2009-11-09T10:01:06.924Z</updated><title type='text'>Bigfoot.com terminally broken?</title><content type='html'>The bigfoot.com email forwarding service seems to be terminally broken this morning, with all its registered mail hosts returning 'Not route to host' when accessed on port 25. Brief Googling suggests this has been going on for a while, and I've just had a message bounced that was originally sent last Wednesday which seems to confirm this. &lt;br /&gt;&lt;br /&gt;While I have always used the basic service, and so haven't actually paid anything for it,  this level of 'service' is unusable and suggests that Bigfoot don't care about mail forwarding any more. Time I think for my own domain name and the end of a long, and largely happy, relationship with Bigfoot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-1528782803317797254?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/1528782803317797254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/11/bigfootcom-terminally-broken.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1528782803317797254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/1528782803317797254'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/11/bigfootcom-terminally-broken.html' title='Bigfoot.com terminally broken?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-2508868517752388766</id><published>2009-11-04T11:17:00.008Z</published><updated>2009-11-05T14:39:10.128Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>How come Google got it wrong?</title><content type='html'>We've noticed that various 'Points of Interest' on &lt;a href="http://maps.google.co.uk/?ie=UTF8&amp;amp;ll=52.204655,0.120807&amp;amp;spn=0.005346,0.010804&amp;amp;z=17"&gt;Google maps in Cambridge city centre&lt;/a&gt; are just plain wrong. For example Christ's College appears at the junction of St Andrew's Street and Downing Street when it's actually &lt;a href="http://www.cam.ac.uk/map/v4/drawmap.cgi?mp=main;xx=1982;yy=765;mt=c;ms=150;tl=Christ%27s%20College"&gt;several hundred meters north&lt;/a&gt;  on the east side of Hobson's Street. &lt;a href="http://www.cam.ac.uk/map/v4/drawmap.cgi?mp=main;xx=1982;yy=765;mt=c;ms=150;tl=Christ%27s%20College"&gt;Emmanuel College&lt;/a&gt; and the &lt;a href="http://www.cam.ac.uk/map/v4/drawmap.cgi?mp=down;xx=50;yy=122;mt=c;tl=Archaeology%20and%20Anthropology%20Museum"&gt;Museum of Archaeology and Anthropology&lt;/a&gt; are also in the wrong place, though not so drastically. There are others.&lt;br /&gt;&lt;br /&gt;I think Google have Christ's College in the wrong place because they think its post code is CB2 3AR when it should be CB2 3BU (even that's still not ideal for something as big as a college since it identifies the delivery entrance rather than anything suitable for visitors, but it's better than nothing).&lt;br /&gt;&lt;br /&gt;For Christ's this seems to be a common error (try &lt;a href="http://www.google.co.uk/search?q=Christ%27s++College+CB2+3AR&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;meta=cr%3DcountryUK%7CcountryGB"&gt;Googling for "Christ's College CB2 3AR"&lt;/a&gt; to see the extent of the propagation of this error) but I suspect the fact that &lt;a href="http://www.yell.com/b/Christ%27s+College-Universities-Cambridge-CB23AR-4684056/index.html"&gt;yell.com have got it wrong&lt;/a&gt; may be at the root of the problem. It &lt;i&gt;might&lt;/i&gt; be possible to get this fixed, though it's going to take a very long time for the fix to propagate.&lt;br /&gt;&lt;br /&gt;Emmanuel has a similar problem - Google has their post code as just 'CB2' so they have been put where '&lt;a href="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=St.+Andrews+Street+CB2&amp;amp;sll=52.204681,0.121622&amp;amp;sspn=0.0053,0.008336&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=St.+Andrews+Street,+Cambridge+CB2,+United+Kingdom&amp;amp;z=16"&gt;St. Andrews Street CB2&lt;/a&gt;' resolves to. It's harder to track down where this error originates, and I haven't tried.&lt;br /&gt;&lt;br /&gt;The Museum of Arch and Anth is more interesting. Google have their correct address of "Downing St, Cambridge, Cambridgeshire, CB2 3DZ", and "&lt;a href="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=CB2+3DZ&amp;amp;sll=52.202991,0.123718&amp;amp;sspn=0.010599,0.016673&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Cambridge+CB2+3DZ,+United+Kingdom&amp;amp;ll=52.202873,0.121536&amp;amp;spn=0.010599,0.016673&amp;amp;z=16"&gt;CB2 3DZ&lt;/a&gt;" resolves to their correct location. However "&lt;a href="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Downing+Street,+CB2+3DZ&amp;amp;sll=52.204681,0.121611&amp;amp;sspn=0.0053,0.012424&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Downing+St,+Cambridge+CB2,+United+Kingdom&amp;amp;ll=52.203412,0.125763&amp;amp;spn=0.010599,0.016673&amp;amp;z=16"&gt;Downing Street, CB2 3DZ&lt;/a&gt;" resolves to the incorrect location shown on the map so there is something odd about the way the Google geolocation service handles this particular address (perhaps it doesn't always find "CB2 3DZ" in its database and so falls back to "&lt;a href="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Downing+Street,+CB2&amp;amp;sll=52.203412,0.125763&amp;amp;sspn=0.010599,0.016673&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Downing+St,+Cambridge+CB2,+United+Kingdom&amp;amp;ll=52.203412,0.121665&amp;amp;spn=0.010599,0.016673&amp;amp;z=16"&gt;Downing Street, CB2&lt;/a&gt;"?).&lt;br /&gt;&lt;br /&gt;These errors are not surprising, because Google isn't a traditional map company. They don't go out and survey anything but just purchase, collect and aggregate data from various sources (TeleAtlas for the streets, their own search index for address information, etc, etc.). Some of this information is wrong, which isn't surprising - what's really surprising is that the results are as good as they are. But it does cause us a very real problem, because some people feel that we can't use anything based on Google maps for as long as it shows well known University locations in the wrong place.&lt;br /&gt;&lt;br /&gt;Addition 2009-11-05: A colleague has pointed out that &lt;a href="http://maps.google.co.uk/?ie=UTF8&amp;ll=52.207843,0.171275&amp;spn=0.034872,0.055404&amp;z=15"&gt;part of the airport at Cambridge &lt;/a&gt; is labelled "London Luton Airport".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-2508868517752388766?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jw35.blogspot.com/2009/11/google-are-wrong.html' title='How come Google got it wrong?'/><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/2508868517752388766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/11/google-are-wrong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2508868517752388766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/2508868517752388766'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/11/google-are-wrong.html' title='How come Google got it wrong?'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-6200210081079241628</id><published>2009-10-06T09:54:00.008+01:00</published><updated>2009-10-06T17:10:02.380+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Apache SSL/TLS security configuration</title><content type='html'>Recent installation of a new vulnerability scanner at the University has hilighted that a default-configured Apache supports SSL v2 which reportedly suffers from several cryptographic flaws and has been deprecated for several years, and supports the use of SSL ciphers that are very week by today's standards.&lt;br /&gt;&lt;br /&gt;The danger of dropping support for particular protocols and ciphers is that doing so denies access to any clients that don't support anything else.  Ideally you should review your Apache configuration in the light of your security needs and the capabilities of your clients, which obviously only you will know. Failing that, I've reviewed a sample of the logs the the University's Raven server to see what its clients are actually using. This should represent  general University client capabilities. Only 17 out of over 3,500,000 connections used SSLv2, all of which looked to be from robots or similar; only 68 of these 3,500,000 connections used ciphers with symmetric key lengths of 56 bits or below.&lt;br /&gt;&lt;br /&gt;My conclusion is that, for general use, adding the following to your Apache configuration will provide a reasonable level of security while excluding few if any legitimate vistors:&lt;br /&gt;&lt;pre&gt;SSLProtocol All -SSLv2&lt;br /&gt;SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP&lt;/pre&gt;When compared to the Apache default this a) drops SSLv2 while leaving everything else (including future developments); and b) drops the export-crippled ciphers, those using 64 or 56 bit encryption algorithms, and the SSLv2-only ones (since we've dropped SSLv2). Exactly what this will leave you depends on the version of OpenSSL you are using, but you can find out from the openssl command-line utility:&lt;br /&gt;&lt;pre&gt;openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXP'&lt;/pre&gt;On my Ubuntu 8.04 box this leaves&lt;br /&gt;&lt;pre&gt;DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1&lt;br /&gt;DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1&lt;br /&gt;AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1&lt;br /&gt;DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1&lt;br /&gt;DHE-DSS-AES128-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA1&lt;br /&gt;AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1&lt;br /&gt;EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1&lt;br /&gt;EDH-DSS-DES-CBC3-SHA    SSLv3 Kx=DH       Au=DSS  Enc=3DES(168) Mac=SHA1&lt;br /&gt;DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1&lt;br /&gt;RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1&lt;br /&gt;RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 &lt;/pre&gt;According to &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf"&gt;NIST Special Publication 800-57&lt;/a&gt;, symmetric keys of at least 112 bits should be generally OK until 2030. Note however that this only applies when used in conjunction with certificates containing asymmetric keys of at least 2040 bits, so it would also be advisable to upgrade any certificates using smaller keys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-6200210081079241628?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/6200210081079241628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/10/apache-ssltls-security-configuration.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6200210081079241628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/6200210081079241628'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/10/apache-ssltls-security-configuration.html' title='Apache SSL/TLS security configuration'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-666139405016810922</id><published>2009-09-23T18:07:00.004+01:00</published><updated>2009-12-15T08:42:00.543Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Plone'/><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Shibbolising Plone 3 - some experiences</title><content type='html'>In &lt;a href="http://jw35.blogspot.com/2009/09/shibbolising-plone-3-review.html"&gt;a previous posting&lt;/a&gt; I listed two (and a half) options for Shibbolising Plone 3. What follows is a comparison based on what I found when I actually tried installing them into default Plone instances.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[The 'and a half' option was  &lt;a href="http://plone.org/products/liberty-authentication-plugin-for-pas"&gt;Liberty Alliance / SAML 2 Authentication Plugin for PAS&lt;/a&gt;. I'm discounting it for the time being because a) it doesn't look as if it will work with Shib 3, b) there hasn't been a release since December 2008, and c) the most recent release gives '404 Not found' on the Plone web site]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The two remaining options were &lt;a href="http://plone.org/products/webserverauth"&gt;WebServerAuth&lt;/a&gt; and a set of products from &lt;a href="http://www.ithaka.org/"&gt;Ithaka&lt;/a&gt; (&lt;a href="http://tid.ithaka.org/software/autousermakerpasplugin/"&gt;AutoUserMakerPASPlugin&lt;/a&gt;, &lt;a href="http://tid.ithaka.org/software/shibbolethlogin/"&gt;ShibbolethLogin&lt;/a&gt;, &lt;a href="http://tid.ithaka.org/software/shibbolethpermissions/"&gt;ShibbolethPermissions&lt;/a&gt;). They have quite a lot in common (which is not surprising since they share a common ancestor).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Common features&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Both depend on the Apache Shibboleth module to perform authentication, and so require connections to Plone to be proxied through Apache.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For this to work, server variables provided by the Shib module have to be converted to headers in the proxied request - doing so is a matter of Apache configuration. It is important to ensure that unauthenticated users can't spoof any such headers used for anything related to security.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Both will allow Plone access by anyone who can successfully authenticate  - if this isn't appropriate then Apache access controls could be used to limit this further (and WebServerAuth has an additional option).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Both require a unique user identifier. Easiest to use the value in REMOTE_USER which is set by default by the Shib module to the first non-blank value in eduPersonPrincipleName or the SAML 2 or SAML1 versions of eduPersonTargetedID. This leads to some unwieldy userIDs - both products can strip domain names from IDs, but this removes any guarantee of uniqueness.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Both force authentication for an https: version of the site while allowing unauthenticated access to the http: version. While Shib's 'Lazy Session' features might make this unnecessary, both products will in principle work with other webserver-based authentication schemes that may not support anything similar.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For both, it's advisable to suppress the default 'login' portlet that is displayed to unauthenticated users.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;WebServerAuth features&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WebServerAuth doesn't create users in the database - by default they just get assigned the 'Authenticated' role (not 'Member') when they log in. It uses userID (so eduPersonPrincipleName or eduPersonTargetedID, optionally with domains stripped) as the user's Full Name - it doesn't use any other Shib attributes even if they are available.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Users requiring additional rights can be created in the Plone database and appropriate rights will be assigned when the corresponding users authenticate. Creating Plone users with IDs containing '@' and '.' requires a long-winded hack.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;WebServerAuth can be configured only to authenticate users who have corresponding Plone accounts, but the user interface is sub-optimal: people will log in and apparently succeed, only to be greeted with a Plone page that still has a "Log In" link.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;By default, WebServerAuth redirects to the https: version of the current page when authentication is required (and modifies the standard 'log in' link to achieve this). This will cause the Apache module's default Sessioninitiator to be used for authentication. Optionally WebServerAuth can redirect to a customised URL which could &lt;i&gt;perhaps&lt;/i&gt; be used to implement a local WAYF service (e.g. simplified login for local users; redirect to federation WAYF for others). Essentially WebServerAuth takes over all login access to the site (which can be problematic if it fails...).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;WebServerAuth is under current development - its author contacted me within hours of my posting my earlier article to point out an error with it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Need to set the standard logout link (ZMI --&amp;gt; Plone --&amp;gt; postal_actions --&amp;gt; user --&amp;gt; logout --&amp;gt; URL) to something apropriate (or perhaps suppress the link altogether?)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Ithica product features&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AutoUserMakerPASPlugin creates real Plone users as new people authenticate. It can use configurable Shib attributes to initialise full name, email, location, roles and group membership. This only applies to user creation - once created, changes to attributes are not propagated and the users need to be managed on Plone. It seems necessary to configure full name to fall back to userID if nothing else is available to avoid all such users ending up with a full name of  '(null)'.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;AutoUserMakerPASPlugin can be configured to strip either all or selected domains from userIDs - one approach might  be to strip just a local domain, giving local users short userIDs while ensuring against name clashes with anyone else.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;AutoUserMakerPASPlugin supports a configurable 'logout' URL that can invoke the local Shib module logout function. This may be confusing in a wider single sign-on context (but is handy for testing).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ShibbolethPermisisons adds the ability to add local (per page or per container) access rights based on configurable Shib attributes. Again, this only applies at account creation time, after which rights have to be managed manually within Plone as usual.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ShibbolethLogin installs a replacement for the standard login page. This includes configurable links either to local SessionInitiator URLs or direct to Shib 1 IdPs or WAYFs. So for example it's possible to have a 'Log in with a Raven (University of Cambridge) user id' link for local users and a more general 'Log in with a different UK Federation user id' link for everyone else. Local Plone user authentication (with username/password) remains available. ShibbolethLogin appears to be targeted at Shib 1 functionality, with no obvious support for new Shib 2 functionality, such as the Discovery Service.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The maintenance status to the Ithica products is unclear. Documentation reports the most recent tests to have been with "Zope 2.10.5 and Plone 3.0.6"; files in the distribution appear to have been modified most recently in May 2008.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-666139405016810922?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/666139405016810922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/09/shibbolising-plone-3-some-experiences.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/666139405016810922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/666139405016810922'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/09/shibbolising-plone-3-some-experiences.html' title='Shibbolising Plone 3 - some experiences'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-4580041007746713740</id><published>2009-09-15T14:12:00.004+01:00</published><updated>2009-10-05T22:17:14.358+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Raven'/><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenID'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><category scheme='http://www.blogger.com/atom/ns#' term='Uam WebAuth'/><title type='text'>Federated AUTH is less than half the battle</title><content type='html'>Federated web &lt;em&gt;authentication&lt;/em&gt;, as provided by Shibboleth, OpenID, Pubcookie, Cambridge's Ucam WebAuth (a.k.a. Raven), etc., is less than half the battle of adapting an application to work in a federated environment. Much the harder part involves the related issues of &lt;em&gt;authorisation&lt;/em&gt; and &lt;em&gt;account provision&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Most existing applications assume that they have some sort of account for every users who can authenticate, not least because traditionally they need somewhere to store user names and passwords. In the federated authentication world this won't always be true, since lots of people will be able to authenticate that the application has never heard of.&lt;br /&gt;&lt;br /&gt;Approaches to dealing with this include:&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Require an account to exist locally before a user can authenticate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If handled manually, this can impose an administrative overhead which will only be manageable for a small user base. Alternativly accounts could be provisioned automatically, but only if the expected set of users can be identified in advance. It is often hard to adapt existing software to not fail badly when presented with an authenticated user who doesn't have an account.&lt;br /&gt;&lt;br /&gt;Users may have to tell administrators how their identity provider will identify them and this could be a problem - in Shib's case it is currently unlikely that users will know their eduPersonPrincipleName (even if it is available), and they can't predict their eduPersonTargetedID. An authenticated 'Application' page that captures available attributes might be a way around this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Automatically provision an account when a user first authenticates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Doing this entirely automatically assumes that information is available about the user, and so assumes either Shib-like attribute provision or access to additional data in something like an LDAP directory. It also assumes that &lt;em&gt;enough&lt;/em&gt; information is available to create accounts - some existing applications positively require things like forename and surname which is problematic if these are not available. Alternativly or additionally, users can be prompted for additional information, though obviously this is less reliable and implementing such prompting can be difficult.&lt;br /&gt;&lt;br /&gt;However it is also necessary to decide who will get such accounts, since it's unlikely that you will actually want to provision an account for everyone who can successfully authenticate, especially if such accounts come with some basic privileges. So some sort of rule engine will be needed to define who does and doesn't get an account, and perhaps what default privileges they get. This will have to be driven by Shib-like attributes or information from directories. For obvious (I hope) reasons, such decisions probably can't be taken based on information supplied by the users themselves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Dynamically log users in without creating accounts for them&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In some applications it's possible for a user to appear 'logged-in' without having a corresponding user account. One example I happen to know about s Plone using the &lt;a href="http://plone.org/products/webserverauth"&gt;WebServerAuth&lt;/a&gt; product. This simplifies things somewhat, though you still need to address the question of who gets what access by default. You probably need some way to manually grant additional access to a limited number of people where the people and the access that they need can't be established based on attribute or directory data - for them, some sort of local account bound to their federated identity will probably still be needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-4580041007746713740?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/4580041007746713740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/09/federated-auth-is-less-than-half-battle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4580041007746713740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4580041007746713740'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/09/federated-auth-is-less-than-half-battle.html' title='Federated AUTH is less than half the battle'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2780703305680355567.post-4474892551754575496</id><published>2009-09-14T09:49:00.000+01:00</published><updated>2009-10-06T08:21:45.423+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Plone'/><category scheme='http://www.blogger.com/atom/ns#' term='Shib'/><category scheme='http://www.blogger.com/atom/ns#' term='Authn'/><title type='text'>Shibbolising Plone 3 - a review</title><content type='html'>There are lots of Google references to shibolising Plone, but it's not clear how many of them apply to Plone 3 (rather than Plone 2 or earlier). All seem to rely on getting Apache to implement the Shibboleth protection, and then passing identity information over to Plone for it to use.&lt;br /&gt;&lt;br /&gt;It looks as if the options include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plone.org/products/apachepas/"&gt;ApachePASS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plone.org/products/auto-member-maker/"&gt;Auto Member Maker&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;which seem to have been replaced by&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plone.org/products/webserverauth"&gt;WebServerA&lt;/a&gt;&lt;a href="http://plone.org/products/webserverauth"&gt;uth&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;all from (or at least related to)  the &lt;a href="http://weblion.psu.edu/"&gt;WebLion&lt;/a&gt; project at Penn State. There's a useful page on WebServerAuth &lt;a href="https://weblion.psu.edu/trac/weblion/wiki/DelegateAuthentication"&gt;on the WebLion site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Alternativly there are three extensions from &lt;a href="http://www.ithaka.org/"&gt;Ithaka&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tid.ithaka.org/software/autousermakerpasplugin/"&gt;AutoUserMakerPASPlugin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tid.ithaka.org/software/shibbolethlogin/"&gt;ShibbolethLogin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tid.ithaka.org/software/shibbolethpermissions/"&gt;ShibbolethPermissions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;which are described in this &lt;a href="http://tid.ithaka.org/shibplone.pdf"&gt;this slide set&lt;/a&gt; and &lt;a href="http://kb.ucla.edu/articles/shibboleth-for-plone"&gt;this article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It looks as if the Ithica solutions actually provision Plone accounts for Shib-authenticated visitors, while the WebLion products give such users 'authenticated' state without creating accounts for them. I can see pros and cons for both approaches. WebServerAuth is being actively developed (last release August 2009); none of the others look as if they are very actively maintained. The Ithica products apparently work with at least Plone 3.0.6; apachepass only claims to work with Plone 2.5; Auto Member Maker and WebServerAuth apparently work with Plone 3.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: updated 2009-09-15 to correct the development status of  WebServerAuth in the light of comments by Erik Rose.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note also that the &lt;a href="http://plone.org/products/liberty-authentication-plugin-for-pas"&gt;Liberty Alliance / SAML 2 Authentication Plugin for PAS&lt;/a&gt; might&lt;/em&gt; be relevant, if it's sufficiently flexible to talk Shib.&lt;br /&gt;&lt;br /&gt;See also &lt;a href="http://jw35.blogspot.com/2009/09/shibbolising-plone-3-some-experiences.html"&gt;Shibbolising Plone 3 - some experiences&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2780703305680355567-4474892551754575496?l=jw35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jw35.blogspot.com/feeds/4474892551754575496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jw35.blogspot.com/2009/09/shibbolising-plone-3-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4474892551754575496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2780703305680355567/posts/default/4474892551754575496'/><link rel='alternate' type='text/html' href='http://jw35.blogspot.com/2009/09/shibbolising-plone-3-review.html' title='Shibbolising Plone 3 - a review'/><author><name>jw35</name><uri>http://www.blogger.com/profile/01606359745703313801</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BPRQt7UtSiY/TyLmgBUT-AI/AAAAAAAAAKc/kPgHOeZ9qvY/s220/jon2.jpg'/></author><thr:total>0</thr:total></entry></feed>
