Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
unix:openssl_et_ac [2008/09/25 15:29]
jadawin
unix:openssl_et_ac [2010/01/12 13:29] (current)
Line 1: Line 1:
 +====== Créer sa propre Autorité de Certification (AC) ou CA en anglais ======
 +
 +Bien le bonjournasse ami lutingue, aujourd'​hui on va faire un gros HOWTO (bouuuuh le vilain, un HOWTO, y'a papa Théo qui va encore sévir en voyant ça) pour créer sa propre autorité de certification,​ afin de se faire ses propres certificats tous beaux. Ce mécanisme s'​appelle une PKI dans la langue des rosbifs, et une IGC dans la langue des grenouilles. Je vous renvoie (comme souvent) à la doc de [[http://​fr.wikipedia.org/​wiki/​Infrastructure_%C3%A0_cl%C3%A9s_publiques|Wikipedia]] qui vous expliquera ça dans un français meilleur que le mien.
 +
 +Cette CA, dont vous diffuserez le certificat (clef publique) sur toutes vos machines et à tous vos amis qui ont des comptes mail-ssl ou https chez vous, vous permettra de créer une hiérarchie de confiance afin de créer un certificat par service par machine.
 +
 +Ce tip présuppose que vous compreniez au moins vaguement les notions de cryptographie à base de clefs asymétriques. Si la phrase que vous venez de lire vient de vous filer un mal de crâne, je vous propose de vous rendre sur le lien sui[[http://​fr.wikipedia.org/​wiki/​Cryptographie_asym%C3%A9trique|vant (SFW!!)]], qui vous permettra de mieux comprendre de quoi il en retourne (et puis bon, je ne vais pas me mettre à paraphraser Wikipedia...
 +
 +Toutes ces manipulations supposent que vous êtes r00t.
 +
 +
 +===== Génération de notre propre Autorité de Certification =====
 +
 +On se crée un joli endroit dans /etc/ssl pour stocker la biclef.
 +<​code>​
 +export HOSTNAME=`hostname`
 +cd /etc/ssl
 +mkdir CA
 +cd CA
 +touch index.txt
 +echo "​01"​ > crlnumber
 +cd /etc/ssl
 +</​code>​
 +
 +==== Génération de la clé ====
 +
 +On génère la clef privée de notre CA.
 +<​code>​
 +openssl genrsa -des3 -out ${HOSTNAME}-ca.key 2048
 +</​code>​
 +On va vous demander un mot de passe. Il est évident que ce mot de passe doit être d'une solidité à tout épreuve, car si vous divulguez ou que vous vous faites voler votre clef privée de votre certificat racine, vous foutez toute la sécurité en l'air.
 +
 +Seul r00t a le droit de la lire.
 +<​code>​
 +chmod 400 ${HOSTNAME}-ca.key
 +</​code>​
 +
 +
 +
 +==== Génération du certificat ====
 +
 +On génère un certificat auto-signé.
 +<​code>​
 +openssl req -new -x509 -days 3650 -key ${HOSTNAME}-ca.key -out ${HOSTNAME}-ca.crt
 +</​code>​
 +On peut rentrer comme paramètres ce qui suit.
 +        Unite d'​organisation OU = Secure Server Certification Authority
 +        Organisation O = Pinpin Data Security, Inc.
 +        Pays C = FR
 +        Nom commun CN = <​rien>​ ou ce qui est dans le champ "​O"​
 +
 +On génère aussi la liste de révocation
 +<​code>​
 +openssl ca -gencrl -keyfile CA/​${HOSTNAME}-ca.key -cert CA/​${HOSTNAME}-ca.crt -out CA/​${HOSTNAME}-ca.crl
 +</​code>​
 +
 +Il faut également éditer le fichier /​etc/​ssl/​openssl.cnf avec les données qui vont bien pour les variables comme dir, certificate,​ crl and private_key.
 +
 +==== Pour voir le certificat, on peut utiliser la commande suivante ====
 +<​code>​
 +openssl x509 -in ${HOSTNAME}-ca.crt -text -noout
 +</​code>​
 +
 +===== Créer une clé et un certificat pour un serveur quelconque (Web, SMTP, POP etc) =====
 +
 +Par exemple, si c'est pour un serveur web, vous pouvez procéder comme suit :
 +<​code>​
 +export SERVICE="​www"​
 +cd /etc/ssl
 +mkdir ${SERVICE}
 +cd ${SERVICE}
 +</​code>​
 +
 +==== Génération de la clef privee ====
 +<​code>​
 +openssl genrsa -des3 -out ${HOSTNAME}-${SERVICE}.key 1024
 +chmod 400 ${HOSTNAME}-${SERVICE}.key
 +</​code>​
 +
 +
 +==== Génération du certificat à faire signer par l'AC ====
 +<​code>​
 +openssl req -new -key ${HOSTNAME}-${SERVICE}.key -out ${HOSTNAME}-${SERVICE}.csr
 +</​code>​
 +Il est **__//​EXCESSIVEMENT//​__** important que vous indiquiez bien le Fully Qualified Domain Name du nom sous lequel vos clients accéderont au service considéré.
 +        [...]
 +        Common Name (eg, YOUR name) []:FQDN
 +        [...]
 +
 +Par exemple, si votre serveur de e-commerce est accessible aux clients via l'url https://​lolboutique.gruik-commerce.com/,​ vous devrez indiquer en FQDN "​lolboutique.gruik-commerce.com"​.
 +
 +==== Méthode alternative ====
 +On peut, à la place des deux étapes du dessus (pour ne pas avoir de
 +passphrase),​ effectuer la passe suivante.
 +
 +<​code>​
 +openssl req -new -nodes -out ${HOSTNAME}-${SERVICE}.pem -keyout ${HOSTNAME}-${SERVICE}.key
 +</​code>​
 +
 +==== Signature de la demande par le CA =====
 +
 +<​code>​
 +openssl x509 -req -in ${HOSTNAME}-${SERVICE}.csr -out ${HOSTNAME}-${SERVICE}.crt -sha1 -CA /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt -CAkey /​etc/​ssl/​CA/​${HOSTNAME}-ca.key -CAcreateserial -days 3650
 +</​code>​
 +ou, si vous avez suivi la méthode alternative du dessus
 +<​code>​
 +openssl x509 -req -in ${HOSTNAME}-${SERVICE}.pem -out ${HOSTNAME}-${SERVICE}.crt -sha1 -CA /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt -CAkey ​
 +/​etc/​ssl/​CA/​${HOSTNAME}-ca.key -CAcreateserial -days 3650 && rm ${HOSTNAME}-${SERVICE}.pem
 +</​code>​
 +
 +
 +
 +ATTENTION: ce certificat et cette clé seront valides pour uniquement pour
 +un serveur ayant le nom FQDN spécifié. Il faudra générer autant de
 +couple clé/​certificat que le serveur hébergera de Virtual Host (en supposant que vous ayiez plusieurs IP sur la babasse)
 +
 +==== L'​export p12 ====
 +<​code>​
 +export USER="​monuser"​
 +openssl pkcs12 -export -in ${HOSTNAME}-${USER}.crt -inkey ${HOSTNAME}-${USER}.key -out ${HOSTNAME}-${USER}.p12 -name "​${USER}"​
 +</​code>​
 +
 +==== La révocation d'un certificat ====
 +
 +<​code>​
 +openssl ca -revoke ${HOSTNAME}-${USER}.crt -keyfile /​etc/​ssl/​CA/​${HOSTNAME}-ca.key -cert /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt
 +openssl ca -gencrl -crlexts crl_ext -md sha1 -out CA/​${HOSTNAME}-ca.crl
 +</​code>​
 +
 +On révoque le certificat et on met à jour la liste des révocations.
 +
 +
 +==== Bonus, la conf Apache ====
 +<​code>​
 +SSLCertificateFile /​etc/​ssl/​www/​${HOSTNAME}-www.crt
 +SSLCertificateKeyFile /​etc/​ssl/​www/​${HOSTNAME}-www.key
 +SSLCertificateChainFile /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt
 +SSLCACertificateFile /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt
 +SSLCARevocationFile /​etc/​ssl/​CA/​${HOSTNAME}-ca.crl
 +</​code>​
 +
 +Il faut aussi publier le certificat de l'AC, donc copier /​etc/​ssl/​CA/​${HOSTNAME}-ca.crt dans un répertoire web et ajouter
 +<​code>​
 +AddType application/​x-x509-ca-cert .crt
 +</​code>​
 +
 +SSLCARevocationFile va nous servir lors des futures révocations
 +
 +
 +
 +__ChangeLog__\\
 +10 mai 2007: créée -- //mat//\\
 +25 Sept. 2008: mise à jour -- //​jadawin//​\\
 +---------- ​
 +TODO: certificats de révocation.
  
unix/openssl_et_ac.txt · Last modified: 2010/01/12 13:29 (external edit)