C'est re-moi !
Alors en fait ça marche, c'était vraiment que j'était tout naze hier, comme promis voila le tuto :
1 créer un dossier (nommons-le "caroot") et se placer dedans :
mkdir caroot ; cd ./caroot
2 créer dans caroot un fichier "openssl.cnf"
nano openssl.cnf
et y placer le code suivant en adaptant aux besoins :
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = .
certs = $dir/ca/certs
new_certs_dir = $dir/ca/newcerts
database = $dir/ca/index.txt
certificate = $dir/ca/ca.pem
serial = $dir/ca/serial
private_key = $dir/ca/ca.key
default_days = 3650
default_md = sha1
preserve = no
policy = policy_match
[ policy_match ]
organizationName = match
commonName = supplied
emailAddress = optional
[ req ]
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
organizationName = Organisation
organizationName_default = Herve Schauer Consultants
commonName = Nom ou URL
commonName_max = 64
emailAddress = Adresse Email
emailAddress_max = 40
[CA]
nsComment = "[Breve HSC] CA"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
basicConstraints = critical,CA:TRUE,pathlen:0
keyUsage = keyCertSign, cRLSign
[SERVEUR]
nsComment = "Certificat Test"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
issuerAltName = issuer:copy
basicConstraints = critical,CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
nsCertType = server
extendedKeyUsage = serverAuth
subjectAltName = @ALIASES
[ALIASES]
DNS.1 = foo.hsc.fr
DNS.2 = bar.hsc.fr
tout à la fin, c'est là que vous allez placer vos domaines, pensez que vous pouvez utiliser des
wildcards : *.monsite.tld par exemple, pensez aussi qu'il faut que les numéros se suivent :
DNS.1 = domaine
DNS.2 = domaine2
DNS.3 = domaine3
.
.
.
DNS.25 = domaine25
sauvegardez
2bis (optionnel) créer un fichier "responses"
nano responses
et placez-y dedans les réponses aux questions qui vous serons posées, à savoir l'organisation (votre boîte, asso, ceque vous voulez), "nom ou URL" là aussi, placez-y ce que vous voulez (on s'en fou puisque cette valeur sera outrepassée par ce qu'on a mis dans la secion ALIASES et un email, soit, par exemple :
Monster Inc.
monsters-inc.com
mike@monsters-inc.com
y
y
(pensez bien à la dernière ligne vide) ce fichier permettra de répondre automatiquement aux questions, mais vous pouvez sauter cette étape. Si vous utilisez cette méthode, rajoutez " < responses" à la fin des commandes du point 4, 5 et 7 comme par exemple
openssl req -new -x509 -config ./openssl.cnf -extensions CA -sha1 -newkey rsa:1024 -nodes -days 3650 -keyout ca/ca.key -out ca/ca.pem < responses
3 créez les dossiers de l'autorité racine :
mkdir -p ./ca/newcerts && touch ./ca/index.txt && echo '01' > ./ca/serial
4 créez le certificat de base de l'autorité :
openssl req -new -x509 -config ./openssl.cnf -extensions CA -sha1 -newkey rsa:1024 -nodes -days 3650 -keyout ca/ca.key -out ca/ca.pem
puis
openssl req -new -config ./openssl.cnf -newkey rsa:1024 -nodes -keyout serveur.key -out serveur.csr
5 auto-signez le certificat de l'autorité :
openssl ca -config ./openssl.cnf -extensions SERVEUR -in serveur.csr -out serveur.pem
6 créez un dossier pour retrouver rapidement les certificats, disons dans le dossier d'apache, par exemple pour apache2 :
sudo mkdir /etc/apache2/cert
7 créer les certificats pour apache :
sudo openssl req -x509 -config ./openssl.cnf -extensions SERVEUR -nodes -days 3650 -newkey rsa:1024 -out /etc/apache2/cert/server.crt -keyout /etc/apache2/cert/server.key
8 créer les vhosts pour ssl comme d'hab, avec le nameVirtualHost,, en spécifiant les certificats créés au point 7
9 rechargez la conf apache et les fichiers associés :
sudo /etc/init.d/apache2 force-reload
10 enjoy :)
Lorsque vous vous connecterez à votre site en https, vous aurez une alerte vous disant que le certif est issu d'une autorité non reconnue blah blah et vous pourrez examiner le certificat, si vous le faites vous verrez dans les champs du certificat au champ "[nom de l'autorité] > certificat > extensions >Nom alternatif du sujet du certificat un truc du genre :
Non critique
Nom DNS: domaine1.tld
Nom DNS: domaine2.tld
Nom DNS: domaine3.tld
vs certificats seront partagés par les domaines, c'est ce qu'on voulait !
références/voir aussi :
http://www.hsc.fr/ressources/breves/ssl_virtualhosts.html.fr [FR]
http://wiki.cacert.org/wiki/VhostTaskForce [EN]