Cryptographie en java 2/3 : Mise en oeuvre sous linux avec openssl

Création et utilisation de mes clés

Création de la clé publique et de la clé privée

Rien de tel que la ligne de commande pour mieux comprendre comment tout s'articule.

Voici la commande la plus basique pour créer une clé. Il y a de nombreuses options, notamment pour modifier la taille de la clé et donc augmenter la sécurité.

 openssl genrsa -out macle 

J'obtiens un fichier "macle" qui contient les informations suivantes :

 -----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBAKXu5nR7bqwMw2YKOs6VGBn1+WIi/rR5Rxk+VFc7dBhKtZ6usUSy YdgzeRjHcMyulwvZzxkpIZ1ixBvNKAZEV60CAwEAAQJASqcx3aQOxa80VfsyO/EO F9f3a/SMnUuW9j95mIlyEN8KXcshx2xI3uz7qPi9Th9SIv/6eoaTQcGu2Ynxb+3I LQIhANGquiLFVCYsmPn7erd6gq14Is1+SgBE/hxTeLBL5ee/AiEAypoSKtGoviN9 t9HJGvSfQ6dnz2PwDdm3v8vLx/r4+5MCIQC7A2Vzjj84rZ7lmwIilgvpXrbsRDEN fHyMF4gW+BvhUQIhAKbZg6SnzWPpLpu3tPryAkdhEmkFUKjXaDAX0db7pRjpAiBp rOD5SA3Wq/GDzB0w9ffhXgKw+8rpkMW8/VkECEuKVg== -----END RSA PRIVATE KEY----- 

C'est sous cette forme que se présente une clé privée la plupart du temps.

Une fois que j'ai obtenu ma clé privée, il me faut extraire ma clé publique pour pouvoir l'envoyer à mes correspondants :

 openssl rsa -in macle -pubout -out macle.pub 

A nouveau je n'utilise aucune option de manière à avoir la commande la plus simple possible, j'obtiens ainsi le fichier "macle.pub" suivant :

 -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKXu5nR7bqwMw2YKOs6VGBn1+WIi/rR5 Rxk+VFc7dBhKtZ6usUSyYdgzeRjHcMyulwvZzxkpIZ1ixBvNKAZEV60CAwEAAQ== -----END PUBLIC KEY----- 

C'est ce fichier que j'envoie à mes correspondants.

Signature et vérification de la signature

Déjà il me faut un fichier à signer. Si vous n'en avez pas un sous la main, la commande suivante devrait vous dépanner :

 echo "Bonjour tout le monde" > clair.txt 

J'utilise la sous-commande dgst pour signer le fichier "clair.txt" à l'aide de ma clé privée "macle" :

 openssl dgst -sign macle clair.txt > clair.sig 

J'envoie ensuite à mon correspondant le fichier original et le fichier de signature. Il utilisera alors ma clé publique "macle.pub" pour vérifier ma signature. Ce qui est vraiment vérifié, c'est à la fois que le fichier clair.sig à bien été généré avec ma clé privée et également que le fichier clair.txt n'a pas été modifié depuis la signature.

openssl dgst -verify macle.pub -signature clair.sig clair.txt

Si tout est correct, la commande répond "Verified OK". Si le fichier original ou la signature a été modifiée, on obtient "Verification Failure".

Cryptage et decryptage d'un fichier

Pour crypter un fichier à l'aide de la clé publique :

 openssl rsautl -encrypt -pubin -inkey macle.pub -in clair.txt -out crypte.enc 

Le fichier crypte.enc n'est pas un fichier texte. Il est obligatoire de posséder la clé privée pour décrypter :

 openssl rsautl -decrypt -inkey macle -in crypte.enc -out decrypte.dec 

On obtient bien deux fichiers identiques : decrypte.dec = clair.txt !

Gestion des certificats

Pour me relier à ma clé publique, Il faut que je demande à une autorité de certification de ... certifier ma clé publique et de la lier à mes informations personnelles. Pour cela je dois générer une demande de certificat en utilisant ma clé privée :

 openssl req -new -key macle > macle.csr 

Pour créer ma demande, je dois répondre à quelques questions :

 Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:ILE-DE-FRANCE Locality Name (eg, city) []:PARIS Organization Name (eg, company) [Internet Widgits Pty Ltd]:NETAPSYS Organizational Unit Name (eg, section) []:POLE JAVA Common Name (e.g. server FQDN or YOUR name) []:netapsys.com Email Address []:contact@netapsys.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:monpassword An optional company name []:MA COMPAGNIE 

J'envoie ensuite ce fichier à l'autorité de certification.

Pour les besoins du test, nous allons personnifier l'autorité de certification et ainsi signer nous même notre certificat. Evidemment ce certificat ne sera pas automatiquement accepté par les logiciels mais il restera utilisable la plupart du temps en créant une exception dans le logiciel. On parle de certificat auto-signé.

Je crée donc la clé de l'autorité de certification, puis le certificat :

 openssl genrsa -out ca openssl req -new -x509 -days 365 -key ca > ca.crt 

On remplit nos propres informations :

 Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:ILE-DE-FRANCe Locality Name (eg, city) []:PARIS Organization Name (eg, company) [Internet Widgits Pty Ltd]:CERTIF NETAPSYS Organizational Unit Name (eg, section) []:CERTIFICATION Common Name (e.g. server FQDN or YOUR name) []:certif-netapsys.com Email Address []:certif@netapsys.com 

On peut maintenant valider la demande de certificat avec la cle privée de notre autorité de certification.

 openssl x509 -req -in macle.csr -out macle.crt -CA ca.crt -CAkey ca -CAcreateserial -CAserial ca.srl 

Le fichier macle.crt contient notre certificat, que nous allons pouvoir intégrer dans notre Keystore dans une troisième partie consacrée plus spécifiquement à JAVA.