creer_un_certificat_importable_dans_firefox

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.

  • creer_un_certificat_importable_dans_firefox.txt
  • Dernière modification: 2009/04/19 15:42
  • (modification externe)