certificat firefox https ssl
Créer un certificat importable dans Firefox
Il est possible de créer des certificats, et ensuite de les importer dans Firefox pour les utiliser sur un site. Quel interêt ? Tout simplement d'identifier une personne sans qu'elle n'ai besoin d'entrer un mot de passe. La connexion reste sécurisé grâce à l'https d'Apache, et seul l'unique certificat généré sera le passe pour entrer.
Voici comment procéder sous Linux.
Créez un répertoire afin d'y placer tous les fichiers de certificat qui seront créés.
mkdir ~/certif cd ~/certif
Ensuite, il faut créer 2 sous-répertoires pour les certificats racines.
mkdir certs private
Il nous faut ensuite créer un fichier serial, et un fichier certindex.txt pour indexer les certificats au fur et à mesure.
echo '100001' >serial touch certindex.txt
Pour finir, nous allons créer un fichier de configuration pour openssl que nous nommerons « openssl.cnf ». En nommant le fichier de cette façon, vous n'aurez plus qu'à faire un copier coller des commandes qui suivent dans ce tutoriel. Voici un exemple de fichier de configuration pour openssl qui peut être ajusté à votre guise.
# # OpenSSL configuration file. # # Establish working directory. dir = . [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/certindex.txt new_certs_dir = $dir/certs certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #------------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------ ------------------------------ 0.organizationName_default = My Company localityName_default = My Town stateOrProvinceName_default = State or Providence countryName_default = US [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash
Maintenant, on fabrique le certicat racine.
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf
Il vous sera demandé une passe phrase qu'il faut retenir et protéger. Vu qu'il s'agit d'un certificat global, j'ai préféré mettre 10 ans de validité.
Voici une étape de faites, maintenant il faut créer le certificat PKCS12 qui pourra être importé dans Firefox.
Tapez la commande suivante :
openssl req -new -nodes -out name-req.pem -keyout private/name-key.pem -days 365 -config ./openssl.cnf
Entrez les informations qui vous sont demandés comme vous le souhaitez, mais faites attention pour le paramètre « Common Name », indiquez-y l'URL du site sur lequel sera utilisé le certificat (par exemple, admin.domaine.fr, si le site est https://admin.domaine.fr/).
Tapez maintenant cette commande :
openssl ca -out name-cert.pem -days 365 -config ./openssl.cnf -infiles name-req.pem
Et enfin celle-ci :
openssl pkcs12 -export -in name-cert.pem -inkey private/name-key.pem -certfile cacert.pem -name "[friendly name]" -out name-cert.p12
Entrez un « export password » pour protéger l'importation de la clé. Firefox vous demandera ce mot de passe lors de l'importation de la clé, cela sécurise d'autant plus la clé.
Voilà, maintenant en vous rendant sur le site, vous allez avoir dans la variable PHP « $_SERVER['SSL_CLIENT_CERT'] » le certificat que vous venez de créer. Il vous suffit de faire une comparaison avec une base de données de clé pour authentifier l'utilisateur.