OpenSSL 0.9.8r, compilation sur Sun Solaris 10 x86

Logo

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.