Create easily your SAN (multiple hostname on one IP) certificates for HTTPS with OpenSSL

Prerequisites :

  • A Linux box (tested on Ubuntu Server 14.04)
  • OpenSSL installed

What we will do :

  • Create our own certificate authority – you will need to deploy it to clients in order to avoid browser warnings.
  • Create a SAN certificate.

Let’s Start :

Create a folder for your authority, in this folder, create two files with following content, make them eXecutables :

gen_root_ca.sh : (create an authority valid for 3650 days)

#!/bin/bash

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem -sha256

gen_cert_san.sh : (create a san certificate valid for 1460 days)

#!/bin/bash
echo sample subject /C=FR/ST=France/L=YourCity/O=YourOrganisation/CN=$1
echo input your subject below :
read SUBJ
echo sample : subjectAltName=DNS:mydomain.com,DNS:www.mydomain.com,DNS:www.mydomain2.org
echo input your domain names like in sample :
read ALTNAME
if [[ "$1" = ??* ]] && [[ "$SUBJ" = /C=*/ST=*/L=*/O=*/CN=* ]]; then
mkdir $1
 cp /etc/ssl/openssl.cnf $1/
 echo [ v3_req ] >> $1/openssl.cnf
 echo $ALTNAME >> $1/openssl.cnf
 openssl genrsa -out $1/$1_cert.key 2048
 openssl req -new -key $1/$1_cert.key -out $1/$1_cert.csr -sha256 -nodes -subj "$SUBJ" -config $1/openssl.cnf -extensions v3_req -reqexts v3_req
 openssl x509 -req -in $1/$1_cert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out $1/$1_cert.crt -days 1460 -sha256 -extfile $1/openssl.cnf -extensions v3_req
echo Done
else
 echo Incorrect certificate name or incorrect subject name
fi

Now execute ./gen_root_ca.sh, fill in carefully your authority informations. OK, now you’re done with your authority, copy rootCA.pem to rootCA.crt and deploy it to your clients : on a windows box, double click on rootCA.crt, install certificate, Next, Check “Place all certificates in the following store”, browse for “Trusted Root Certification Authorities”, OK, Next, Finish. Your done !

Let’s create our SAN Certificate :
Choose a “certificate_name”
Execute ./gen_cert_san.sh my_certificate_name, i recommand you prepare your subject line and domain names line on text editor, then fill data on the command line.

The script will create a folder my_certificate_name with a .crt and .key file. Use it with your favorite Web server (apache, nginx, nodejs…).

Now test your certificate, on a client where authority cert is installed you will get a beautifull :

cert cert2

 

 

Regarder la Télé Free derriere un Routeur Linux sans fastidieuse configuration des clients

Free utilise le protocole RTSP pour faire transiter le signal TV, dans le cadre du multiposte.

L’inconvénient du protocole RTSP est similaire à celui du FTP, un canal de commande sous forme d’une connexion TCP permet de définir un canal de données qui sera situé sur une autre connexion TCP.

Mais le protocole FTP à un avantage que n’a pas directement le RTSP, le mode Passif qui règles les principaux problèmes du FTP derrière un NAT.

Mais revenons au protocole RTSP : la solution que j’utilisais jusqu’à présent était de définir dans VLC un port statique différent sur chaque machine cliente et de définir des règles de port forwarding sur le routeur. Solution peu pratique lorsque la plupart des machines sont en DHCP ou lorsque des machines ne font que passer dans le réseau.

En recherchant un Proxy RTSP pour éviter cette configuration plus que fastidieuse, je suis tombé sur le travail de plusieurs développeurs à l’adresse http://mike.it-loops.com/, ou encore https://github.com/maru-sama/rtsp-linux-v2.6

Ils ont développé un filtre a intégrer au noyau Linux du routeur comme il en existe pour le protocole FTP.

Le code source est fournit, il ne vous reste qu’a le compiler. Cela vous donne un module à installer et à charger dans le noyau. (module nf_nat_rtsp). Tous les détails sont dans le fichier README.RST fournit avec le package.

Maintenant, n’importe quel PC présent sur le réseau peut accéder à la TV Free sans avoir a configurer, ni le routeur, ni le client.

Mon routeur x86 Low Power

Dans le but de diminuer mon impact énergétique, j’ai cherché a remplacer mon routeur qui se présentait sous la forme d’un PC classique équipé de deux cartes réseau par une machine x86 a base de processeur basse consommation.

Après une longue recherche, j’ai finalement trouvé une machine adéquate : Le Compulab Fit-PC2i.

On trouve facilement des PCs basse consommation depuis que le processeur ATOM d’Intel est sorti (grand fan des Acer REVO), sans compter les équivalents AMD, mais difficile d’en trouver ayant deux interfaces réseau.

J’ai installé le système d’exploitation (noyau Linux) sur une clef USB et monté certains points de montage directement en RAM de manière a optimiser le nombre d’écriture sur la clef USB.

/etc/fstab :

UUID=fcxxx... /               ext4    noatime,errors=remount-ro 0       1
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/www tmpfs defaults 0 0

On remarquera la présence du noatime sur le root pour éviter la mise a jour des dates d’accès au fichier qui écrirait sur la clef usb à chaque accès fichier.

A cela s’ajoute des scripts au démarrage du système pour remplir ces dossiers en RAM, d’autres s’exécutant a intervalle régulier (tous les jours par exemple) pour prévenir la perte de données lors d’arrêt non souhaité du routeur, ainsi que des scripts de sauvegarde au moment de l’arrêt du serveur.

Consommation :

Mesure avant : 70wh, Mesure après : 10wh

Autres alternatives :

J’avais auparavant tenté d’utiliser un routeur matériel (Linksys WRT-150N), compatible avec la distribution DD-WRT, mais malgré la grande ouverture du système, on se trouve vite limité par les capacité matérielles du routeur.