On 11 Feb 2010, at 20:24, Sergiu Dumitriu wrote:

> On 02/10/2010 12:44 PM, Story Henry wrote:
>> Hi,
>> 
>> Having got Xwiki to produce RDFa (very easy), and having switched of
>> Twitter to allow me to concentrate,I am now working on allowing a
>> user to click a button in his profile, and have it create a foaf+ssl
>> certificate (which is just a normal certificate, but with a URL in
>> the subject alternative name). The code for this is very simple:
>> 
>> http://github.com/harbulot/keygenapp/blob/master/samplewebapp/src/main/java/uk/ac/manchester/_rcs/bruno/keygenapp/webapp/MiniCaServlet.java
>> 
>> (with a few lines of tweaks required to add the certificate
>> information to the profile page).
>> 
>> What happens is that a<keygen>  XML element is added to a<form>
>> element in the user's profile page. This forces the browser (Safari,
>> Firefox, Opera) to create a<public, private>  key pair and send the
>> public part to the servlet referred to above (MiniCaServlet). That
> 
> What about IE? Not that I like it, but most enterprise users are still 
> on IE6.

You can do it as shown here I think. This html calls this javascript:

http://github.com/harbulot/keygenapp/blob/master/samplewebapp/src/main/webapp/index.html

will call this javascript

http://github.com/harbulot/keygenapp/blob/master/samplewebapp/src/main/webapp/crosskeygen.js

With IE one has to use an ActiveX component. We have not checked this out that 
much yet, and it may be possible to do a lot better that that javascript....

More on http://esw.w3.org/topic/foaf+ssl

> 
>> servlet creates a certificate and sends it back to an invisible
>> iframe. The browser then adds that cert to the keystore (this is done
>> automatically, it's part of browser behavior).
> 
> Do you have a link to some documentation about this behavior?

Yes, it is now defined in HTML5

http://dev.w3.org/html5/spec/Overview.html#the-keygen-element


> 
>> So to move this code to XWiki, I understand I should create a
>> component. I read about it here:
>> 
>> http://platform.xwiki.org/xwiki/bin/view/DevGuide/WritingComponents
> 
> Yes, that's the right approach. You should also read about the new 
> scripting service, see http://jira.xwiki.org/jira/browse/XWIKI-4853 and 
> http://markmail.org/thread/g4z56pl734lng2ym
> 
>> and it makes sense. From a component I can get the user, and from
>> that I can get his profile page, and then I can add the public key
>> information to his profile (I wrote a RSAKeyClass in Xwiki to do
>> this).
> 
> RSAKeyClass as a class inside com.xpn.xwiki.objects.classes, similar to 
> PasswordClass, NumberClass and the like? Yes, that is good. You also 
> need a RSAKeyMetaClass in com.xpn.xwiki.objects.meta, and register it in 
> com.xpn.xwiki.objects.meta.MetaClass
> 
> Alternatively, you could just use the TextAreaClass for the moment, 
> although that's 0 security.

(No we don't want people to edit their public/private keys. That would just 
cause confusion.)

> 
>> The component should finally send the newly generated certificate
>> back to the client, which it can do because it has access the the
>> HTTPServletResponse.
>> 
>> But where would I put such a component? In a specific wiki page?
> 
> Better as a jar inside WEB-INF/lib. Given that it adds a new property 
> type to the data model, it should be a key component inside the platform.
> 
>> Does all that make sense? If not let me know before I go and code it
>> up.
> 
> Looks good to me so far, but I have a couple more questions/suggestions:
> 
> - You must make sure that the private key can't be publicly accessed

There are two keys that need to be mentioned here:
 - the key from the browser: the browser will only send the public key to the 
server, so 
   it is up to the client to be careful about this
 - the key of the Xwiki server that will sign the incoming keys
  One could create a certificate on the fly per installation of an Xwiki 
server, as this just needs to be self signed. Well it would be useful to make 
it a little specific, by for example giving a reasonable LDAP name 
(Distinguished Name) to it

> - What do you plan to do with these keys afterwards?
> - The process that you described (browser creates key, sends public part 
> to server, server creates certificate and sends back to browser) does 
> not mention anything about what happens within the user profile. Could 
> you go into more details?

The user profile will show a public key marked up in RDFa. There could be a 
number of them. See my profile http://bblfish.net/ for an example.

This is then used to authenticate the user. More on the wiki, but the short 
version is here:

   http://blogs.sun.com/bblfish/entry/foaf_ssl_adding_security_to

Henry

> 
>> Henry
>> 
>> PS. It would be fun later to have the User's Profile page be a bit
>> Ajaxy, so that if it notices a change to the invisible iframe the
>> browser can make a reques to XWiki to refresh the table of public
>> keys displayed to the user.
>> 
>> Social Web Architect http://bblfish.net/
> 
> -- 
> Sergiu Dumitriu
> http://purl.org/net/sergiu/
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to