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 --help
Configuring 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/lib
DIR/bin
DIR/openssl
DIR/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
% openssl
OpenSSL>
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
.