Pascal VERRECCHIA, Maryline MAKNAVICIUS-LAURENT
Janvier 2004 version 4.3
URL : http://www-lor.int-evry.fr/~maknavic/CADDISC/
OpenCA est un logiciel développé par The OpenCA Labs
qui est une organisation dont les résultats sont open source,
travaillant sur l'étude des PKIs et le développement de projets
qui s'y relatent.
Le nombre de projets concernant ce domaine augmentant, The OpenCA
Labs ont décidé de se séparer en deux groupements
de recherche importants :
- le développement des PKI
- le responder OCSP
Ce sont les recherches et le développement touchant au premier domaine qui nous intéressent dans ce document.
Le Projet de Développement des PKI d'OpenCA est un effort de
collaboration de nombreux chercheurs pour développer une Autorité
de Certification (CA) robuste, se basant sur des protocoles fortement utilisés.
OpenCA (le logiciel issu de cette recherche) est basé sur d'autres
projets open source et notamment OpenLDAP, OpenSSL, Apache Project et Apache
mod_ssl.
Le projet de développement est divisé en deux tâches
principales:
- étudier et raffiner les méthodes de sécurité
qui garantissent le meilleur modèle à être utilisé
dans une CA
- développer un logiciel rendant facile l'installation
et l'utilisation d'une Autorité de Certification.
- Apache (la version que nous utilisons est : Apache 1.3.27)
- Mod_ssl (la version que nous utilisons est : mod_ssl-2.8.14-1.3.27)
- perl
- DB_File (module perl pour laccès à la BDB)
La version que nous utilisons pour OpenCA est la suivante : OpenCA-0.9.1
Ces différents logiciels sont open source et faciles d'accès.
Pour faire marcher OpenCA de base, vous n'avez besoin que de Openssl.
Les autres logiciels serviront à lui apporter de nouveaux attributs.
L'installation de Openssl est présentée dans le document
[Ver03A
] ainsi que l'installation et la configuration de OpenLDAP, Cyrus SASL,
Berkeley DB, Openssl,...
Tout d'abord, vous devez installer apache_1.3.27 et le module mod_ssl
qui lui est attribué, c'est à dire : mod_ssl-2.8.14-1.3.27.
tar xzf mod_ssl-2.8.14-1.3.27.tar.gz
tar xzf apache_1.3.27.tar.gz
cd mod_ssl-2.8.14-1.3.27
Modifiez le fichier /src/main/http_main.c en prenant en compte le patch apache_diffs ou en reprenant (dans le cas d'apache_1.3.2.7) celui fourni à l'adresse http://www-lor.int-evry.fr/~maknavic/CADDISC/SP21/caddiscConfFiles.tar.gz
./configure
--with-ssl=/root/openssl-0.9.7
--with-apache=/root/apache_1.3.27
cd /root/apache_1.3.27
./configure --enable-module=ssl
dans le fichier src/main/Makefile modifier CFLAGS=$(OPTIM) $(CFLAGS1)
$(EXTRA_CFLAGS)
par CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS) $(SSL_CFLAGS)
sinon il ne trouve pas les bonnes librairies SSL compilées précédemment
make
make certificate (vous aurez à spécifier
les valeurs du certificat pour apache)
make install
Cette installation n'est valable que pour la toute première installation
que vous faites. En effet, une fois que vous aurez généré
un certificate pour votre CA, et votre serveur web (voir document "Configuration
de la CA et RA avec OpenCA", octobre 2003), il vous faudra créer
trois répertoires (ssl.key, ssl.crt, ssl.crl) ici dans le répertoire
/usr/local/apache/conf/, copier le certificat de votre serveur web dans
le fichier ssl.crt/server.crt et sa clé privée chiffrée
dans le fichier ssl.key/server.key, puis réinstaller mod_ssl et
Apache avec les commandes suivantes :
cd mod_ssl-2.8.14-1.3.27
./configure
--with-ssl=/root/openssl-0.9.7
--with-apache=/root/apache_1.3.27
--with-crt=/usr/local/apache/conf/ssl.crt/server.crt
--with-key=/usr/local/apache/conf/ssl.key/server.key
cd /root/apache_1.3.27
Avant de compiler Apache, changer le fichier http_main.c par celui
fourni à l'adresse http://www-lor.int-evry.fr/~maknavic/CADDISC/SP21/caddiscConfFiles.tar.gz
./configure --enable-module=ssl
dans le fichier src/main/Makefile modifier CFLAGS=$(OPTIM) $(CFLAGS1)
$(EXTRA_CFLAGS)
par CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS) $(SSL_CFLAGS)
sinon il ne trouve pas les bonnes librairies SSL compilées précédemment
make
make certificate TYPE=existing CRT=/usr/local/apache/conf/ssl.crt/server.crt
KEY=/usr/local/apache/conf/ssl.key/server.key
make install
/usr/local/apache/bin/apachectl start
Pour lancer le serveur en mode sécurisé avec SSL :
/usr/local/apache/bin/apachectl startssl
Il vous sera demandé le Pass Phrase utile pour déchiffrer
la clé privée du serveur Apache. Il s'agira donc de donner
le mot de passe rentrer dans OpenCA à la génération
de la clé privée et du certificat du serveur Apache (cf.
la section 3 de [Ver03B]).
Bien entendu, la toute première fois que vous lancerez Apache,
vous utiliserez la commande apachectl start.
Pour stopper le serveur apache :
/usr/local/apache/bin/apachectl stop
Après avoir téléchargé le logiciel OpenCA 0.9.1, effectuez les commandes suivantes :
tar xzf openca-0.9.1.tar.gz
cd openca-0.9.1
./configure
--prefix=/srv/ca
--with-web-host=pivert
--with-httpd-user=nobody
--with-httpd-group=nogroup
--with-dist-user=nobody
--with-dist-group=nogroup
--with-ca-organization=int
--with-ca-locality=evry
--with-ca-country=FR
--with-service-mail-account=pascal.verrecchia@int-evry.fr
--with-openssl-prefix=/usr/local/ssl
--with-mailprogram= "/usr/sbin/sendmail
-t "
--with-hierarchy-level=ca
--enable-db
--with-db-type=berkeley
--with-db-name=openca
--with-db-host=pivert
--with-db-port=1000
(par exemple)
--with-db-user=root
--with-db-passwd=PW_FOR_OPENCAXXX
make
make install-ca
Note : Rappelons pour compréhension que la machine sur laquelle
je travaille est nommée pivert et que le logiciel de gestion des
bases de données choisi pour OpenLDAP et OpenCA est Berkeley.
make
make install-ext
Dans le second cas de figure, le fichier est découpé en
deux parties distinctes. La première permet de configurer le port
80 pour le serveur apache, la seconde, le port 443 (port de SSL).
Dans la première partie, assurez vous que vous avez bien les
données suivantes et si besoin est, modifiez-les :
...
User nobody
Group nogroup
...
ServerAdmin pascal.verrecchia@int-evry.fr
...
ServerName pivert
...
DocumentRoot « /srv/ca/apache/htdocs/ »
...
<Directory « /srv/ca/apache/htdocs/ »>
...
ErrorLog /usr/local/apache/logs/error_log
...
ScriptAlias /cgi-bin/ "/srv/ca/apache/cgi-bin/"
...
<Directory "/srv/ca/apache/cgi-bin">
A partir de ce point, vous avez terminé de configurer votre port
80.
Rajouter dans une condition <IfDefine SSL> les informations :
Listen 443
Port 443
Vous devriez trouver une ligne <VirtualHost _default_:443>
qui précise le début de la configuration de la machine virtuelle
qui correspondra au port 443.
Vérifiez et modifiez le cas échéant les lignes suivantes :
DocumentRoot "/srv/ca/apache/htdocs"
ServerName pivert
ServerAdmin pascal.verrecchia@int-evry.fr
ErrorLog /usr/local/apache/logs/error_log
Vérifiez que la ligne suivante est bien présente et le cas échéant, rajoutez la :
ScriptAlias /cgi-bin/ "/srv/ca/apache/cgi-bin/"
La configuration est maintenant terminée et votre serveur apache
vous permettra de faire fonctionner OpenCA.
- ca_node.conf
- ra_node.conf
- ldap.conf
Attention ! Ces fichiers doivent être accessibles par l'utilisateur
qui lance le serveur Apache.
Notez qu'il est plus facile de se référer directement
aux fichiers de configuration propres à CADDISC et disponibles à
: http://www-lor.int-evry.fr/~maknavic/CADDISC/SP21/caddiscConfFiles.tar.gz
Pour chacun de ces documents les modifications sont identiques :
Vérifiez que les lignes suivantes sont correctement indiquées :
ldap « yes »
ldapserver pivert
ldapport 9009
basedn "o=INT, c=FR"
ldappwd PW_FOR_OPENLDAPXXX
ldapbasedir "/usr/local"
Pour les fichiers ca_node.conf et ra_node.conf, vérifiez également la ligne suivante :
updateLDAPautomatic "yes"
Changez également la version de LDAP utilisé en mettant : ldapversion3 au lieu de ldapversion2.
Mettez la variable suivante à "N" dans les fichiers ca.conf et ra.conf (répertoire /srv/ca/OpenCA/etc/servers/) :
SET_CERTIFICATE_SERIAL_IN_DN "N"
Sur le site web de CADDISC, des exemples de fichiers utilisés à l'INT sont disponibles (http://www-lor.int-evry.fr/~maknavic/CADDISC/SP21/caddiscConfFiles.tar.gz). Ils vous aideront à mettre en place votre propre serveurOpenCA/LDAP.
Différents types de certificat typique sont proposés de base dans OpenCA. Chaque type de certificat possède ses propres fichier de configuration, ce qui permet de simplifier grandement la tâche de l'administrateur. Ces différents types de certificat sont :
- CA (/srv/ca/OpenCA/etc/openssl/ca-openssl.cnf)
. Ne pas oublier de faire pointer dans ca.conf la variable sslconfig sur
ca-openssl.cnf
- RA (/srv/ca/OpenCA/etc/openssl/ra-openssl.cnf).
Ne pas oublier de faire pointer dans ra.conf la variable sslconfig sur
ra-openssl.cnf
- CA_Operator (/srv/ca/OpenCA/etc/openssl/openssl/CA_Operator.conf
et /srv/ca/OpenCA/etc/openssl/extfiles/CA_Operator.ext)
- RA_Operator (/srv/ca/OpenCA/etc/openssl/openssl/RA_Operator.conf
et /srv/ca/OpenCA/etc/openssl/RA_Operator.ext)
- Cross_CA (/srv/ca/OpenCA/etc/openssl/openssl/Cross_CA.conf
et /srv/ca/OpenCA/etc/openssl/Cross_CA.ext)
- Mail_Server (/srv/ca/OpenCA/etc/openssl/openssl/Mail_Server.conf
et /srv/ca/OpenCA/etc/openssl/Mail_Server.ext)
- Sub-CA (/srv/ca/OpenCA/etc/openssl/openssl/Sub_CA.conf
et /srv/ca/OpenCA/etc/openssl/Sub_CA.ext)
- User (/srv/ca/OpenCA/etc/openssl/openssl/User.conf
et /srv/ca/OpenCA/etc/openssl/User.ext)
- VPN_Server (/srv/ca/OpenCA/etc/openssl/openssl/VPN_Server.cnf
et /srv/ca/OpenCA/etc/openssl/VPN_Server.ext)
- Web_Server (/srv/ca/OpenCA/etc/openssl/openssl/Mail_Server.conf
et /srv/ca/OpenCA/etc/openssl/openssl/Web_Server.conf)
Les principaux certificats qui nous intéresserons au sein de CADDISC sont les certificats de la CA, de la RA, des opérateurs de ces deux modules, du User et du serveur Web (pivert pour nous).
Il nous faudra donc modifier ces fichiers de configuration pour que les certificats respectent une certaine nomenclature qui nous sera nécessaire plus en amont de notre travail. Nous devrons modifier les valeurs suivantes qui sont importantes dans le cadre du projet CADDISC :
- issuer
- issuerAltName
- subject
- subjectAltName
- crlDistributionPoints
Vous pourrez trouver la signification de chacun de ces champs dans le document [Mak03A], ainsi que des exemples d'utilisation en fonction des certificats pris en compte. Les exemples de fichiers utilisés à l'INT sont fournis sur la page web de CADDISC (http://www-lor.int-evry.fr/~maknavic/CADDISC/) avec les valeurs à modifier.
Grossièrement, pour la génération de certificat racine, seul le fichier ca-openssl.cnf est utilisé. Pour générer les autres certificats, deux types de fichiers de configuration sont utilisés (.ext et .conf). Le fichier .conf sert à générer une requête de certificat tandis que le fichier .ext sert lors de la génération du certificat. C'est pourquoi, il n'est pas utile de préciser les informations issuerAltName, subjectAltName, crlDistributionPoints dans le fichier .conf.
En particulier, si vous souhaitez mettre une référence
ldap dans les champs issuerAltName ou subjectAltName, la notation suivante
devra être adoptée :
URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA;ou=PKI-CA;o=INT;c=FR?cACertificate?
La partie [v3-ca] ne sert que dans la génération de certificat
auto-signé.http://www-lor.int-evry.fr/~maknavic/CADDISC/
Parcourez un fichier de configuration '.conf' jusqu'à la partie
[v3-ca] (voir dans l'exemple ci-dessous), où il vous faudra faire
les modifications ou les ajouts nécessaires. Vous trouverez ci-dessous
un type de modification possible (donné pour exemple) concernant
en particulier les certificats d'utilisateurs :
issuerAltName=DNS:int-evry.DNSsec,
URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC INT root CA;ou=PKI-CA;o=INT;c=FR?cACertificate?
subjectAltName=Email
N.B : Attention à bien remplacer les "," par des ";" car openssl
interprète le caractère "," .
N.B : pivert est la machine hébergant le serveur LDAP sur le
port 9009
Si par contre vous souhaitez les initialiser à un nom DNSsec,
alors adoptez les notations suivantes :
issuerAltName=DNS:int-evry.caddisc.enst.idsa.prd.fr
subjectAltName=DNS:int-evry.caddisc.enst.idsa.prd.fr
Enfin, une adresse email se présentera de la façon suivante
:
subjectAltName=email:copy
La création des certificats de la CA et de la RA sera présentée au sein d'un document indépendant, qui aura pour objectif de vous diriger dans l'initialisation des CA et RA sous OpenCA qui est assez délicate pour le novice.
Note : Nous considérerons à partir de maintenant que les opérations décrites dans le document en question ont été effectuées.
En ce qui concerne les autres types de certificat cités précédemment, vous pourrez les créer en suivant les étapes suivantes dans OpenCA.
Des exemples de fichier ca-openssl.cnf, User.conf, User.ext sont
fournis sur la page web de CADDISC ().
http://pivert/ca/
puis cliquez sur le lien : Initialization dans la partie CA Management puis sur le lien : Create the initial administrator
Vous pouvez aussi directement lancer l'URL suivante : http://pivert/ca/initUser.html
Cliquez ensuite sur : Create a new request
Remplissez alors les champs adéquats.
Cliquez ensuite sur : Edit the request (où il vous est possible de changer certaines valeurs), puis Issue the request
Votre certificat sera alors créé et sera du type PEM.
Vous pourrez le trouver dans le répertoire : /srv/ca/OpenCA/var/crypto/certs/
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4 (0x4)
Signature Algorithm: sha1WithRSAEncryption
Issuer: emailAddress=pascal.verrecchia@int-evry.fr,CN=INT Root CA,O=INT,C=FR
Validity
Not Before: Jun 15 21:33:37 2003 GMT
Not After : Jun 14 21:33:37 2004 GMT
Subject: serialNumber=4,CN=Jackie Chan,OU=LOR,O=INT,C=FR
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c7:3e:4d:f7:b9:1e:61:31:71:d4:c8:4a:08:73:
13:9a:93:19:84:9b:d8:f6:59:a1:03:a6:1e:4a:21:
14:d0:27:11:9b:4f:a4:dd:95:c7:e9:b1:d6:1e:94:
45:a0:34:ff:e5:c1:1d:8a:a0:0a:42:41:42:a5:ee:
af:71:f4:54:89:d1:0a:41:10:dc:bb:9d:36:94:6e:
94:cb:0c:c3:f3:68:72:33:cd:8f:bd:10:d4:ca:39:
16:9d:1e:39:ea:30:63:66:e2:45:e1:d4:68:47:84:
9c:f6:89:1e:a6:5b:18:7a:f2:43:d9:79:75:9a:7e:
e7:fe:a9:a8:2b:7e:f3:ec:f1
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Client, S/MIME
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication, E-mail
Protection, Microsoft Smartcardlogin
Netscape Comment:
User Certificate of INT
X509v3 Subject Key Identifier:
E6:8B:69:13:C3:37:E6:B4:83:61:78:AA:6F:D3:E2:21:BA:68:86:95
X509v3 Authority Key Identifier:
keyid:01:9A:D6:1D:74:BF:21:E9:42:E1:A7:4A:55:B0:16:0C:90:54:12:A6
DirName:/C=FR/O=INT/CN=INT Root CA/emailAddress=pascal.verrecchia@int-evry.fr
serial:00
X509v3 Subject Alternative Name:
email:jackie.chan@int-evry.fr
X509v3 Issuer Alternative Name:
issuerAltName=DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate
Netscape CA Revocation Url:
https://pivert.int-evry.fr/pub/crl/cacrl.crl
Netscape Revocation Url:
https://pivert.int-evry.fr/pub/crl/cacrl.crl
X509v3 CRL Distribution Points:
URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR?certificateRevocationList
Signature Algorithm: sha1WithRSAEncryption
95:c0:47:ca:b5:ba:2a:b4:3d:08:e9:87:40:8f:ea:3d:a3:85:
d6:55:a7:83:f6:fd:09:88:2a:ae:02:ed:67:55:ac:49:a3:ce:
ea:f2:80:61:b7:aa:b1:98:83:3f:35:d2:cf:86:c0:8b:15:50:
44:5a:a7:89:bf:0f:7a:9a:f4:c3:f0:45:b6:20:4d:0a:3f:e5:
e7:ec:ba:48:bf:ae:67:e5:20:7b:fa:e5:b3:44:06:a8:e7:c5:
f5:d7:7f:76:18:0a:5e:21:b6:12:49:c6:f2:ce:67:bd:28:74:
64:a4:6e:18:ce:40:3d:de:48:86:83:59:a4:3d:85:d7:af:39:
20:34:0f:9b:b6:85:bf:77:d1:68:f3:37:b4:70:72:2e:4b:31:
17:64:03:bf:6d:ff:63:62:8d:4b:b7:25:e0:e6:61:b8:1b:a8:
3a:f0:0c:43:93:4f:57:df:30:4a:b9:4e:d0:84:99:f4:d9:57:
7e:98:2a:3e:d7:64:5b:a8:ef:3b:e3:0c:09:5d:6b:1b:e9:db:
13:99:83:82:55:3a:85:7e:7e:96:d4:0a:e7:99:e8:d6:2b:b0:
f5:c8:90:30:19:f9:6a:3c:e9:c9:be:9e:03:a5:5c:15:1f:7e:
7a:08:5d:f3:15:9a:7e:99:c2:c5:0f:9f:57:88:9c:9c:d7:9d:
fe:46:1b:d6