Vous êtes ici : Accueil Debian GNU/Linux Serveurs HTTP Créer un certificat SSL / TLS sur Debian

Créer un certificat SSL / TLS sur Debian

Par Pierre-Yves Landuré Dernière modification 15/05/2012 15:20

Créer un certificat SSL est une étape cruciale de la mise en place d'une connexion chiffrée. Que ce soit pour mettre en place le protocole HTTPS, pour chiffrer votre serveur IMAP, ou votre serveur FTP, ce guide vous aide à générer un certificat SSL valide.

Ce guide est testé sur:

  • Debian 5.0 Squeeze
  • Debian 6.0 Lenny

Pré-requis

Ce guide nécessite l'installation du paquet openssl:

command apt-get install openssl ssl-cert

Ce guide recommande la mise en place de notifications d'expiration des certificats SSL/TLS, comme proposé dans le guide Mettre en place une notification par email de l'expiration des certificats SSL / TLS.

Créez les dossiers destinés à contenir le certificat:

command mkdir --parent '/etc/ssl/private'
command mkdir --parent '/etc/ssl/requests'
command mkdir --parent '/etc/ssl/roots'
command mkdir --parent '/etc/ssl/chains'
command mkdir --parent '/etc/ssl/certificates'

Assurez-vous que le groupe système "ssl-cert" existe:

command addgroup --system 'ssl-cert'

Modifiez les permissions du dossier destiné à contenir les clefs SSL privées:

command chown -R root:ssl-cert '/etc/ssl/private'
command chmod 710 '/etc/ssl/private'
command chmod 440 '/etc/ssl/private/'*

Création d'un certificat SSL / TLS pour réseau local

Paramètres

Renseignez le nom de domaine complet (y compris le sous-domaine) pour lequel vous générez un certificat:

DOMAIN="$(command hostname --fqdn)"

Création du certificat auto-signé

Utilisez l'outil make-ssl-cert fourni par Debian pour créer un certificat auto-signé pour votre serveur local (remplacez la valeur graissée par le nom du serveur sur le réseau local):

CONF_FILE="$(command mktemp)"
command sed \
-e "s/@HostName@/${DOMAIN}/" \
-e "s|privkey.pem|/etc/ssl/private/${DOMAIN}.pem|" \
'/usr/share/ssl-cert/ssleay.cnf' > "${CONF_FILE}"
command openssl req -config "${CONF_FILE}" -new -x509 -days 3650 \
 -nodes -out "/etc/ssl/certificates/${DOMAIN}.crt" -keyout "/etc/ssl/private/${DOMAIN}.key"
command rm "${CONF_FILE}"

Dans le formulaire présenté par cette commande, saisissez le nom du serveur sur le réseau local.

Cette méthode peut être utilisé pour créer un certificat SSL non valide pour un site Internet. L'utilisation de certificats auto-signé entraîne l'affichage de messages d'erreurs dans les navigateurs.

Création d'un certificat SSL / TLS pour Internet

Paramètres

Renseignez le nom de domaine complet (y compris le sous-domaine) pour lequel vous générez un certificat (gratuit avec l'autorité StartSSL):

DOMAIN="www.domain.com"

Remarque: Pour générer un certificat SSL valide pour tous les sous-domaine d'un domaine (dit certificat Wildcard), remplacez la partie destinée au sous-domaine par "*" (coût du certificat Wildcard: US $ 59.90 avec l'autorité StartSSL):

DOMAIN="*.domain.com"

Informations personnelles

Certaines informations personnelles sont nécessaires pour la création d'un certificat SSL. Chargez ces informations si elles sont déjà présentes:

if [ -e '/etc/ssl/csr-informations' ]; then
    source '/etc/ssl/csr-informations'
cat '/etc/ssl/csr-informations'
else
    echo "#####################
Error: No SSL informations available."
fi

Si la commande précédente affiche une erreur, ou si les informations chargées ne vous conviennent pas, mettez à jour les données:

Renseignez votre code pays (ajustez la valeur graissée):

SSL_COUNTRY="fr"

Renseignez votre région / département (ajustez la valeur graissée):

SSL_PROVINCE="Ile-de-France"

Renseignez votre ville (ajustez la valeur graissée):

SSL_CITY="Paris"

Renseignez votre adresse e-mail (ajustez la valeur graissée):

SSL_EMAIL="user@some-domain.com"

Enregistrez ces informations dans un fichier de configuration pour utilisation ultérieure:

echo "# SSL CSR informations.
SSL_COUNTRY=\"${SSL_COUNTRY}\"
SSL_PROVINCE=\"${SSL_PROVINCE}\"
SSL_CITY=\"${SSL_CITY}\"
SSL_EMAIL=\"${SSL_EMAIL}\"" \
> '/etc/ssl/csr-informations'

Création de la clef privée

Générez la clef privée RSA, d'une longueur de 2048 bits:

command openssl genrsa -out "/etc/ssl/private/${DOMAIN}.key" 2048

Protégez la clef privée:

command chown root:ssl-cert "/etc/ssl/private/${DOMAIN}.key"
command chmod 440 "/etc/ssl/private/${DOMAIN}.key"

Création de la Certificate Signing Request (CSR)

La requête de signature de certificat est l'élément envoyé à l'autorité de certification pour demander la signature (cad. la vérification) de votre certificat SSL. Il est important de ne pas faire d'erreur dans sa création, sous peine de la voir rejetée. Pour plus d'information, référez vous à l'article Wikipedia: Certificate signing request.

Préparez les informations de création de la CSR:

echo "${SSL_COUNTRY}
${SSL_PROVINCE}
${SSL_CITY}
${DOMAIN}

${DOMAIN}
${SSL_EMAIL}

" > "/tmp/${DOMAIN}.conf"

Créez la CSR:

command openssl req -new \
-key "/etc/ssl/private/${DOMAIN}.key" \
-out "/etc/ssl/requests/${DOMAIN}.csr" \
< "/tmp/${DOMAIN}.conf"

Supprimez le fichier de configuration de la CSR:

command rm "/tmp/${DOMAIN}.conf"

Affichez la CSR:

cat "/etc/ssl/requests/${DOMAIN}.csr"

Le résultat de cette commande doit ressembler à:

-----BEGIN CERTIFICATE REQUEST-----
MIIC3DCCAcQCADKZgZYOEzAJBgNVBAYAXODfRYwFAYDVQQIEw1JKJDfZGUtRnJh
..... .... ....
N4QtCKIq9ZsP+FjK+h5f7Q==
-----END CERTIFICATE REQUEST-----

Obtention de la clef publique

La clef publique est obtenue auprès d'une autorité de certification. Si vous n'avez pas de préférence, vous pouvez utiliser l'autorité de certification StartSSL.

Une fois inscrit et votre domaine validé auprès de l'autorité, demandez la validation de la CSR affiché par:

cat "/etc/ssl/requests/${DOMAIN}.csr"

Pour l'autorité de certification StartSSL, la procédure de validation se trouve dans l'onglet "Certificate Wizard" de votre compte.

Une fois la clef publique obtenue, copiez/collez la dans la variable Shell SSL_CERT (remplacez la valeur graissée par votre clef publique):

SSL_CERT="-----BEGIN CERTIFICATE-----
MIIHJzCCBg+gAwIBAgIDBNzOMXAXCDRTSIKDOWQBBQUAAGEOMMQscZfGLDVQQGEwJJ
.... .... .....
H5LYbXPAq3DpOzs=
-----END CERTIFICATE-----
"

Créez le fichier de la clef publique:

echo "${SSL_CERT}" > "/etc/ssl/certificates/${DOMAIN}.crt"

Si vous avez choisi l'autorité StartSSL, téléchargez les certificats racine et intermédiaire de cette autorité:

command wget "http://www.startssl.com/certs/ca.pem" \
 --output-document="/etc/ssl/roots/startssl-root.ca"
command wget "http://www.startssl.com/certs/sub.class1.server.ca.pem" \
  --output-document="/etc/ssl/chains/startssl-sub.class1.server.ca.pem"
command wget "http://www.startssl.com/certs/sub.class2.server.ca.pem" \
  --output-document="/etc/ssl/chains/startssl-sub.class2.server.ca.pem"
command wget "http://www.startssl.com/certs/sub.class3.server.ca.pem" \
--output-document="/etc/ssl/chains/startssl-sub.class3.server.ca.pem"

Si vous avez choisi l'autorité StartSSL, installez le certificat racine de cette autorité:

command ln -s "/etc/ssl/roots/startssl-root.ca" "/etc/ssl/roots/${DOMAIN}-root.ca"

Si vous avez choisi l'autorité StartSSL, téléchargez le certificat intermédiaire adapté à votre certificat SSL:

if [ "${DOMAIN}" = "$(echo "${DOMAIN}" | command tr '*' '.')" ]; then
command ln -s "/etc/ssl/chains/startssl-sub.class1.server.ca.pem" "/etc/ssl/chains/${DOMAIN}.ca"
else
command ln -s "/etc/ssl/chains/startssl-sub.class2.server.ca.pem" "/etc/ssl/chains/${DOMAIN}.ca"
fi

Créez un fichier regroupant les certificats publique, intermédiaire et racine pour utilisation par les applications n'ayant pas les options de configuration nécessaires:

command cp "/etc/ssl/certificates/${DOMAIN}.crt" "/etc/ssl/certificates/${DOMAIN}.crt+chain+root"
command cat "/etc/ssl/chains/${DOMAIN}.ca" >> "/etc/ssl/certificates/${DOMAIN}.crt+chain+root"
command cat "/etc/ssl/roots/${DOMAIN}-root.ca" >> "/etc/ssl/certificates/${DOMAIN}.crt+chain+root"

Le certificat est maintenant utilisable par vos serveurs HTTP, IMAP, FTP, etc... Affichez les noms de fichier des clefs le composant:

echo "Clef privée :        \"/etc/ssl/private/${DOMAIN}.key\"
Certificat racine : \"/etc/ssl/roots/${DOMAIN}-root.ca\"
Certificat intermédiaire : \"/etc/ssl/chains/${DOMAIN}.ca\"
Clef publique : \"/etc/ssl/certificates/${DOMAIN}.crt\""

Autoriser l'utilisation des certificat SSL / TLS

Si le logiciel serveur démarre avec des permissions autre que "root" (c'est le cas d'Exim 4), ajoutez l'utilisateur du serveur au groupe "ssl-cert". Par exemple, pour Exim 4:

command adduser Debian-exim ssl-cert

Références

Ces livres peuvent vous aider:

Remerciements

Merci d'aider à faire vivre ce site.

Assistance téléphonique

08 99 19 80 13

du lundi au samedi, de 10h à 18h

1,34€ ttc/appel + 0,34€ ttc/minute.