« Installation et configuration d'un serveur http apache 2.2 » : différence entre les versions

Aller à la navigation Aller à la recherche
Ligne 285 : Ligne 285 :
Il est cependant possible de sécuriser plusieurs sites différents avec le même certificat ssl en utilisant la directive <code>subjectAltName</code> lors de la génération du certificat. Cela règlera les problèmes d'alertes sur tous les navigateur conforme à la RFC 2818 ("HTTP Over TLS").
Il est cependant possible de sécuriser plusieurs sites différents avec le même certificat ssl en utilisant la directive <code>subjectAltName</code> lors de la génération du certificat. Cela règlera les problèmes d'alertes sur tous les navigateur conforme à la RFC 2818 ("HTTP Over TLS").
A titre d'information il est possible de contourner ce problème avec le module gnutls : http://www.gcu.info/2399/2007/09/03/george-met-ssl-a-gnou/ http://www.g-loaded.eu/2007/08/10/ssl-enabled-name-based-apache-virtual-hosts-with-mod_gnutls/
A titre d'information il est possible de contourner ce problème avec le module gnutls : http://www.gcu.info/2399/2007/09/03/george-met-ssl-a-gnou/ http://www.g-loaded.eu/2007/08/10/ssl-enabled-name-based-apache-virtual-hosts-with-mod_gnutls/
==Génération du certificat ssl==
Nous allons supposer que vous avez créé votre propre autorité de certification. Vous pouvez suivre mon howto sur openssl si vous ne disposez pas d'autorité de certification.
Éditez votre fichier <code>/etc/ssl/openssl.cnf</code> et ajoutez les lignes suivantes :
<pre>
[APACHE]
nsComment                      = "CORE Apache Server"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
subjectAltName                  = DNS:www.csnu.org, DNS:webmail.csnu.org
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth
</pre>
Nous allons maintenant générer les clés publics et privés de notre certificat. Si vous connaissez un peu openssl vous devez savoir qu'il est possible de verrouiller les clés avec une passphrase. Apache2 supporte ce mécanisme mais cela empêchera apache2 de se lancer tout seul lors d'un redémarrage. A vous de choisir entre sécurité et disponibilité.
Pour générer votre certificat ssl chiffré avec une passphrase puis le signer par votre autorité :
<pre>
cd /etc/ssl/core_ca
openssl req -config /etc/ssl/openssl.cnf -newkey rsa:2048 -keyout www.csnu.org.key -out www.csnu.org.req
openssl ca -config /etc/ssl/openssl.cnf -name core_ca -extensions APACHE -in www.csnu.org.req -out www.csnu.org.pem
chmod -R 600 /etc/ssl/core_ca/
</pre>
Si vous ne souhaitez pas chiffrer le certificat avec une passphrase ajoutez l'argument <code>-nodes</code> à la première ligne.
Répondez aux différentes questions posées par openssl. La plupart sont assez triviales. Attention toutefois : <code>Common Name</code> doit être l'adresse principale de votre site (<code>www.csnu.org</code> dans mon cas).
Il est préférable de déplacer le certificat dans le dossier root de apache2:
<pre>
mkdir /etc/apache2/ssl/
mv www.csnu.org.* /etc/apache2/ssl/
chown -R root:root /etc/apache2/ssl/
chmod -R 600 /etc/apache2/ssl/
</pre>
Enfin, nous allons créer un fichier contenant la chaine de certification :
<pre>
cat /etc/ssl/root_ca/root_ca.pem > /etc/apache2/ssl/ca_chain.pem
cat /etc/ssl/core_ca/core_ca.pem >> /etc/apache2/ssl/ca_chain.pem
</pre>
Apache enverra ce fichier aux clients souhaitant se connecter en https. Ainsi, même si le navigateur du client n'a que le certificat root_ca.pem dans sa liste de confiance, le certificat établit pour apache sera validé car le client recevra tous les certificats de la chaine (root_ca.pem > core_ca.pem > www.csnu.org.pem) : le client sera certain que la chaine est complètement valide.
==Mise en place des sites==
Activez le module ssl de apache2:
<pre>a2enmod ssl</pre>
Ajoutez la ligne suivante dans <code>/etc/apache2/apache2.conf<code> après <code>Include vhosts/core.csnu.org.conf.default</code> mais avant <code>Include vhosts/*.conf</code> :
<pre>Include vhosts/csnu.org.conf.default</pre>
Cette ligne doit a tout prix être placé à cet endroit. C'est la vhost ssl par défaut dans laquelle on charge le certificat ssl. Si elle est placée après le <code>Include</code> chargeant les autres vhosts, si l'une de ces vhosts est configuré en ssl, apache2 ne démarrera pas.
Créez le fichier <code>/etc/apache2/vhosts/csnu.org.conf.default</code> et ajoutez y ceci :
<pre><nowiki>
#Certificat SSL
#SSLCACertificateFile
SSLCertificateChainFile /etc/apache2/ssl/ca_chain.pem
SSLCertificateFile /etc/apache2/ssl/www.csnu.org.pem
SSLCertificateKeyFile "/etc/apache2/ssl/www.csnu.org.key"
<VirtualHost 91.121.60.127:80>
        ServerName www.csnu.org
        ServerAlias csnu.org
        Include sites/csnu.org.conf
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::127]:80>
        ServerName www.csnu.org
        ServerAlias csnu.org
        Include sites/csnu.org.conf
</VirtualHost>
<VirtualHost 91.121.60.127:443>
        SSLEngine on
        SSLProtocol All
        SSLCipherSuite MEDIUM:HIGH
        ServerName www.csnu.org
        ServerAlias csnu.org
        Include sites/csnu.org.conf
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::127]:443>
        SSLEngine on
        SSLProtocol All
        SSLCipherSuite MEDIUM:HIGH
        ServerName www.csnu.org
        ServerAlias csnu.org
        Include sites/csnu.org.conf
</VirtualHost>
</nowiki></pre>
4 231

modifications

Menu de navigation