Introduction
OpenSSL est une boîte à outils Open Source offrant les protocoles SSL v2/v3 (Secure Socket Layers) et TLS v1 (Transport Layer Security) ainsi qu’une bibliothèque de cryptographie (Open SSL Crypto).
Les protocoles SSL et TLS sont des protocoles de sécurisation des échanges réseaux (internet ou intranet). Le protocole Secure Socket Layer (SSL) a été renommé en Transport Layer Security (TLS) après des achats de brevets. SSL v3 et TLS v1 diffèrent très peu, TLS v1 correspond en fait à la version 3.1 du protocole SSL. TLS diffère de SSL seulement dans la génération des clés symétriques. Les protocoles SSL/TLS offrent notamment l’authentification client/serveur avec des clés, la confidentialité des données avec un chiffrement des échanges, l’intégrité des données échangées.
De très nombreux produits, open source ou non, exploitent les protocoles SSL/TLS, par exemple :
- Serveurs et clients LDAP (OpenLDAP).
- Serveur Web Apache.
- PostgreSQL.
- cURL.
- PHP, Python, Ruby…
OpenSSL est donc une des première couches basses à installer pour la compilation et l’installation de produits dépendants de cette couche sur les plateformes Unix/Linux.
Cet article présente donc la compilation de la couche OpenSSL 0.9.8r en 64
bits avec SunStudio 12.1 sur une plateforme Solaris 10 x86 64 bits, pour plus
d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations. Une description très sommaire de
l’arborescence OpenSSL est également proposée pour une première prise en main
rapide (fichier de configuration openssl.cnf, openssl, CA.pl…) sans aller
toutefois jusqu’à la création de certificats, ce n’est pas le propos ici.
Téléchargement
OpenSSL 0.9.8r est disponible en téléchargement sous la forme d’une archive compressée (openssl-0.9.8r.tar.gz) à cette adresse : OpenSSL > Source.
L’archive openssl-0.9.8r.tar.gz est envoyée avec ftp sur la machine cible
dans le répertoire /Software/tools/temp puis décompressée avec l’utilitaire
gunzip
% cd /Software/tools/temp
% gunzip openssl-0.9.8r.tar.gz
Le code source est alors désarchivé avec la commande tar dans le sous
répertoire ./openssl-0.9.8r :
% cd /Software/tools/temp
% tar xvf openssl-0.9.8r.tar
Préparation de l’environnement pour la compilation d’OpenSSL 0.9.8r avec SunStudio 64 bits
La variable PATH est mise à jour avant la compilation pour référencer
/usr/ccs/bin, répertoire qui contient le binaire ld, indispensable pour la
génération des liens.
% PATH=/usr/ccs/bin:$PATH
% export PATH
Si les liens de SunStudio n’ont pas été installés dans /usr/bin lors de
l’installation, la variable PATH doit référencer également le répertoire
<répertoire de sunstudio 12.1>/bin pour trouver les compilateurs.
% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH
Il s’agit d’une compilation en 64 bits, la variable CFLAGS peut être mise à
jour à -m64 mais cela n’est pas nécessaire, les sources OpenSSL sont en effet
compilées par défaut en 64 bits lorsque le système d’exploitation est en 64
bits. Pour forcer la compilation d’OpenSSL en 32 bits, la variable CFLAGS est
positionnée à -m32.
% CFLAGS=-m64
% export CFLAGS
Compilation d’OpenSSL 0.9.8r
Configuration de la compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS), la
configuration de la compilation peut être déclenchée. L’option --help du script
config renvoie les options de configuration.
% cd /Software/tools/temp/openssl-0.9.8r % ./config --helpConfiguring for solaris64-x86_64-cc Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [enable-montasm] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]
Le fichier INSTALL donne toutes les informations nécessaires sur les options
de compilations avec zlib, etc.
Les options --prefix et --openssldir sont spécifiées ici dans cet article
afin de délocaliser l’installation d’OpenSSL en dehors des répertoires systèmes
/usr.
L’installation des binaires et librairies n’est pas réalisée dans son
répertoire par défaut /usr/local/ssl et dans l’architecture choisie, le
répertoire /Software/tools/misc est le répertoire alternatif à /usr/local : la
configuration est donc réalisée avec l’option --prefix=/Software/tools/misc
(DIR).
L’option --openssldir (OPENSSLDIR) identifie quant à elle le répertoire des
fichiers de configuration propres à OpenSSL : si cette option n’est pas
spécifiée, les fichiers de configuration seront installés dans le répertoire
DIR/ssl.
La ligne de configuration de la compilation est donc la suivante dans cet exemple pratique :
% cd /Software/tools/temp/openssl-0.9.8r
% ./config --prefix=/Software/tools/misc --openssldir=/Software/tools/misc/openssl
La configuration de la compilation n’a pas posé de problème particulier ici.
Compilation et installation
La compilation et l’installation d’OpenSSL 0.9.8 sont réalisées avec les
commandes make et make install.
% cd /Software/tools/temp/openssl-0.9.8r
% make
% make install
Entre la compilation (make) et l’installation (make install), un test peut
être réalisé par précaution avec la commande make test. La sortie est allégée
ici pour la lisibilité.
% cd /Software/tools/temp/openssl-0.9.8r % make test... compiler: cc -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM OPENSSLDIR: "/Software/tools/misc/openssl" `test' is up to date.
À la compilation, des avertissements assez nombreux peuvent être générés :
cc: Warning: -xarch=amd64 is deprecated, use -m64 to create 64-bit programs
Il est envisageable de modifier les fichiers config et Makefile afin de
remplacer l’option de compilation -xarch=amd64 par -m64, options qui indiquent
une compilation en 64 bits, mais c’est optionnel. Sous Sun Solaris 10 avec Sun
Studio 12.1, l’option de compilation -xarch=amd64 est obsolète (deprecated)
mais encore utilisable pour une compilation 64 bits, elle sera définitivement
retirée dans de futures versions.
Quelques mots sur openssl pour une première prise en main
Dans la suite de cet article, DIR correspond au répertoire d’installation
d’OpenSSL (/Software/tools/misc). À la fin de la compilation, l’arborescence
créée pour OpenSSL 0.9.8 est la suivante :
DIR/libDIR/binDIR/opensslDIR/include/openssl
Le répertoire DIR/include/openssl contient tous les fichiers d’entête *.h
(headers) pour OpenSSL 0.9.8r. Ce répertoire devra être inclus dans les options
de compilation des produits dépendants (Apache, OpenLDAP, Python, etc.).
Le fichier de configuration openssl.cnf
La configuration générale d’OpenSSL 0.9.8r est paramétrable dans le fichier
de configuration openssl.cnf créé dans OPENSSLDIR avec la compilation. Le
fichier de configuration openssl.cnf permet de minimiser les informations à
donner lors de l’invocation des utilitaires comme openssl, notamment pour la
création des certificats (répertoires par défaut, nomenclature…).
/Software/tools/misc/openssl/openssl.cnf
...
[ ca ]
default_ca = CA_default # The default ca section
####################################################################
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file
...
L’exécutable openssl
Le programme openssl, créé dans DIR/bin avec la compilation, est un outil en
lignes de commandes très pratique pour diverses opérations (création et gestion
de clés privées et publiques, encryptage et décryptage, tests Client/Serveur
SSL et TLS…). openssl est utilisable en invites de commandes
% opensslOpenSSL>
Mais également en lignes de commandes directe :
% openssl commande [options] [arguments]
Par défaut openssl cherche le fichier de configuration openssl.cnf dans le
répertoire /usr/lib/ssl, ajouter l’option -config
<chemin>/openssl.cnf lors de son utilisation :
% openssl ca -config /Software/tools/misc/openssl/openssl.cnf ...
De nombreuses commandes, options et arguments sont proposés avec openssl
(voir la documentation) : la commande ca gère les certificats (CA).
L’utilitaire CA.pl
Le script Perl CA.pl, installé par défaut dans OPENSSLDIR/misc, permet une
utilisation plus simple du binaire openssl en supprimant la complexité des
arguments et options à donner grâce aux variables d’environnement définies dans
ce script Perl.
% cd /Software/tools/misc/openssl/misc
% CA.pl -?
usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify
Juste un exemple : pour ne plus donner le chemin du fichier de configuration
avec l’option --config, la variable $SSLEAY_CONFIG peut être mise à jour dans
le script CA.pl.
/Software/tools/misc/openssl/misc/CA.pl
#$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
$SSLEAY_CONFIG="-config /Software/tools/misc/openssl/openssl.cnf";...
$REQ="$openssl req $SSLEAY_CONFIG";
$CA="$openssl ca $SSLEAY_CONFIG";
...
C’est un exemple parmi d’autres de personnalisations et simplifications
possibles grâce au script CA.pl.