Créer un certificat self-signed en une seule ligne
Publié le 30 Mar 09 à 07:47 | Catégorie : Développement Web | 11 commentaires
Pour sécuriser une connexion entre le navigateur d’un internaute et le site web qu’il consulte, il faut utiliser le protocole HTTPS et mettre en place un certificat au niveau du serveur. Ce certificat doit avoir été délivré par une société accréditée pour être reconnu automatiquement par les principaux navigateurs du marché. Dans le cas contraire, le navigateur va demander à l’utilisateur de vérifier et de valider ce certificat avant de pouvoir accéder à ce site (ce qui est dramatique au niveau de l’expérience utilisateur).
Mais lorsque cette contrainte est acceptable et connue (comme par exemple dans le cas d’une interface d’administration qui n’est pas destinée aux utilisateurs), il est tout à fait possible de se passer d’un certificat signé par une autorité externe et d’économiser quelques euros en le générant soi-même. On parle alors de certificat self-signed.
Et j’ai découvert récemment comment en créer un depuis la ligne de commande (sous Debian) sans aucune interaction nécessaire, ce qui est très utile dans le cas où l’on souhaite scripter cette opération. Voilà par exemple la ligne de commande que j’ai utilisé pour créer le certificat de l’interface d’administration du site de l’OpenCoffee Club Sophia :
1 | openssl req -new -x509 -days 3650 -nodes -utf8 -out /etc/apache2/ssl/opencoffeesophia.crt -keyout /etc/apache2/ssl/opencoffeesophia.key -subj '/C=FR/ST=Alpes Maritimes/L=Biot/O=Stéphane Thomas/OU=OpenCoffee Sophia/CN=www.opencoffeesophia.com' |
Pour information, le certificat généré sera valide pendant 10 ans et contiendra toutes les informations nécessaires pour l’identifier.
Je profiterais de cette occasion pour rappeler que pour mettre en place plusieurs connexions SSL sur un même serveur (c’est-à-dire lorsque l’on doit sécuriser plusieurs sites hébergés sur une même machine), il faut soit utiliser un numéro de port différent pour chaque site (et donc utiliser un autre port que le port standard 443), soit mettre en place une adresse IP supplémentaire (c’est le système d’ip-failover proposé par certains hébergeurs). En effet, le protocole SSL encapsule le protocole HTTP et ne permet donc pas d’identifier un site en fonction de son nom de domaine. Si vous voulez en savoir plus sur ce protocole, je vous invite à consulter cet excellent article.
A lire également
Vous pouvez continuer votre lecture sur des sujets similaires en consultant les articles suivants :
- Techniques de survie pour les tests d'acceptation d'applications web
- 43 contrôles essentiels pour les applications web
- Sécurité web: faites-vous partie du problème ?
- Tester vos chemins XPath pour Selenium avec Firebug
Les visiteurs qui ont vu cette page ont consulté ensuite :
- Visualiser le rendu d’un site sur plusieurs navigateurs (23 lectures)
- 5 gestionnaires de bugs très web 2.0 (11 lectures)
- Zend Framework, un framework pour développer des applications Php… (5 lectures)
A savoir
La rédaction de cet article a nécessité 47 minutes. Si vous le souhaitez, vous pouvez être prévenu de la parution de nouveaux articles en vous abonnant par RSS ou par email.
11 commentaires à propos de “Créer un certificat self-signed en une seule ligne” :
Bonjour
Je souhaitais préciser qu’il est possible d’héberger autant de site SSL sur une seul IP publique et sur le même port, comme précisé dans la RFC 4366.
Côté serveur je vous conseil de générer vos certificats avec GNUTLS qui implémente le SNI (Je ne suis pas sur qu’OpenSSL implémente cette fonctionnalité pour le moment). d’installer le mode GNUTLS pour Apache voir ce site –> http://www.outoforder.cc/proje.....od_gnutls/
Côté client il vous suffit de vérifier si votre navigateur est compatible SNI à cette adresse –> https://sni.velox.ch/ ( tous les navigateurs récents le sont).
Je l’utilise pour tout mais sites d’administration sur mes Débian OVH, et cela permet de n’ouvrir que le port 443.
Cela permet aussi de proposer mes forums phpbb en version HTTP et HTTPS au choix de l’utilisateur.
Cordialement Anthony
Azenor le 30 March 2009 à 07:32 (#1)
En fait, c’est un seul certificat SSL par paire IP/Port … donc si le certif est multi-noms (subjectAltNames) ça marche bien:
exemple https://crm.neuron3.com/ ou https://mail.neuron3.net/
Ca peut dépanner longuement quand on sait à peu près ce qu’on veut comme noms.
ou alors, faut espérer que le client web utilise les instructions SRV dans sa zone dns… on peut indiquer un port différent que le 443 habituel, mais c’est absolument pas standardisé afaik) pis c’est assez casse bonbon à maintenir côté conf.
Mais bon, l’extension SNI arrive, il fonctionne bien avec l’extension mod_gnutls, des versions qui arrivent de mod_ssl, et surtout directement dans certaines libs comme OpenSSL à partir de la 0.9.9
http://en.wikipedia.org/wiki/S.....on#Support
JaXX le 30 March 2009 à 07:50 (#2)
Je faisais des certificats auto-signés avant, mais maintenant j’utilise http://www.startssl.com car ils te proposent des certificats SSL gratuits, reconnus en standard par la plupart des navigateur (il y a juste IE5/6/7 ou il faut installer a la main l’autorité de certification pour que cela ne fasse plus d’alerte). Autrement dit, un tel certificat passe comme une lettre a la poste sous la plupart des navigateurs, et sous IE, cela pose les mêmes problèmes d’alertes qu’un certificat auto signé
Olivier le 30 March 2009 à 13:23 (#3)
Merci pour toutes ces précisions, je ne connaissais pas encore l’extension SNI ! Il était vraiment temps de faire quelque chose à ce niveau. Il ne reste plus qu’à attendre que tous les navigateurs le supportent (mais comment faire lorsqu’une partie des utilisateurs emploient toujours IE 6 par exemple ?).
Stéphane le 31 March 2009 à 09:25 (#4)
@Stéphane
Même dans l’administration ils se séparent d’IE6… perso, je préfère refuser un contrat que d’en faire le support, ou alors j’ajoute quelques jours de taff (bien réels, quand on te demande des machins plein d’ajax avec des png transparents en background, dessiné par un graphiste qui a oublié le boulot d’intégration que ça peut générer)… je me dis que si tout le monde le fait, on forcera un peu les derniers à coller un meilleur navigateur en peu de temps… je suis pas à plein temps mais je peux encore me le permettre
En plus, l’argument de base c’est “Microsoft a officiellement abandonné le support d’IE6 il y a plusieurs années, vous en êtes à 2 versions majeures de retard, tandis que de meilleurs systèmes existent en plus”… chuis parfois méchant
mais c’est pour la sauvegarde de l’humanité que je fais ça 
JaXX le 31 March 2009 à 09:33 (#5)
Je suis tout à fait d’accord avec toi JaXX. Mais si l’on prends plutôt l’exemple d’Internet Explorer 7 sur Windows XP qui ne supporte par le SNI, je me dis qu’il va falloir attendre encore un bon bout de temps avant de passer le certificat d’un site grand public en SNI.
Stéphane le 31 March 2009 à 10:14 (#6)
Ah oui, t’as raison, j’avais sauté la parenthèse.
Bon, le saut d’IE7 à IE8 est moins difficile que d’IE6 à IE7 àmha, d’un point de vu gestion en entreprise j’entends… même si chaque version apporte son lot de problèmes aussi… MS réussi un OS sur deux, il en va de même pour les navigateurs… IE6 était au final assez pauvre, IE8 introduit des bizarreries… IE7, à défaut d’être complet, on pouvait s’en tirer puisque le comportement était assez prévisible.
Mais bon, chuis pas un spécialiste en IE non-plus
PS: c’est pas le certificat qui est impacté, mais le serveur web qui reçoit la requête, qui avec le SNI saura quel certificat utiliser. Un gros site grand public aura généralement un seul nom d’hôte, son IP etc… s’il y a un backoffice, on utilise un autogénéré… les cas où le besoin se fera ressentir sont sommes toutes assez rares… le cas classique seraient une plateforme mutualisé d’eCommerce léger, genre vente de bijoux fantaisie artisanal (et ce n’est pas parce que c’est la lubie de ma compagne que j’y pense
)
JaXX le 31 March 2009 à 10:26 (#7)
Tenez: pour tester si son brouteur envoi l’entête utile au SNI
https://sni.velox.ch/
JaXX le 31 March 2009 à 10:30 (#8)
Juste une petite remarque sur la forme de l’article, connexion ne s’écrit pas avec un “t”.
Sinon très bonne continuation.
Antoine le 5 April 2009 à 14:56 (#9)
Voilà, c’est corrigé (j’ai toujours un doute avec ce mot là). Merci Antoine.
Stéphane le 6 April 2009 à 06:22 (#10)
FELICITATIONS
depuis le temps que je cherchais quelque chose de simple …
On y va pour la question idiote ?
1/ à quel endroit mettons cette ligne de commande surtout lorsque l’on est en WInmachinchose ?
voici ma config : je travaille avec des hébergeurs indonésiens, australiens et chinois.
Tous charmants mais tous avec leurs spécificités personnelles qui nous pourrissent joyeusement la vie
ma question est donc de savoir à quel endroit je peux mettre cet certif. Généralement il est installé en racine mais d’autres sont en répertoire ssl/
je serai grandement reconnaissant pour l’aide que vous apporterez.
Excellente journée
nestor le 5 March 2010 à 05:53 (#11)
Ajouter un commentaire