Parfois en développement, nous avons besoin de tester les fonctions SSL. J’ai donc eu besoin de configurer un serveur Nginx en SSL. J’ai donc créé un certificat auto-signé. S’agissant d’un serveur de développement, je n’ai pas besoin de plus. Pour des serveurs de production, il faudra passer par un organisme certifié. Malheureusement suivant la configuration de votre serveur (international, sous-domaine etc …) cela peut revenir vite cher. Voici un micro tuto:
Pré-requis
- lib openssl (linux)
- module HttpSslModule normalement, il est présent par défaut
Les tests ont été réalisé sous Ubuntu 13.10
Créer un certificat auto-signé pour Nginx
Pour cette opération sous Linux, il n’y a vraiment rien de difficile, suivez le guide.
Première chose à faire créer un répertoire pour accueillir les certificats. S’agissant d’un serveur de test, je vais créer un seul certificat pour tous les sites. Dans le cadre de production je vous conseille de les placer dans un répertoire de votre arborescence de site.
Je vais donc créer le répertoire dans /etc/nginx/ avec la commande suivante:
sudo mkdir /etc/nginx/certs
et me placer dans ce dernier:
cd /etc/nginx/certs
On créé tout simplement le certificat avec la commande suivant. Il est inutile de le sur-protéger
sudo openssl req -new -x509 -nodes -out server2.crt -keyout server2.key
Que répondre aux questions ? (ATTENTION ce n’est qu’un Exemple), dans l’absolu s’agissant d’un serveur de DEV vous pouvez répondre ce que vous voulez et même rien.
- Country Name (2 letter code) [AU] : répondre FR (pour la France)
- State or Province Name (full name) [Some-State]: France
- Locality Name (eg, city) []: Courbevoie
- Organization Name (eg, company) [Internet Widgits Pty Ltd]: GeekMPS
- Organizational Unit Name (eg, section) []: Blog
- Common Name (e.g. server FQDN or YOUR name) []:geekmps.fr
- Email Address []: votre e-mail (courriel pour les fans de la langue française)
On va faire en sorte que le certificat ne soit visible que par le root
chmod 600 server.crt
Mise en place du certificat pour Nginx
La toujours rien de sorcier, il suffit de lire la documentation, où copier les lignes ci-dessous :D
On va ajouter les lignes suivantes dans la configuration du serveur (/etc/nginx/sites-availables)
listen 443;
ssl on;
ssl_certificate /etc/nginx/certs/server2.crt;
ssl_certificate_key /etc/nginx/certs/server2.key;
Exemple complet
server { listen 8081; listen 443; server_name joomla32.local; server_name_in_redirect on; ssl on; ssl_certificate /etc/nginx/certs/server2.crt; ssl_certificate_key /etc/nginx/certs/server2.key; root /home/jbaptiste/www/nginx/joomla32; index index.php index.html index.htm default.html default.htm; # Support Clean (aka Search Engine Friendly) URLs location / { try_files $uri $uri/ /index.php?q=$uri&$args; } # deny running scripts inside writable directories location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 /403_error.html; } client_max_body_size 20M; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; #With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # include /etc/nginx/fastcgi.conf; } # caching of files location ~* \.(ico|pdf|flv)$ { expires 1y; } location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ { expires 14d; } }
Un petit restart du serveur
sudo service nginx restart
ou
sudo /etc/init.d/nginx restart
Comments powered by CComment