lindev.fr

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - certificat

Fil des billets - Fil des commentaires

01 oct. 2015

EC2, ajouter un compte utilisateur avec certificat .pem

A la création d'une instance EC2, vous avez un compte par défaut ( ec2-user ou admin selon la distrib ) .
Ce compte vous permet d’accéder et d'administrer votre instance via une connexion SSH , avec une authentification par certificat ( que vous avez préalablement téléchargé à la création de l'instance ).

On va voir ici comment ajouter un compte utilisateur avec un nouveau certificat pour qu'il puisse également se connecter sur cette instance EC2.

Première étape le certificat

Nous allons commencer par créer ce nouveau certificat via l'interface d'amazon ( la clef privée )

Clef privée ( .pem )

C'est très simple, suivez le guide...

Dirigez-vous vers le service EC2 Capture_d_e_cran_2015-10-01_a__09.22.02.png

Gestion des clef Capture_d_e_cran_2015-10-01_a__09.22.13.png

Créer un clef Capture_d_e_cran_2015-10-01_a__09.22.23.png

Vous devrez alors télécharger cette nouvelle clef ( ici elle s'appelle lindev.pem )

Clef public

Coté serveur, nous allons devoir spécifier la clef publique liée à cette clef privée pour le nouvel utilisateur.
Commençons donc par récupérer cette clef publique.

Changez les droits du certificat
chmod 400 lindev.pem
Générer les clef publique à partir de la clef privée
ssh-keygen -y

Cette commande va vous demander le chemin vers la clef privée. Suite à quoi il va vous sortir la clef public .
Par exemple :

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCISBb/pQYoSz1tm2mWrBBK8Yfs+8z2rdcbYhCIgz7oLE2YNrT/cs8D9WXduTezS1p/SjdfA4zhXSJNBvjNP0A0M2s1Mj3E+edpENhsYrLBxDc1F60CQ4be0hLICX2e2mDzPYi7sLgAzAdVI67Eo2Zmj/0QYwckS4JgFl7JXedV8Fz4D2gm8xjByxbtlsPhG84Y9wq7GGmtHuaHzi+H+RVS1hlDZIH8QKwX9U5eWJY3BaQjXpwnorNvn2OrlO9wmTE+22A7F0vF8zsRia+t5TwqPaVYmfX7DN5zqBMcd8tQC1LdYS0b+h6+fLAkUdaqQ0kXGm1FCxYH00hTYNS+JV/V

Gardez cette clef nous allons en avoir besoin bientôt coté serveur.

Coté serveur

Nous sommes maintenant sur notre instance EC2 avec l'utilisateur par defaut, nous allons donc créer notre second utilisateur et lui transmettre notre clef publique.

Création de l'utilisateur

[email protected]:/home/admin# adduser lindev
Adding user `lindev' ...
Adding new group `lindev' (1001) ...
Adding new user `lindev' (1001) with group `lindev' ...
Creating home directory `/home/lindev' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for lindev
Enter the new value, or press ENTER for the default
	Full Name []: Lindev
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y

Voilà mon utilisateur créé, ne nous reste plus qu'à lui créer sa configuration ssh

ssh

Création du répertoire contenant la configuration ssh de l'utilisateur

sudo -s
su - lindev
mkdir /home/lindev/.ssh
chmod 700 /home/lindev/.ssh

Création du fichier contenant les clefs publiques

touch /home/lindev/.ssh/authorized_keys
chmod 600 /home/lindev/.ssh/authorized_keys

Editer le fichier authorized_keys et y coller votre clef public .

vim /home/lindev/.ssh/authorized_keys

je colle donc :

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCISBb/pQYoSz1tm2mWrBBK8Yfs+8z2rdcbYhCIgz7oLE2YNrT/cs8D9WXduTezS1p/SjdfA4zhXSJNBvjNP0A0M2s1Mj3E+edpENhsYrLBxDc1F60CQ4be0hLICX2e2mDzPYi7sLgAzAdVI67Eo2Zmj/0QYwckS4JgFl7JXedV8Fz4D2gm8xjByxbtlsPhG84Y9wq7GGmtHuaHzi+H+RVS1hlDZIH8QKwX9U5eWJY3BaQjXpwnorNvn2OrlO9wmTE+22A7F0vF8zsRia+t5TwqPaVYmfX7DN5zqBMcd8tQC1LdYS0b+h6+fLAkUdaqQ0kXGm1FCxYH00hTYNS+JV/V

On enregistre et on quitte.

Tests

Il ne vous reste plus qu'à tester a connexion avec votre nouvel utilisateur .

ssh -i "lindev.pem" [email protected]

Normalement vous devriez être connecté sans avoir à rentrer le moindre mot de passe, en utilisant le certificat Amazon.

07 avr. 2010

Nginx - Vhost - php - perl - ssl

banniere-nginx.png
Bon , le billet qui sert de pont de départ ... pas toujours évident sur un blog de s'y retrouver .. sans sommaire ...
Voici donc le sommaire concernant les billets de Nginx

Installation , et utilisation de base

Installer Nginx manuellement , options de compilation , découvrez les emplacements des différents fichiers de configuration , démarrage automatique , options de base ect ...

Gérer les pages PHP et PERL

Nginx seul c'est bien , mais pouvoir l'utiliser avec php perl et .. tant d'autres , c'est mieux , dans ce billet , est éxpliqué la mise en place de php et perl en fast-cgi , et la liaison avec nginx .

SSL , vhost , et autres petites options

Mise en place de pages sécurisées par ssl , création de certificats , redirection automatique , mod_rewrite , compatibilité avec certains framework qui ont besoin du mod rewrite commezend framework , symphony , etc ...

11 janv. 2009

Https avec apache2

13370-Dracauseb-SecureConnexion.pngMise en place d'un site avec SSL

Nous allons voir dans ce billet , l'activation du mod SSL pour apache2 ( toujours en mode manuel ) , suivi par la création des certificats , et pour finir , l'utilisation de ces certificats pour un hote virtuel ( site ).

Activation du module SSL dans apache2

Pour que ce module soit pris en compte , il nous faut re-compiler apache2 . Je me dirige donc vers les sources :

cd /usr/local/src/httpd-2.2.11/
vim my_configure

On ajoute la ligne suivante :

--enable-ssl \

Ce qui me donne le fichier de configuration suivant :

#!/bin/sh

#Optimisation pour la compilation
export CC="gcc"
export CFLAGS="-02"

#Config des sources pour l'env
./configure --prefix=/usr/local \
        --enable-rewrite \
        --enable-so \
        --enable-cache \
        --enable-mem-cache \
        --enable-alias \
        --enable-vhost-alias \
        --enable-ssl=shared \
        --disable-status \
        --disable-cgi \
        --disable-cgid \
        --enable-unique-id \
        --enable-ssl \

Voilà cette modification terminé , nous allons relancer la compilation d'apache2 :

(en root)

make clean
./my_configure
make
make install

Et voilà la compilation est terminé . Nous pouvons vérifié que le module est bien présent , soit par le phpinfo , soit directement via cette commande :

/usr/local/bin/apachectl -t -D DUMP_MODULES

vous devez trouver cette ligne : ssl_module (static)

Création des certificats

Pour créer les certificats , je me suis servis de la marche à suivre de ce site : generation-linux

Je vais tout de même pour donner la marche à suivre dans notre cas ( version compilé manuellement )

cd /root
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

mkdir /usr/local/conf/apache-ssl/ssl.key
mkdir /usr/local/conf/apache-ssl/ssl.crt
cp ~/server.key /usr/local/conf/apache-ssl/ssl.key/
cp ~/server.crt /usr/local/conf/apache-ssl/ssl.crt/
chmod 600 /usr/local/conf/apache-ssl/ssl.key/server.key
chmod 600 /usr/local/conf/apache-ssl/ssl.crt/server.crt
chown www-data:www-data /usr/local/conf/apache-ssl/ssl.key/server.key
chown www-data:www-data /usr/local/conf/apache-ssl/ssl.crt/server.crt

cp /usr/local/conf/apache-ssl/ssl.key/server.key /usr/local/conf/apache-ssl/ssl.key/server.key.orgi
openssl rsa -in /usr/local/conf/apache-ssl/ssl.key/server.key -out /usr/local/conf/apache-ssl/ssl.key/server.key

Voilà pour les certificats !

Utilisation https pour un hôte-virtuel

A la suite de la compilation d'apache avec le mod ssl , des lignes se sont ajouté à la fin de ce fichier celle ci nous intéresse particulièrement :

Include conf/extra/httpd-ssl.conf

Elle est par défaut commenté , nous allons la dé-commenter , puis configurer ce fameux fichier httpd-ssl.conf

httpd-ssl.conf

Ce fichier correspond en fait à tous les paramètres concernant ssl , suivi d'un hôte virtuel d'exemple !

Pour les paramètres globaux , il faut juste vérifier que cette directive est bien là :

Listen 443

Pour le reste , il n'y a logiquement rien à toucher .. sauf si vous savez ce que vous faites !

Pour l'hôte virtuel , nous n'allons pas le laisser comme ça ! Il faut bien le configurer ! 2 solutions :

Soit vous commentez cet exemple complètement , et vous créez un nouvel hôte dans le dossier de vos "V-Hosts" , ou vous configurez vos V-Hosts qui utilise le ssl dans ce fichier ( celà ne change pas grand chose , c'est juste une question d'organisation )

Personnellement , je vais configurer mon V-Host dans ce fichier .

Imaginons , que je veuille mettre en https mon site d'administration de comptes mails , qui est postfixadmin.lindev.fr ( ici c'est une adresse fictive )

voici le V-Host configuré simplement :

NameVirtualHost postfixadmin.lindev.fr:443

<VirtualHost mailadmin.lindev.fr:443>

  #   General setup for the virtual host
  DocumentRoot "/var/www/postfixadmin"
  ServerName postfixadmin.lindev.fr:443
  ServerAdmin [email protected]
  
  ErrorLog "/usr/local/logs/error_log"
  TransferLog "/usr/local/logs/access_log"

  <Directory "/var/www/postfixadmin">
    allow from all
    Options -Indexes
  </Directory>


SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile "/usr/local/conf/apache-ssl/ssl.crt/server.crt"
SSLCertificateKeyFile "/usr/local/conf/apache-ssl/ssl.key/server.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/usr/local/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Et voilà , une fois terminé , il ne vous reste plus qu'à redémarrer votre serveur apache pour prendre en compte toutes vos modifications .

/usr/local/bin/apachectl stop
/usr/local/bin/apachectl start

Le site est désormais accessible via l'adresse : https://postfixadmin.lindev.fr

Astuce :

Pour être automatiquement redirigé si l'on tente d'accéder via une adresse non sécurisé vers l'adresse sécurisé , l'on modifiera/créera le V-Host qui écoute sur le port 80 comme ceci :

<VirtualHost *>

ServerName postfixadmin.lindev.fr
ServerAlias postfixadmin.lindev.fr

Redirect / https://postfixadmin.lindev.fr/

</VirtualHost>

Ou encore mieux .. imaginons un intranet , accessible par le réseau local , et l'extérieur , si vous souhaitez que toutes personnes de l'extérieur soient automatiquement redirigé en https , mais pas les autres ( postes en local ), vous pouvez procéder comme ceci :

ici le réseau local et : 10.0.0.0-255

En mode standard ( sur le port 80 )

<virtualHost *:80>

        RewriteEngine on
        RewriteCond %{REMOTE_ADDR} !^10\.0\.0\.[0-9]+$
        RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R,L]

        DocumentRoot "/var/www/intranet"
        ServerName intranet.lindev.fr
	ServerAlias www.intranet.lindev.fr
        <Directory /home/webadmin/www/intranet >
                Options -Indexes
                Order deny,Allow
                Deny from All
                Allow from 10.0.0.0/24
                AllowOverride All
        </Directory>
</VirtualHost>

Emode SSl ( sur le port 443 )

<virtualHost *:443>
        DocumentRoot "/var/www/intranet"
        ServerName intranet.lindev.fr:443
	ServerAlias www.intranet.lindev.fr:443

	ServerAdmin [email protected]

	ErrorLog "/usr/local/logs/error_log"
	TransferLog "/usr/local/logs/access_log"


        <Directory /var/www/intranet >
                Options -Indexes
                Order deny,Allow
                Allow from All
                AllowOverride All
        </Directory>


##Paramétres SSL##

	SSLEngine on
	SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
	SSLCertificateFile "/usr/local/conf/apache-ssl/ssl.crt/server.crt"
	SSLCertificateKeyFile "/usr/local/conf/apache-ssl/ssl.key/server.key"
	SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
	    SSLOptions +StdEnvVars
	</FilesMatch>
	
	BrowserMatch ".*MSIE.*" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0

	CustomLog "/usr/local/logs/ssl_request_log" \
	          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Et voilà pour ce billet , n'hésitez pas à faire vos commentaires en cas de problème ou d'erreur dans mes propos .