Etude de cas IDX-PKI GPL

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Pour informations, ce dossier a été réalisé avec l'ancienne version d'IDX-PKI qui a contribué à sa popularité, les versions des logiciels tiers étaient les versions les plus récentes à date de rédaction.

La démocratisation des outils de sniffing (écoute passive du réseau), l'augmentation des risques liés à l'utilisation des nouvelles technologies justifient l'emploi quasi systématique de solutions fiables de chiffrement.

Entre utilisateurs, et plus généralement sur de larges infrastructures, seuls les moyens utilisant des algorithmes de chiffrement asymétrique sont envisageables. Chaque utilisateur, entité, ou quelque « objet » que ce soit, dispose alors d'une paire de clefs avec :

  • Une clef privée, dont le contenu doit être stocké en « lieu » sûr.
  • Une clef publique, pouvant être diffusée largement (et généralement stockée dans un serveur central sur la PKI).

Il est en effet inconcevable d'utiliser des moyens de chiffrement symétrique pour des échanges entre utilisateurs.

Aucun système fiable, hormis un déplacement physique avec identification de l'interlocuteur (carte d'identité, passeport, etc.) n'existe actuellement pour échanger des clefs privées dans des systèmes asymétriques.

L'utilisation, souvent lourde en termes de performances, des moyens asymétriques est compensée avec une utilisation symétrique complémentaire.

Des clefs symétriques (algorithmes AES, DES, triple DES, etc.) peuvent alors être échangées via des canaux sécurisés par des moyens de chiffrement asymétrique.

C'est notamment le cas pour plusieurs systèmes de Voix sur IP (VoIP – Voice Over IP), de réseaux Peer to Peer (P2P)...

Il existe une contre partie lourde à l'utilisation des moyens de chiffrement généralisés : le sentiment de sécurité. Avec l'utilisation massive de moyens cryptographiques, les utilisateurs acquièrent un faux sentiment de sécurité.

Le chiffrement ne saurait en aucun cas assurer une sécurité suffisante : les failles logicielles, problèmes de design, de topologie réseau, de configuration seront toujours présents.

La compromission d'une clef privée, trop souvent négligée dans les études de risques mais également dans les esprits des utilisateurs, rendra complètement inefficace les meilleures implémentations cryptographiques.

Il n'est pas rare, lors de tests d'intrusion (pentests) par exemple, de trouver des moyens forts de chiffrement sur des serveur HTTPS avec des clefs privées accessibles en lecture pour tous les utilisateurs du système...

Une sensibilisation auprès des utilisateurs est, dans tous les cas, toujours nécessaire dans l'accompagnement du déploiement de telles solutions.

L'exemple typique du popup d'alerte émis par un navigateur Internet lors de la réception d'un certificat ne correspondant pas au site visité est bien souvent négligé par les utilisateurs « lambdas » dont l'habitude est devenue de cliquer sur le bouton « Accepter ».

L'emploi massif, sous certains systèmes d'exploitation, il est vrai, rend la tâche presque intuitive.

La gestion des révocations est également un élément important dans une PKI. Une clef compromise, interdite, doit être systématiquement révoquée. Des CRL, listes des certificats révoqués, doivent également être utilisées.

Les principes fondamentaux sous-jacents aux PKI sont nombreux : autorités de certification (CA), hiérarchisation et héritages des liens de confiance, certificats, clefs...

La littérature disponible sur Internet à ce sujet et abondante. Quelques prérequis sont nécessaires sur le sujet à la bonne compréhension de cet article.

IDX-PKI est une solution open source d'infrastructure à clef publique développée par la société OpenTrust IdealX. Elle permet de gérer de façon simple et décentralisée l'ensemble d'une PKI sur de larges infrastructures.

Un des principaux 'avantages est le type de licence libre dont bénéficie IDX-PKI (GPL - General Public Licence), qui permet de déployer à moindre coût cette solution.

Les technologies retenues en amont constituent également un point fort de cette offre avec leur fiabilité, robustesse et facilité d'utilisation.

1.1 Les principaux points forts de la solution IDX-PKI

  • Un mode centralisé dans lequel un serveur relaye les informations pour les utilisateurs. Les administrateurs disposent, eux aussi, d'une interface simplifiée permettant d'effectuer la totalité des tâches d'une PKI.
  • Un mode décentralisé permettant la génération simple des clefs et des certificats pour les navigateurs (Microsoft Internet Explorer, Netscape, Mozilla, Firefox ...), les jetons de sécurité pour les cartes à puce, dongles USB ou les équipements réseau (VPN, Serveur HTTPs). Un objet au sens d'IDX-PKI n'est plus forcément un utilisateur mais peut être un équipement, une entité, etc.
  • La génération des certificats de serveurs avec le support des signatures de certificats pour les serveurs et/ou équipements tiers (formats standards).
  • Le support d'officiers de sécurité multiples (SO – Security Officers) afin de répartir la charge des demandes de signatures de certificats (CSR), charge importante notamment lors du déploiement initial de la solution. Le support du module SCEP (Simple Certificate Enrollment Protocol) permettant aux équipements et clients de réseaux virtuels (VPN – Virtual Private Network) de s'intégrer automatiquement dans l'infrastructure à clef publique.
  • Le support d'une API de Web development permettant d'intégrer rapidement la PKI au sein d'applications Web futures ou existantes (authentification...).

1.2 Les principales fonctionnalités d'IDX-PKI

  • Accès SSL sécurisé à la plate forme Web (et authentification par certificat).
  • Gestion des autorités de certification racines (CA – Certificate Authority) et subalternes.
  • Possibilité d'utilisation de multiples CA.
  • Possibilité d'interopérabilité de la PKI sur les systèmes compatibles (OpenVPN, signatures SMIME...).
  • Gestion des séquestres de clefs.
  • Module OCSP (Online Certificate Status Protocol), permettant d'effectuer, en ligne, des vérifications sur la validité de certificats.
  • Gestion des logs et des remontées d'alertes.
  • Différents modes de fonctionnement (cf. ci-dessus) : décentralisé, centralisé et synchrone.
  • Gestion des profils pour les certificats.
  • Création des certificats de serveurs (HTTPs, IMAPs, POPs, SMTPs...).
  • Installation et configuration aisées via des scripts Perl disponibles.
  • Support de formats propriétaires : SafeNet, Bull, nCipher.
  • Haute disponibilité grâce aux serveurs retenus (Apache, OpenLDAP).
  • Compatibilité des formats Microsoft (DER, PKCS 12...).

Le code ouvert permet également l'audit de cette solution, propriété particulièrement intéressante dans certains contextes d'utilisation (safety, normes, etc.).

Plusieurs grands groupes et organismes publics se sont déjà tournés vers cette solution, gage de fiabilité. L'installation d'IDX-PKI est ici présentée avec la distribution Linux Debian. Il s'agit en effet d'une des distributions les plus utilisées et permet d'être, en outre, très représentative en termes de packages nécessaires (dépendances) et de configuration.

2 Installation

Merci de prendre note que ce document a été réalisé en 2006 et qu'une nouvelle version d'IDX-PKI apportant son lot de corrections et d'améliorations est disponible sur Sourceforge; cette nouvelle version connue sous le nom de Cryptonit est à mettre au crédit d'OpenTrust IdealX.

Pour informations, ce dossier a été réalisé avec l'ancienne version d'IDX-PKI qui a contribué à sa popularité, les versions des logiciels tiers étaient les versions les plus récentes à date de rédaction.

Les paquets (logiciels et librairies) nécessaires avant l'installation sont les suivants :

  • apache (1.3.27)
  • curl
  • expat
  • gd
  • gmp
  • libjpeg
  • libpng
  • libtool- lib
  • libxml2
  • make (3.79.1)
  • mm
  • mod_perl (1.26)
  • mod_ssl (2.8.12)
  • openldap (2.0.27)
  • openldap- clients (2.0.27)
  • openldap- servers (2.0.27)
  • openssl (0.9.6b)
  • perl (5.6.1)
  • perl- CGI (2.752)
  • perl- Digest- MD5
  • perl- libwww- perl (5.63)
  • perl- MIME- Base64 (2.12)
  • perl- URI
  • perl- suidperl (5.6.1)
  • php (4.1.2)
  • pspell
  • stunnel (3.22)

Plusieurs modules Perl sont également requis. Debian les propose en package, inutile donc de les installer manuellement depuis une source extérieure :

  • perl-Config-IniFiles (2.37)
  • perl-Convert-ASN1 (0.17)
  • perl-Data-Compare (0.02)
  • perl-Error (0.14)
  • perl-File-Sync (0.09)
  • perl-IO-Socket-SSL (0.93)
  • perl-IO-stringy (2.109)
  • perl-Net-SSLeay (1.22)
  • perl-perl-ldap (0.26)
  • perl-Taint (0.07)
  • perl-Tie-IxHash (1.21)
  • perl-XML-SAX-Base (1.02)

Les commandes Debian suivantes, lancées par l'utilisateur root, vous permettront d'effectuer les installations de ces modules :

Command apt-cache
apt-cache search perl [nom du module]
apt-get install [module renvoyé par la commande précédente]

Après désarchivage de la dernière version d'IDX-PKI récupérée ( IDX-PKI est depuis devenu Cryptonit disponible sur SourceForge - lien http externe url:[click] ), la procédure suivante ne concerne que l'ancienne version IDX-PKI.

Lancez le script ./configure.pl. Suit alors une série de questions auxquelles vous devrez répondre avec précision (attention, cette phase de configuration est déterminante) :

Command
# ./configure.pl
 
Reconfiguration starting from the previous answers given to "./configure.pl".
To suppress this behaviour, remove the config.status file.
 
Install all IDX-PKI entities on this machine (y/n) [y]?
 
Target distribution [debian stable]?
Test setup options (y/n) [y]?
Unprivileged installation (y/n) [y]?
Use testing small-size keys (y/n) [y]?
Hostname to use for the webserver [lapt41p]?
Hostname to use for the repository LDAP [lapt41p]?
Installation prefix [/home/tests/idxpki-v1.9.0/install_image]?
Port for IDX-PKI's secure WWW server [11256]?
Port for IDX-PKI's insecure WWW server (used for publication purposes) [11257]?
Port for the IDX-PKI's repository LDAP server [11258]?
 
Done
 
 
Looking for file paths:
-----------------------
* slappasswd... /usr/sbin/slappasswd
* stunnel... /usr/bin/stunnel
* openssl... /usr/bin/openssl
* openssl-root... /usr
* slapadd... /usr/sbin/slapadd
* ldapmodify... /usr/bin/ldapmodify
* openssl-include... /usr/include/openssl
* openldap-root... /usr
* schemadir... /etc/ldap/schema
* apache... /usr/sbin/apache
* slapd... /usr/sbin/slapd
Done

Il est fréquent de ne pas avoir tous les modules Perl requis :

Command
* Net::LDAP (0.26)... ==> not OK <==
Net::LDAP doesn't appear to be installed on the system.

C'est notamment le cas pour le module Perl-Taint, non disponible sur la distribution Debian de base, qu'il faudra installer manuellement en récupérant l'archive sur le moteur de recherche de CPAN (Comprehensive Perl Active Network) à l'adresse suivante :

Command
wget search.cpan.org/CPAN/authors/id/P/PH/PHOENIX/Taint-0.09.tar.gz
tar -zxvf Taint-0.09.tar.gz
perl Makefile.pl
make
make install

Pour tous les autres paquets Perl, la démarche est alors la suivante (recherche du nom du paquet, puis installation) :

Command
# apt-cache search perl ldap net
libnet-ldap-perl - A Client interface to LDAP servers
# apt-get install libnet-ldap-perl

Puis finalement, une fois l'ensemble des modules Perl récupérés, nous relançons le script de configuration :

Command
# ./configure.pl
(...)
Done
 
The configuration values have been written in ./config.status.
You can now build IDX-PKI by typing `make`.

Enfin, pour finir, la compilation s'effectue avec :

Command
make
make install

3 Configuration

Les fichiers de configuration d'IDX-PKI sont placés dans le répertoire /opt/idxpki/etc/idxpki/conf. Il s'agit de fichiers de configuration tiers, tels que ceux d'Apache (idxpki-httpd.conf), PHP (php.ini) ou encore des messages de renouvellement de certificats en français et anglais.

Pour informations, ce dossier a été réalisé avec l'ancienne version d'IDX-PKI qui a contribué à sa popularité, les versions des logiciels tiers étaient les versions les plus récentes à date de rédaction.

Le répertoire /opt/idxpki/etc/idxpki/conf :

Command
/opt/idxpki/etc/idxpki/conf$ ls
idxpki-httpd.conf renewal_message-1.conf renewal_message-3.conf
php.ini renewal_message-2.conf schema

Les modifications directes sur ces fichiers ne sont normalement que minimes. Voici les parties susceptibles d'être modifiées :

# Lignes relatives à la charge, aux connexions multiples et aux clients
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 20
StartServers 5
MaxClients 150
 
# Personnalisation du serveur apache sous-jacent :
 
ServerName lapt41p
ServerAdmin [email protected]
 
# Configuration de l'accès non sécurisé (port 80 en particulier):
 
Listen 80
 
<VirtualHost _default_:80>
DocumentRoot /opt/idxpki/var/idxpki/crl
CustomLog /opt/idxpki/var/idxpki/log/httpd_plain_HTTP_access_log combined
</VirtualHost>
 
# Configuration de l'accès sécurisé (port 443 en particulier)
 
Listen 443
 
<VirtualHost _default_:443>
DocumentRoot /opt/idxpki/var/idxpki/www
SSLLogLevel warn
SSLLog /opt/idxpki/var/idxpki/log/httpd_ssl_log
(...)
 
# Définitions SSL
 
SSLEngine on
SSLOptions +StdEnvVars +ExportCertData +StrictRequire
SSLCertificateFile /opt/idxpki/var/idxpki/secure/WWW/webserver.pem
SSLCertificateKeyFile /opt/idxpki/var/idxpki/secure/WWW/webserver.key
SSLCACertificatePath /opt/idxpki/etc/idxpki/ca
SSLVerifyClient optional
SSLVerifyDepth 2
 
<LocationMatch ^/(RA|CA|escrow|config|logs)>
SSLRequire ( %{SSL_CLIENT_VERIFY} eq "SUCCESS" )
</LocationMatch>
 
</VirtualHost>

En dehors des modifications de configuration, il sera également nécessaire de créer le certificat et la clef privée associés au serveur HTTPs (cf. lignes ci-dessus) :

  • Création du CA (clef et certificat)
Command openssl

openssl req -nodes -new -x509 -keyout root.key -out root.crt -days 365


  • Création de le clef privée du serveur et de la demande de signature pour le certificat
Command openssl

openssl req -nodes -new -keyout webserver.key -out webserver.csr -days 354


  • Signature du certificat
Command openssl

echo "02" > root.srl openssl x509 -req -in webserver.csr -out webserver.pem -CAkey root.key -CA root.crt -days 365


La solution IDX-PKI est désormais fonctionnelle au niveau du serveur. Les éléments de configuration suivants sont effectués directement via l'interface Web, depuis un navigateur classique vers l'URL en https.

Il s'agit d'une authentification par certificat (et non classique par login/mot de passe).

Il faudra pour ce faire importer au préalable dans le navigateur d'administration le certificat au format PKCS12.

Il est placé, après l'installation, dans /tmp/idxpki-ceremony/admin.p12 ou [CHEMIN DEFINI]/var/idxpki/tmp/idxpki-ceremony/admin.p12 selon le mode d'installation retenu précédemment.

Le certificat administrateur n'est pas protégé par mot de passe, l'interface est donc directement accessible de façon transparente.

4 Conclusion

IDX-PKI démocratise les solutions de PKI pour tous. Cette technologie étant jusqu'alors destinée presque exclusivement aux grandes sociétés de par la compléxité de mise en oeuvre et l'appel à des SSII pour en effectuer le déploiement.

Pour informations, ce dossier a été réalisé avec l'ancienne version d'IDX-PKI qui a contribué à sa popularité, les versions des logiciels tiers étaient les versions les plus récentes à date de rédaction.


La solution IDX-PKI ouvre donc la voie vers la démocratisation des solutions de PKI pour tous.

Cette technologie, aux bases pourtant robustes et éprouvées, était jusqu'à maintenant réservée quasi-exclusivement aux grandes sociétés pouvant faire appel à des SSII spécialisées pour développer des interfaces de PKI, sans lesquelles les principes théoriques de cette technologie pouvaient difficilement être utilisés.

Il est inimaginable aujourd'hui d'utiliser une infrastructure de PKI uniquement en ligne de commande avec OpenSSL et un serveur d'annuaire LDAP.

Les interfaces de ce type, encore trop rares dans le domaine des logiciels libres, répondent tout à fait au besoin de sécurité, notamment dans le domaine de la cryptologie.

D'anciens protocoles, n'intégrant pas de sécurité nativement (citons entre autres SMTP, POP, etc.) peuvent ainsi être renforcés grâce à l'utilisation de moyens de chiffrement asymétriques, et surtout grâce à une distribution intuitive de certificats.

Concernant la solution retenue, certains bémols restent cependant encore à noter. Nous regrettons en effet un certain manque de maturité dans la version accessible au public avec :

  • Plusieurs problèmes, en pratique, lors de l installation et de la configuration de la solution, nécessitant des modifications de scripts, fichiers de configuration, etc.
  • Un manque de documentation (un bref fichier PDF était accessible sur le site d'OpenTrust IdealX), souvent floue et incomplète.
  • Aucun manuel didactique « pas à pas » d'installation (hormis le fichier INSTALL placé à la racine de l'archive). De solides bases techniques sont alors nécessaires pour arriver à obtenir un système entièrement fonctionnel.

Une fois installée, la solution dispose d'une interface intuitive et ergonomique permettant d'oublier les déboires précédents lors de l'installation.

Des bases de cryptologie permettront de mettre en place la base du système en vue d'une automatisation des processus de livraison des certificats, des listes de révocation, et de vérifications.

Cryponit, la dernière version OpenTrust IdealX de IDX-PKI, devrait normalement palier les problèmes rencontrés avec la précédente version qui a été utilisée pour la rédaction de ce document.

Quoi qu'il en soit, l'initiative de mise à disposition sous licence GPL de ces versions par la société OpenTrust IdealX est remarquable et permet de contribuer activement au développement à la fois des logiciels libres dans le domaine de la PKI mais également de ce domaine au sein d'un panel d'entreprises plus larges.