Documentation : Partie serveur de IRC SSL certifié
Date de publication : 18.7.2004
Date de modification : 17.2.2005
|
|
But du document
Le but de ce document est de mettre en place l'interface serveur du projet IRC SSL.
Pré-requis
Un serveur sous Linux
OpenSSL, Stunnel, IRCD
Mise en condition :
Premièrement nous allons créer l'autorité de certification qui nous permettra de valider les demandes de certificats.
Deuxièmement, nous allons validé ou non une demande de certificat.
Enfin, nous allons mettre en place un tunneling ssl, avec le logiciel stunnel, pour authentifié les certificats et crypté toutes les communications.
Ci-dessous un petit descriptif de la procédure utilisé pour le tunneling irc.
Création de l'autorité de certification sous linux
Pour pouvoir certifié des certificats, il vous faut tout d'abord créer une autorité de certification.
Pour cela, nous allons utiliser CA.pl écris par Steve Hanson et fournis avec OpenSSL.
Créer tout d'abord un dossier dans lequel vous aller traiter l'autorité de certification.
shell > mkdir /usr/local/ircssl
Rendez-vous dans ce dossier
shell > cd /usr/local/ircssl
Pour créer un l'autorité de certification, il vous suffit de lancer :
shell > /usr/local/ssl/misc/CA.pl -newca
Information tirée du man CA.pl(1)
|
CA certificate filename (or enter to create)
Taper sur entrée
Making CA certificate ...
Using configuration from /usr/ssl/openssl.cnf
Generating a 1024 bit RSA private key
...........................++++++
............................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase:
Comme on peut le voir, la demande de création d'une autorité de certificat va créer un clé privée, qui a comme paramètre de configuration par défault openssl.cnf, une clé RSA de 1024 bit et qui sont déposé dans le répertoire demoCA.
Entrer le mot de passe que vous choisissez pour votre clé privé d'autorité de certificat.
Verifying password - Enter PEM pass phrase:
Retaper le mot de passe choisit pour confirmer
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
Entrer le code du pays dans lequel vous résidez.
Pour moi le Luxembourg, donc LU
State or Province Name (full name) [Some-State]:
Nom de l'Etat ou de la province ou vous résidez.
Pour moi Luxembourg :)
Locality Name (eg, city) []:
Nom de la ville dans laquelle vous résidez.
Toujours Luxembourg ;)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Nom de l'organisation pour laquelle vous voulez créer cette clé privée.
Ici ZATAZ.net
Organizational Unit Name (eg, section) []:
Nom du département dans lequel vous travaillez.
ZATAZssl
Common Name (eg, YOUR name) []:
Votre nom ou nickname
Ici wow
Email Address []:
Votre adresse email
Ici wow@zataz.net
Vous voilà avec maitenant un répertoire demoCA dans le répertoire ircssl
drwxr-xr-x 6 root root 4096 Feb 18 01:20 demoCA
Ce répertoire contient ces fichiers suivants :
-rw-r--r-- 1 root root 1285 Feb 18 01:20 cacert.pem
drwxr-xr-x 2 root root 4096 Feb 18 01:16 certs
drwxr-xr-x 2 root root 4096 Feb 18 01:16 crl
-rw-r--r-- 1 root root 0 Feb 18 01:16 index.txt
drwxr-xr-x 2 root root 4096 Feb 18 01:16 newcerts
drwxr-xr-x 2 root root 4096 Feb 18 01:16 private
-rw-r--r-- 1 root root 3 Feb 18 01:16 serial
Créer un répertoire pour tous les certificats acceptés.
shell > mkdir accepted_certs
Et voila le tour est joué, il vous faut maitenant attendre les demandes de certificats pour les approuvés ou les rejeter.
Validation d'une demande de certificat
Lors d'une demande de certificat, vous devez recevoir un fichier du type newreq.pem dont le contenu devrait ressembler à cela :
-----BEGIN CERTIFICATE REQUEST-----
MIIB0TCCAToCAQAwgZAxCzAJBgNVBAYTAkxVMRMwEQYDVQQIEwpMdXhlbWJvdXJn
MRMwEQYDVQQHEwpMdXhlbWJvdXJnMRIwEAYDVQQKEwlaYXRhei5uZXQxEzARBgNV
BAsTCnRlc3Qgc3RhZmYxDjAMBgNVBAMTBXdPdzJrMR4wHAYJKoZIhvcNAQkBFg93
b3cya0B6YXRhei5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK7Sz6im
0wpZr693zY1+NIjdBXCB3dsisqgbIfw2915yvyq9edHVxguDEGSWOFID4p8aWW/f
4xuy9Ro/e9Vxg9jINrzddfdfdfdfdfdfdPHm4RB37kkoJ3DZB+PpEru+HkUlLVJ/
cXdsjypIkUz69GCwEj/kccfV1/6xkgCKxfyxAgMBAAGgADANBgkqhkiG9w0BAQQF
AAOBgQCStGhnw3ZosXXDUWRd4NZTxtkmX3S6PnUPKD4UWjVma1DtZAzqhsoRHTsc
uWPE2ET8iNHUmxCd2ucCyXnPE5T2588EsKBYEzdcGXznxS1aAbcdBTY9w0KBlfZU
HgCOVZ+HNKgAu3LmTHiklU64gt7dGZ/EJiEBo8omawin4ZOqjg==
-----END CERTIFICATE REQUEST-----
déposer ce fichier dans le répertoire ircssl
Pour le valider, si tel est votre intention, exécuter la commande suivante :
shell > /usr/local/ssl/misc/CA.pl -sign
L'option -sign vous permet de signer un certificat.
Using configuration from /usr/ssl/openssl.cnf
Enter PEM pass phrase:
Entrer votre mot de passe de certificateur.
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'LU'
stateOrProvinceName :PRINTABLE:'Luxembourg'
localityName :PRINTABLE:'Luxembourg'
organizationName :PRINTABLE:'ZATAZ.net'
organizationalUnitName:PRINTABLE:'ZATAZssl'
commonName :PRINTABLE:'wow'
emailAddress :IA5STRING:'wow@zataz.net'
Certificate is to be certified until Feb 18 00:46:50 2003 GMT (365 days)
Sign the certificate? [y/n]:
Valider oui ou non la demande de certificat.
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Signed certificate is in newcert.pem
Vous voila donc avec un nouveau certificat newcert.pem que vous allez pouvoir retourner à l'utilisateur.
Maintenant vous allez pouvoir hasher le certificat pour l'intégrer au certificat autoriser à se connecter.
Taper la commande ci-dessous.
shell > openssl x509 -hash -noout -in newcert.pem
L'option -hash permet de sortir le hash du certificat.
Ceci est utilisé par OpenSSL pour indexer les certificats dans un répertoire.
La sortie sera par exemple :
b6ebe1c3
Copier le nouveau certificat newcert.pem dans le répertoire demoCA/accepted_certs/ avec le nom du hash
shell > cp newcert.pem demoCA/accepted_certs/b6ebe1c3.0
Retourner le certificat certifié de votre part à l'utilisateur concerné.
Mise en place de stunnel avec certification pour accès IRC SSL
Lancer le serveur IRC sur le port 6667, qui n'est pas accessible de l'extérieur.
Ouvrer un port quelconque, genre 7648, pour permetre la connexion extérieur.
Lancer la connexion stunnel de la façon ci-dessous :
shell > stunnel -v 3 -A /usr/local/ircssl/demoCA/cacert.pem -a /usr/local/ircssl/demoCA/accepted_certs -p /etc/stunnel/stunnel.pem -P /tmp/ -d 7648 -r 6667
Et voilà le tour est joué ;)
Contributeur : Eric Romang