Ce guide va vous expliquez comment avoir un certificat SSL chez Gandi et comment mettre en place un serveur WEB avec la configuration SSL.
Nous utiliserons Nginx qui est un serveur WEB très léger et très performant avec php-fpm.
Nous allons commençer par obtenir notre certificat, pour cela il va falloir dans un premier temps générer la CSR qui est un fichier contenant les informations de votre demande de certificat, y compris votre clé publique. Vous devez générer cette clé à partir de votre serveur.
1 – Creation d’une clé privé et une demande de certificat
2 – Creation d’un certificat chainé
3 – Installation de nginx
4 – Modifier les droits sur la clé privée
5 – Générez un dhpram
6 – Configuration de nginx
7 – Création d’un répertoire de logs
8 – Configuration de php-fpm
9 – Redémarrer les services
.
$ sudo -s password : #
1 – Creation d’une clé privé et une demande de certificat
# openssl req -nodes -newkey rsa:4096 -sha256 -keyout domain.tld.key -out domain.tld.csr Country Name (2 letter code) [AU]: FR State or Province Name (full name) [Some-State]: Region Locality Name (eg, city) []: Votre ville Organization Name (eg, company) [Internet Widgits Pty Ltd]: Votre Société Organizational Unit Name (eg, section) []: IT Common Name (eg, YOUR name) []: domaine.tld Email Address []: A challenge password []: An optional company name []:
Le processus va créer 2 fichiers : un public en .csr et un privé en .key qu’il faudra absolument garder
Les champs optional company name et challenge password sont facultatifs.
Il est préférable de remplir le champ Email Address.
domaine.tld indique l’adresse que vous voulez protéger.
Copier le contenu du fichier domain.tld.csr :
# cat domain.tld.csr -----BEGIN CERTIFICATE REQUEST----- ...encrypted text... ...encrypted text... ...encrypted text... -----END CERTIFICATE REQUEST-----
Rendez vous sur https://www.gandi.net/ssl/create/csr et coller le contenue de domain.tld.csr dans le formulaire CSR*, si vous n’avez pas fait d’erreur le champ Domaine (CN) principal doit afficher votre nom de domaine.
-> Dans la liste déroulante “Logiciel utilisé” sélectionnez : nginx
Suivez les instructions, le certificat coute environ 12€, une fois vous recevez votre certificat .crt copier le contenue dans le fichier domain.tld.crt
Nous avons donc maintenant 3 fichiers :
– domain.tld.crt
– domain.tld.csr
– domain.tld.key
.
2 – Creation d’un certificat chainé
# wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem # wget http://crt.usertrust.com/USERTrustRSAAddTrustCA.crt # cat USERTrustRSAAddTrustCA.crt GandiStandardSSLCA2.pem > TrustedCA.pem # cat USERTrustRSAAddTrustCA.crt GandiStandardSSLCA2.pem >> domain.tld.crt
.
3 – Installation de nginx
# aptitude install nginx php7.0-fpm
Deplacez les certicats dans le dossier /etc/nginx/certs
# mkdir /etc/nginx/certs # mv domain.* TrustedCA.pem /etc/nginx/certs
.
4 – Modifier les droits sur la clé privée
# chmod 400 domain.tld.key
.
5 – Générez un dhpram
# openssl dhparam -out /etc/nginx/certs/dhparam.pem 4096
.
6 – Configuration de nginx
$ vim /etc/nginx/conf.d/domain.tld.conf upstream php-handler { server 127.0.0.1:9000; #server unix:/var/run/php7.0-fpm.sock; } server { listen 80; listen [::]:80; server_name site.domain.tld; # Obliger la connexion en https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name site.domain.tld; # Fichier de log access_log /var/log/nginx/site-access.log; error_log /var/log/nginx/site-error.log; # Parametres pour SSL/TLS ssl_certificate /etc/nginx/certs/certificat.crt; ssl_certificate_key /etc/nginx/certs/certificat.key; ssl_dhparam /etc/nginx/certs/dhparam.pem; ssl_ciphers 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECD ssl_protocols TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; # Ajout de header liés à la sécurité add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; prel add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header Alternate-Protocol 443:npn-spdy/3; # Répertoire dans lequel est installé Owncloud root /var/www/site/; # Forcer l'encodage en UTF8 charset utf-8; # Taille de fichier maximum que l'on peut téléverser/uploader client_max_body_size 10G; fastcgi_buffers 64 4K; # Désactivation de la compression pour éviter la suppression du header ETag gzip off; # Page index du site index index.php; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ deny all; } location / { try_files $uri $uri/ /index.php; } location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_pass php-handler; } # Optionnel : positionne un header EXPIRES long sur les ressources statiques location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optionnel : ne pas logger l'accès aux ressources statiques access_log off; } }
.
7 – Création du répertoire de logs
# mkdir /var/log/nginx/domain.tld # chown www-data:www-data /var/log/nginx/domain.tld/
.
8 – Configuration de php-fpm
# vim /etc/php/7.0/fpm/pool.d/www.conf Remplacer : listen = /var/run/php7.0-fpm.sock par : listen = 127.0.0.1:9000
.
9 – Redémarrer les services
# service nginx restart # service php7.0-fpm restart
Enjoy, votre si est désormée en HTTPS avec un certificat SSL signer et reconnus.
Vous pouvez tester sur https://www.ssllabs.com/ssltest/ et avoir un jolie A+ 🙂
I think you have noted some very interesting points , appreciate it for the post.
I am so grateful for your blog article.Really thank you! Fantastic.