Le-Blog-à-Dam

Aller au contenu | Aller au menu | Aller à la recherche

lundi 12 mars 2007

Une photo de Suzanne

Oui je vis toujour et je sais que vous mourrez d'envie de voir une photo récente de Suzanne.

mercredi 21 février 2007

RubyMTP

One month ago, I bought a Creative Zen V Plus mp3 player. It's a nice player but I missed easy to use access under Linux (I don't use Windows anymore). I tried the libmtp project but I did not like it much and so I started RubyMTP project. It's a Ruby library to connect to MTP devices. For now it provides a filesystem access using Fuse and a podcast application. It need some test so if you feel like it, give it a try.

jeudi 14 décembre 2006

La Flandre indépendante

Alors là je dis bravo la RTBF. Pour ceux qui ne sont pas au courant, la RTBF a diffusé hier soir un faux JT où de vrais journalistes annonçaient la scission de la Belgique et l'indépendance de la Flandre. Un panneau annonçait avant l'émission qu'il s'agissait d'une fiction et après 1/2 heure d'émission, un bandeau "Ceci est une fiction" était affiché.

Le résultat: une belle pagaille. Des gens se sont rendus devant le palais royal pour manifester leur attachement à la Belgique, des ambassades ont prévenu leur pays de la scission, j'en passe et des meilleures.

Le débat sur l'indépendance de la Flandre est très intéressant mais ce qui m'interpelle le plus ici, c'est la réaction des gens. La première chose à faire lorsqu'on apprend une chose pareille c'est de vérifier ailleur. Zapper sur RTL pour voir si il y a aussi un flash spécial ou allumer la radio plutôt que d'envoyer 36 SMS à ses proches pour les prévenir de la fin de la Belgique. Les gens prenent vraiment les paroles des medias pour du pain bénit. Avec un peu de jugeotte, on pouvait se dire que si la flandre annonçait son indépendance,

  • la nouvelle ne tomberait pas comme un couperet, il y aurait un minimum de chahut, d'abord au parlement, etc,
  • le premier ministre aurait au moins fait une déclaration devant la presse,
  • elle ne l'annoncerait pas à 20h30, à l'heure où on se met dans son canapé pour regarder la TV,
  • ...

On se croirait revenu à l'époque des chain-mails: si vous ne transmettez pas ce message à 10 personnes, votre maison va brûler. Je n'ai jamais fait suivre ce genre de message, et je suis toujour viv... BOUM ...

Trève de plaisanteries, je pense plutôt que tout ceux qui ont des commentaires négatifs sur l'émission se sont bien fait avoir et qu'ils râlent de s'être fait berner. Au moins, le débat est sur la table.

Par contre, la RTBF ne sera plus du tout crédible lors de son prochain flash spécial d'information. François Debrigode a certainement perdu aussi en crédibilité. Le bandeau "Ceci est une fiction" aurait dû être présent dès le début, ou alors ils n'avaient qu'à programmer l'émission un 1er avril, personne n'aurait rien dit.

En tout cas, ça me fait bien rire. Faites-moi penser à demander à Mr Debrigode de dire au gens pendant le JT du soir de verser 20€ sur mon compte sans quoi la Belgique sera à jamais dissolue.

jeudi 7 décembre 2006

you.not_nil? { |you| read.this }

A thing that really annoys me is to check for nil values. For example having to do, in an ERB template

my template

Get rid of user passwords in Rails using SSL client certificate

For an application I'm writing, I needed a way to log in without having to enter a password. You can authenticate a client against a server in Apache using SSL client certificate validation. The problem was to create a link between Apache and the Rails application running under Mongrel. Here is what I've done.

Apache and SSL

First, you'll need Apache set up with SSL and client certificate validation. There are howtos on the web on how to to that, so I won't explain that in full details here. You'll need a server private key and certificate and a client certificate issued by the same authority (or authorities trusting each others). For myself, I use CAcert which provides free "ethic" certificates.

I use Coda Hale great article to configure my rails apps. Here is what I added to the Apache configuration for having it working with SSL and client certificate validation. Please note that only the lines added or changed are listed here. For it to work, you need to enable the Apache 2 SSL and headers modules.

<virtualhost>
  SSLEngine on
  SSLCertificateFile /path/to/cert.pem
  SSLCertificateKeyFile /path/to/private.key
  SSLCACertificateFile /path/to/cacert.pem
  SSLVerifyClient none

  <location>
    SSLVerifyClient require
    SSLVerifyDepth 1
  </location>

  RequestHeader set X_FORWARDED_PROTO 'https'
  RequestHeader set X_SSL_CLIENT_DN_Email "%{SSL_CLIENT_S_DN_Email}s"
</virtualhost>

So what's the meaning of all this ?

On line 1, we say that this virtual host is for connection on port 443 (don't forget to add a "Listen 443" directive to your Apache config).

Line 2 to 5, we simply configure server side ssl.

On line 6 to 12, we configure client certificate validation. The line 6 is usefull if you want to require validation only for some specific locations (say 'admin' for example). Line 9, we require client certificate validation for the '/' location. Line 10 says that we need to go up in the authority hierarchy of 1 level maximum (my client and server certificates are issued by the same authority).

On line 13, we tell rails that we are using the "https" protocol so that links outputted by call to "link_to", "url_for" and the likes need to start with "https" instead of "http".

SSL, Rails and Mongrel

This is the interesting part, specific to using Rails with Mongrel.

On line 14, we say to Apache to add the "X_SSL_CLIENT_DN_Email" header to the value of the "DN_Email" field in the SSL client certificate. This is the only way I have found to forward to Mongrel the SSL client certifcate values that are of interest to us.

Now in your controller, to fetch the email of the user connected:

1
2
3
4
5
6
7

class ApplicationController < ActionController::Base
  before_filter :ssl_login
  def ssl_login
      session[:user] =  User.find_by_email(request.env["HTTP_X_SSL_CLIENT_DN_EMAIL"])
    end
  end
end

If your Mongrel instances are only listening to your local host network interface (think 127.0.0.1), this should be secure:

  • Apache will prevent anybody not having a valid client certificate to even reach your Mongrel instances,
  • for the others, Apache sets the email of the certificate in a header and overwrite the header if already present (so client are unable to forge that header),
  • assuming a common authentication scheme, if the user email is in your database, he is allowed to connect.

Please do note that if a hacker is able to connect to your Mongrel instances via your local host network interface, he can forge the header and pretend to be someone else. But if he has access to your local host interface, you probably are already in big troubles.

I hope you found this useful, any comments are of course welcome.

- page 3 de 9 -