Pré-requis:

Avoir un nom de domaine (Nom de domaine gratuit)
Pouvoir créer des sous-domaines
Pouvoir faire une redirection mail sur votre registar

Changelog:

Mise en place du www
Reconnaissance du certificat par PC
Redirection automatique du http vers le https
Création & mise en place sur le serveur d'un certificat 256 bits
Tuto 100% raccord avec le script d'Ex_rat

Bonus:
Mise en place du HSTS
Mise en place de l'anti-framing

Note: rapportez les bugs et suggestion dans ce topic: http://mondedie.fr/d/5400

Introduction:

Lors de la création de votre seedbox, vous créez un certificat SSL auto-signé. Mais avec ce certificat, le navigateur affichera un message d'avertissement indiquant que le certificat n’est pas approuvé et qu’il n’est pas conseillé de continuer. Vous pouvez bien évidement acheter un certificat SSL pour ceux qui le souhaitent je conseille RapidSSL (il ne sont pas trop chers) mais vous pouvez aussi en obtenir un gratuitement via le site CAcert. Dans ce tuto, nous allons apprendre comment mettre en place un certificat SSL signé par un organisme de certification et obtenu gratuitement (CAcert). Je passerai bien évidement sur l'étape d'inscription sur le site. Pour info vous devez procéder à une vérification de votre identité, nom de domaine, et adresse mail. Je vous conseille vivement d'effectuer une redirection mail (postmaster@votre-domaine vers votre adresse mail). Cette redirection s'effectue dans le panneau d'administration de votre registar.

Chaque commentaire correspond à un tutoriel:

  • #1 > Introduction & mise en place du certificat sur le PC

  • #2 > Mise en place d'un certificat SSL signé par CAcert sur URI

  • #3 > Mise en place d'un certificat SSL signé par CAcert sur sous-domaines

  • #4 > Bonus

Commençons par ajouter le certificat racine sur notre ordinateurs:

Windows:

Rien de plus simple, il suffit de télécharger et d'installer ceci
Vous pouvez également les ajouter manuellement en double cliquant sur les fichiers.

Debian/Ubuntu:

Ouvrez le terminal et tapez:

sudo apt-get install ca-certificates

Puis:

  • Rendez-vous sur le site de CAcert

  • Cliquez sur "certificat racine"

  • Cliquez sur les certificats pour les ajouter à votre navigateur.

Mac OS

Clé PKI de classe 1 (certificat racine)
Clé PKI de classe 3 (certificat intermédiaire)

  • Double cliquez sur le fichier root.crt

  • Le trousseaux d'accès s'ouvre

  • Approuvez le certificat en cliquant sur toujours approuver

  • enfin cliquez sur mettre à jour les réglages

Faites de même pour le certificat class3.crt

Pour ajouter les certificats sur d'autres OS, rendez-vous ici

un mois plus tard
Mise en place d'un certificat SSL signé par CAcert sur un URI

1ère partie: Mise en place de la redirection automatique pour l'URI:

Pour activer la redirection https automatique sur votre site il suffit de procéder comme suit:
su root
Puis:
nano /etc/nginx/sites-enabled/rutorrent.conf
Et remplacez:
server {
    listen 80 default_server;
    listen 443 default_server ssl;
    server_name _;
par:
server {
     listen 80;
     server_name <votre domaine> www.<votre domaine>;
     return 301  https://www.<votre domaine>$request_uri;
}

server {
     listen 443 default_server ssl;
     server_name www.<votre domaine> <votre domaine>;
     if ($host !~* ^www\.){
     rewrite ^(.*)$ https://www.<votre domaine>$1;
}

2ème partie: Mise en place d'un certificat signé par un organisme de certification:

Désormais, il va falloir s'inscrire sur CAcert.
Faites vérifier votre identité,nom de domaine et adresse mail.

Commençons par supprimer le certificat et la clé précédemment créés. Pour ce faire :
rm /etc/nginx/ssl/server.key && rm /etc/nginx/ssl/server.crt
Plaçons nous dans le bon répertoire:
cd /etc/nginx/ssl/
Puis nous allons en créer une nouvelle clé:
openssl genrsa -aes256 -out /etc/nginx/ssl/secure.pem 4096
Entrez le PEM pass, ne l'oubliez pas elle vous sera redemandée. Retapez le pour la valider

ATTENTION: BIEN REMPLACER <VOTRE DOMAINE> PAR LE NOM DE VOTRE SITE SANS L'EXTENSION (EXEMPLE.FR DEVIENDRA EXEMPLE)

On supprime le PEM pass phrase:
openssl rsa -in /etc/nginx/ssl/secure.pem -out /etc/nginx/ssl/key.pem
On va créer une demande de certificat serveur :
openssl req -sha256 -new -key /etc/nginx/ssl/key.pem -out /etc/nginx/ssl/<votre domaine>.csr
Remplissez comme suit:
Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: FRANCE
Locality Name (eg, city) []: VILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Le nom du site sans l'extension du nom de domaine
Organizational Unit Name (eg, section) []: domaine du site exemple : marketing ou internet
Common Name (e.g. server FQDN or YOUR name) []: www.<votre domaine>
Email Address []: la redirection mail que l'on a fait précédemment : postmaster@votre domaine

A challenge password []: Laissez vide
An optional company name []: Laissez vide
Il faut maintenant afficher la clé que l'on vient de créer pour l'envoyer à l'organisme de certification.
cat /etc/nginx/ssl/<votre domaine>.csr
vous devriez voir apparaitre sur le terminal quelque chose comme ça
-----BEGIN CERTIFICATE REQUEST-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE REQUEST-----
Copie de la clé chez CAcert après création du compte et validation de votre identité etc.
  • Cliquez sur certificat serveur (à droite de la page) puis cliquez sur nouveau
  • Entrez votre clé et validez.
  • Il va vous en redonner une nouvelle.
Une fois que vous avez votre nouvelles clé, il va falloir l'enregistrer au format .pem.
nano /etc/nginx/ssl/<votre domaine>.pem
et copiez votre nouvelle clé.

On applique les droits :
chmod 400 /etc/nginx/ssl/key.pem
chown root:root /etc/nginx/ssl/key.pem
il nous faut maintenant télécharger les ''certificats racines''.
cd /etc/nginx/ssl/
wget https://www.cacert.org/certs/root.crt
wget https://www.cacert.org/certs/class3.crt
Nous avons tous les fichiers nécessaires sur notre serveur.

Faisons un fichier All In One :
cat <votre domaine>.pem root.crt class3.crt > <votre domaine>_chain.pem
Faisons le ménage:
cd /etc/nginx/ssl
rm <votre domaine>.pem secure.pem <votre domaine>.csr root.crt class3.crt
Voilà votre certificat signé par l'organisme de certification est sur votre serveur avec un cryptage en 256 bits.
Mais il n'est pas encore actif sur votre site.


3ème partie: Mise en place du certificat sur votre page web:
nano /etc/nginx/sites-enabled/rutorrent.conf
remplacez le bloc suivant :
   
 ssl_certificate /etc/nginx/ssl/server.crt;
 ssl_certificate_key /etc/nginx/ssl/server.key;
par:
    ssl on;
    ssl_certificate /etc/nginx/ssl/<votre domaine>_chain.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
Enfin:
service nginx restart

Mise en place d'un certificat SSL signé par CAcert sur sous-domaines

1ère: mise en place des redirections sur votre manager:

Rendez vous dans le manager de votre registar et créer le champs dans votre zone dns comme suit:

Type A :

rutorrent.<votre domaine> --> redirection vers IP du serveur
manager.<votre domaine> --> redirection vers IP du serveur

Type CNAME:

www.rutorrent.<votre domaine> --> redirection vers rutorrent.<votre domaine>
www.manager.<votre domaine> --> redirevtion vers manager. <votre domaine>

Je suis chez OVH, voilà le résultat:

2ème partie: Mise en place des sous-domaines + redirection automatique du http vers https:

Nous allons créer le répertoire ainsi que l'index du site :

Si vous avez utilisé le script d'Ex_rat, les fichiers sont déjà sur le serveur, vous pouvez passer cette commande.

su root
mkdir /var/www/base && touch /var/www/base/index.html

Fichier de config' pour le site:

nano /etc/nginx/sites-enabled/site.conf

Copier/coller le fichier de configuration ci-dessous. Pensez à remplacer <votre domaine> par votre nom de domaine.

server {
    listen 80;
    server_name <votre domaine> www.<votre domaine>;
    return 301  https://www.<votre domaine>$request_uri;
}

server {
    listen 443 default_server ssl;
    server_name www.<votre domaine> <votre domaine>;
    if ($host !~* ^www\.){
    rewrite ^(.*)$ https://www.<votre domaine>$1;
         }

index index.html index.php;
charset utf-8;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

access_log /var/log/nginx/rutorrent-access.log combined;
error_log /var/log/nginx/rutorrent-error.log error;
   
error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; }

location = /var/www/base/favicon.ico {
    access_log off;
    return 204;
}

## début config site ##

location ^~ / {
root /var/www/base;
include /etc/nginx/conf.d/php;
include /etc/nginx/conf.d/cache;
}

## fin config site ##
}

Pour ceux qui veulent avoir le choix entre http et https pour la page d'accueil:

server {
    listen 80 default_server;
    listen 443 default_server ssl;
    server_name <votre domaine> www.<votre domaine>;
    index index.html index.php;
    charset utf-8;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
   
error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; }

location = /var/www/base/favicon.ico {
    access_log off;
    return 204;
}

## début config site ##

location ^~ / {
root /var/www/base;
include /etc/nginx/conf.d/php;
include /etc/nginx/conf.d/cache;
}

## fin config site ##
}

Fichier de config' rutorrent:
Attention: gardez les lignes de vos users

nano /etc/nginx/sites-enabled/rutorrent.conf
server {
    listen 80;
    server_name rutorrent.<votre domaine> www.rutorrent.<votre domaine>;
    return 301  https://rutorrent.<votre domaine>$request_uri;
}

server {
    listen 443;
    server_name rutorrent.<votre domaine>;

index index.html index.php;
charset utf-8;
client_max_body_size 10M;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

access_log /var/log/nginx/rutorrent-access.log combined;
error_log /var/log/nginx/rutorrent-error.log error;

error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; }

auth_basic "Login";
auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd";

location = /var/www/rutorrent/favicon.ico {
    access_log off;
    return 204;
}

## début config rutorrent ##

location ^~ / {
    root /var/www/rutorrent;
    include /etc/nginx/conf.d/php;
    include /etc/nginx/conf.d/cache;

    location ~ /\.svn {
            deny all;
    }

    location ~ /\.ht {
            deny all;
    }
}

location ^~ /conf/ {
    deny all;
}

location ^~ /share/ {
    deny all;
}

## fin config rutorrent ##

   ## début config user ##

location /<USERNAME> {
    include scgi_params;
    scgi_pass 127.0.0.1:500{x};
    auth_basic "seedbox";
    auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd_<username>";
}
  ## fin config user ##
}

Fichier de config' Seedbox-manager:

nano /etc/nginx/sites-enabled/manager.conf
server {
    listen 80;
    server_name manager.<votre domaine> www.manager.<votre domaine>;
    return 301  https://manager.<votre domaine>$request_uri;
}

server {
    listen 443;
    server_name manager.<votre domaine>;

index index.html index.php;
charset utf-8;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

access_log /var/log/nginx/rutorrent-access.log combined;
error_log /var/log/nginx/rutorrent-error.log error;

error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; }

auth_basic "Login";
auth_basic_user_file "/etc/nginx/passwd/rutorrent_passwd";

location = /var/www/seedbox-manager/favicon.ico {
    access_log off;
    return 204;
}


## début config seedbox-manager ##

location ^~ / {
    root /var/www/seedbox-manager/public;
    include /etc/nginx/conf.d/php;
    include /etc/nginx/conf.d/cache;
}

## fin config seedbox-manager ##
}

Fichier de config' pour Wordpress:

server {
    listen 80;
    server_name wordpress.<votre domaine> www.wordpress.<votre domaine>;
    return 301  https://wordpress.<votre domaine>$request_uri;
}

server {
    listen 443;
    server_name wordpress.<votre domaine>;

index index.html index.php;
charset utf-8;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

access_log /var/log/nginx/rutorrent.access.log combined;
error_log /var/log/nginx/rutorrent.error.log error;

error_page 500 502 503 504 /50x.html;
location = /50x.html { root /usr/share/nginx/html; }

location = /var/www/site/favicon.ico {
    access_log off;
    return 204;
}

    ## Début de config wordpress ##

location ^~ / {
    root /var/www/wordpress;
    try_files $uri $uri/ /index.php?q=$uri&$args;
    include /etc/nginx/conf.d/php;
    include /etc/nginx/conf.d/cache;
    satisfy any;
    allow all;
   }

    ## fin de config wordpress ##
}

Enfin:

service nginx restart

Wordpress, Rutorrent, Seedbox-manager sont désormais sur un sous-domaine. La redirection du http vers le https est également en place sur votre serveur. Pas de redirection https automatique pour cakebox, celui-ci ne fonctionne qu'en http.

3ème partie: Création du certificat pour votre domaine:

Désormais, il va falloir s'inscrire sur CAcert.
Faites vérifier votre identité,nom de domaine et adresse mail.

Commençons par supprimer le certificat et la clé précédemment créés:

rm /etc/nginx/ssl/server.key && rm /etc/nginx/ssl/server.crt 

On va se placer dans le repertoire SSL:

cd /etc/nginx/ssl/

Créons une nouvelle clé:

openssl genrsa -aes256 -out /etc/nginx/ssl/secure.pem 4096

On supprime le PEM pass phrase:

openssl rsa -in /etc/nginx/ssl/secure.pem -out /etc/nginx/ssl/key.pem

On va créer une demande de certificat serveur :

openssl req -sha256 -new -key /etc/nginx/ssl/key.pem -out /etc/nginx/ssl/<votre domaine>.csr

Remplissez comme suit:

Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: FRANCE
Locality Name (eg, city) []: VILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Le nom du site sans l'extension du nom de domaine
Organizational Unit Name (eg, section) []: domaine du site exemple : marketing ou internet
Common Name (e.g. server FQDN or YOUR name) []: www.<votre domaine>
Email Address []: la redirection mail que l'on a fait précédemment : postmaster@votre domaine

A challenge password []: Laissez vide
An optional company name []: Laissez vide

Maintenant afficher votre clé pour l'envoyer à l'organisme de certification:

cat /etc/nginx/ssl/<votre domaine>.csr

vous devriez voir apparaitre sur le terminal quelque chose comme ça:

-----BEGIN CERTIFICATE REQUEST-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE REQUEST-----

Copie de la clé chez CAcert:

  • Cliquez sur certificat serveur (à droite de la page) puis cliquez sur nouveau

  • Entrez votre clé et validez.

  • Il va vous en redonner une nouvelle.

Une fois que vous avez votre nouvelles clé, il va falloir l'enregistrer au format .pem.

nano /etc/nginx/ssl/<votre domaine>.pem

Copiez votre nouvelle clé.

On applique les droits:

chmod 400 /etc/nginx/ssl/key.pem
chown root:root /etc/nginx/ssl/key.pem

Télécharger les ''certificats racines''.

cd /etc/nginx/ssl/
wget https://www.cacert.org/certs/root.crt
wget https://www.cacert.org/certs/class3.crt

Nous avons tous les fichiers nécessaires sur notre serveur.

Faisons un fichier All In One:

cat <votre domaine>.pem root.crt class3.crt > <votre domaine>_chain.pem

Faisons le ménage:

cd /etc/nginx/ssl
rm <votre domaine>.pem secure.pem <votre domaine>.csr

Voilà votre certificat signé par l'organisme de certification est sur votre serveur avec un cryptage en 256 bits.
Mais il n'est pas encore actif sur votre site.

4ème partie: création du certificat pour vos sous-domaines:

Nous allons créer une clé et un certificat pour vos sous-domaines.
En effet, le certificat que nous venons de créer est un certificat qui protège que le domaine.

Plaçons nous dans le répertoire SSL:

cd /etc/nginx/ssl

Puis nous allons en créer une nouvelle clé:

openssl genrsa -aes256 -out /etc/nginx/ssl/sd.secure.pem 4096

On supprime le PEM pass phrase:

openssl rsa -in /etc/nginx/ssl/sd.secure.pem -out /etc/nginx/ssl/sd.key.pem

On va créer une demande de certificat serveur :

openssl req -sha256 -new -key /etc/nginx/ssl/sd.key.pem -out /etc/nginx/ssl/sd.<votre domaine>.csr

Remplissez comme suit:

Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: FRANCE
Locality Name (eg, city) []: VILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Le nom du site sans l'extension du nom de domaine
Organizational Unit Name (eg, section) []: domaine du site exemple : marketing ou internet
Common Name (e.g. server FQDN or YOUR name) []: *.<votre domaine> sans http:// ni www (http://www.exemple.fr deviendra *.exemple.fr
Email Address []: postmaster@votre domaine

A challenge password []: Laissez vide
An optional company name []: Laissez vide

Maintenant afficher votre clé pour l'envoyer à l'organisme de certification:

cat /etc/nginx/ssl/sd.<votre domaine>.csr

vous devriez voir apparaitre sur le terminal quelque chose comme ça:

-----BEGIN CERTIFICATE REQUEST-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE REQUEST-----

Copie de la clé chez CAcert:

  • Cliquez sur certificat serveur (à droite de la page) puis cliquez sur nouveau

  • Entrez votre clé et validez.

  • Il va vous en redonner une nouvelle.

Une fois que vous avez votre nouvelles clé, il va falloir l'enregistrer au format .pem.

nano /etc/nginx/ssl/sd.<votre domaine>.pem

Copiez votre nouvelle clé.

On applique les droits:

chmod 400 /etc/nginx/ssl/sd.key.pem
chown root:root /etc/nginx/ssl/sd.key.pem

Faisons un fichier All In One:

cd /etc/nginx/ssl
cat sd.<votre domaine>.pem root.crt class3.crt > sd.<votre domaine>_chain.pem

Faisons le ménage:

cd /etc/nginx/ssl
rm sd.<votre domaine>.pem sd.secure.pem sd.<votre domaine>.csr root.crt class3.crt

vous avez votre certificat pour vos sous-domaines. Mettons les en place sur nos pages web maintenant.

5ème partie: Mise en place du certificat sur votre page web et sur vos sous domaines:

Page index du site:

nano /etc/nginx/sites-enabled/site.conf

remplacez le bloc suivant :

    
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

par:

    ssl on;
    ssl_certificate /etc/nginx/ssl/<votre domaine>_chain.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;

Pour ceux qui veulent avoir le choix entre le hhtp et le https sur la page du site:

    ssl_certificate /etc/nginx/ssl/<votre domaine>_chain.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;

Pour ruttorent, seedbox-manager, wordpress et vos autres sous domaines:

nano /etc/nginx/sites-enabled/rutorrent.conf
nano /etc/nginx/sites-enabled/wordpress.conf
nano /etc/nginx/sites-enabled/manager.conf

remplacez le bloc suivant :

   
 ssl_certificate /etc/nginx/ssl/server.crt;
 ssl_certificate_key /etc/nginx/ssl/server.key;

par:

 
    ssl on;
    ssl_certificate /etc/nginx/ssl/sd.<votre domaine>.pem;
    ssl_certificate_key /etc/nginx/ssl/sd.key.pem;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;

Enfin:

service nginx restart
Bonus
Cette dernière partie est uniquement réservée aux utilisateurs confirmés:

Mise en place de l'anti-framing:

Si vous voulez mettre en place un système anti-framing sur votre site, ajoutez ceci dans le fichier config de votre page web.

Entre :
server {
...
}
Cette ligne :
add_header X-Frame-Options DENY;
Mise en place du HTTP Strict Transport Security (HSTS):

Si vous utilisez uniquement le https sur votre site, vous pouvez activer le HSTS. Celui-ci remplace toutes les adresses de type http vers https. Il permet également de refuser l'accès à un site utilisant un certificat auto-signé. Il protège également contre les attaques de type man-in-the-middle.

Pour le mettre en place, rien de plus simple. Sur vos fichiers de config:

Entre:
server {
...
}
placez cette ligne :
add_header Strict-Transport-Security max-age=2678400;
Le temps maximum (max-age) est donné en secondes. Il peut bien évidemment être changé par une valeur plus grande ou plus petite.

Enjoy =D
Répondre…