certificats

les différents formats de certificats
x509C'est une norme et format de certificats électroniques utilisés pour les mails électroniques, IPSec et les applications WWW.X.509 établit entre autres un format standard de certificat électronique et un algorithme pour la validation de chemin de certification.On l'utilise donc pour chiffrer les communications avec le protocole TLS.Il stocke plusieurs objets :
Le premier objet contient tout ce qui est intéressant qui sera signé, c'est pourquoi nous l'appelons un certificat de signatureLe deuxième objet contient le type de signature utilisé par l'autorité de certification pour signer ce certificat (ex: sha256)Le dernier objet n'est pas un objet, il ne s'agit que de quelques bits qui correspondent à la signature du TBSCertificate après avoir été encodé avec DER
PKCSPKCS (Public Key Cryptography Standards) est un groupe et famille de standards numéro de 1 à 15 définit par RSA Security.On les note de la manière suivante : PKCS #1, PKCS #7, PKCS #12Ces derniers utilisent différents algorithmes comme l'algorithme RSA, algorithme de signature Schnorr et bien d'autres.
ASN.1ASN (Abstract Syntax Notation One) est un schéma de sérialisation standard utilisé dans de nombreux cas d'utilisation différents.Il est couramment utilisé pour les certificats X.509 et certains protocoles de télécommunication / réseau.C'est donc le format de certificat électronique le plus important.En général, il stocke tout un tas d'informations sur le client, le CA, le publickey du client, etc ...
BER, CER et DERles format d'encodage ASN.1 avec les abréviations BER, CER, DER : Basic Encoding Rules (BER) Canonical Encoding Rules (CER) - format réduit de BER Distinguished Encoding Rules (DER) - format réduit de BERC'est un schéma de codage auto-descriptif qui permet la représentation d'éléments de données atomiques simples, tels que des chaînes et des nombres, et des objets complexes, tels que des séquences d'autres éléments.Ces formats font parti de la norme X.690.
PEMPrivacy-Enhanced Mail (PEM) est un format de fichier pour stocker et envoyer des clés cryptographiques, des certificats et d'autres données.Il est très peu courant car supplantées par PGP et S / MIME.C'est un autre format d'encodage sous la forme de string en base64.Les données en base64 sont encadrés par un BEGIN et END.
TROUBLESHOOT
commande de troubeshooting localopenssl s_client -host 127.0.0.1 -port 443 -servername domotrix.fr -showcerts
les conversions de certificats
Convertir DER au format PEMopenssl x509 –inform der –in <sslcert.der> -out sslcert.pem
Convertir PEM au format DERopenssl x509 –outform der –in <sslcert.pem> -out sslcert.der
Convertir PEM vers PFXopenssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
Convertir PFX vers PEMopenssl pkcs12 -in <certificate.pfx> -out certificate.cer -nodes
Convertir PFX vers PKCS#12 (.p12)openssl pkcs12 –export –out sslcert.pfx –inkey key.pem -in sslcert.pem
Convertir P7B vers PEMopenssl pkcs7 -print_certs -in <certificate.p7b> -out certificate.cer
Convertir P7B vers PFXopenssl pkcs7 -print_certs -in <certificate.p7b> -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
Convertir PKCS#12 (.p12) en PEMopenssl pkcs12 -in <cert.p12> -out cert.pem





openssl
Création d’une demande de certificat pour un serveur openssl req -nodes -newkey rsa:2048 -sha256 -keyout client.key -out client.csr
run l'exploit avec les paramètres definis
fichier de configuration
par défault la commande openssl fait appel à un fichier de configuration situé dans /etc/ssl/openssl.cnf
il est possible de préciser un autre fichier en utilisant l'option -config certificats/conf.cnf
fichier openssl.cnf
HOME .
oid_section new_oidsCela spécifie une section dans le fichier de configuration contenant des identifiants d'objet supplémentaires. Chaque ligne doit être composée du nom abrégé de l'identifiant d'objet suivi de = et de la forme numérique. Les noms courts et longs sont les mêmes lorsque cette option est utilisée.
openssl_confdefault_conf
[ new_oids ]
tsa_policy11.2.3.4.1
tsa_policy21.2.3.4.5.6
tsa_policy31.2.3.4.5.7
[ ca ]
default_ca CA_default The default ca section
[ CA_default ]
toutes les options de défault des certificats
dir ./certificatsla variable $dir qui définieras le dossier racine des opérations
certs $dir/certsPath ou les certificats certs seront générés
crl_dir $dir/crlOù sont stockés les crl
database $dir/index.txtun fichier de base de donné ou sont stoqué les certificats, separé par des tabulations :
status flag (V=valid, R=revoked, E=expired).
Certificate expiration date in YYMMDDHHMMSSZ format. date de révocation du certificat format: YYMMDDHHMMSSZ[,raison] . vide s'il n'est pas révoqué
numéro de série en hexadécimal
nom du fichier ou 'unknown'.
Nom distinctif du certificat
exemple : V YYMMDDHHMMSSZ[] unknown domotrix
unique_subject noSi la valeur oui est donnée, les entrées de certificat valides dans la base de données doivent avoir des sujets uniques. si la valeur no est donnée, plusieurs entrées de certificat valides peuvent avoir exactement le même sujet. La valeur par défaut est yes, pour être compatible avec les anciennes versions (avant 0.9.8) d'OpenSSL.
new_certs_dir $dir/certschemin où sont stoqués par default les nouveaux certs.
certificate $dir/certs/CA.crtL'autorité de certification (CA certificate authority)
serial $dir/serialUn fichier texte contenant le prochain numéro de série à utiliser en hexadécimal. Ce fichier doit être présent et contenir un numéro de série valide
crlnumber $dir/crlnumberUn fichier texte contenant le prochain numéro CRL à utiliser en hexadécimal. Le numéro de crl sera inséré dans les CRL uniquement si ce fichier existe. Si ce fichier est présent, il doit contenir un numéro CRL valide
crl $dir/crl.pemfichier contenant une liste de des certificats revoqués (certificate revocation list file) Ce fichier contient les listes de révocation de certificats (CRL) que le client utilise pour valider les certificats numériques, au format PEM.
private_key $dir/private/CA_RSA.keyLa clef privée
x509_extensionsusr_certles extentions à ajouter au certificat
name_opt ca_defaultCes options autorise le format utilisé à afficher les détails du certificat lorsqu'il demande à l'utilisateur de confirmer la signature
cert_opt ca_default
default_days 1461Le nombre de jours pour certifier un certificat
default_crl_days 30combien de temps avant la prochaine CRL
default_md defaultla clé publique MD par défaut,Obligatoire sauf lorsque l'algorithme de signature ne nécessite pas de résumé (c'est-à-dire Ed25519 et Ed448)
preserve noNormalement, l'ordre DN d'un certificat est le même que l'ordre des champs dans la section de stratégie pertinente. Lorsque cette option est définie, l'ordre est identique à la demande. C'est en grande partie pour la compatibilité avec l'ancien contrôle d'inscription IE qui n'accepterait les certificats que si leurs DN correspondent à l'ordre de la demande
policy policy_matchLa section policy consiste en un ensemble de variables correspondant aux champs DN du certificat. Si la valeur est "match", la valeur du champ doit correspondre au même champ dans le certificat CA. Si la valeur est "fournie", elle doit être présente. Si la valeur est "facultative", elle peut être présente. Tous les champs non mentionnés dans la section politique sont supprimés en silence, à moins que l'option -preserveDN ne soit définie, mais cela peut être considéré plus comme une bizarrerie que comme prévu
[ policy_match ]
Dans cette politique, tous les champs répertoriés comme "match" doivent contenir exactement le même contenu que ce champ dans le DN de l'autorité de certification. Tous les champs répertoriés comme "supplied" doivent être présents. Tous les champs répertoriés comme "optional" sont autorisés, mais ne sont pas tenus d'y figurer.
countryName [match,supplied,optional]nom du pays
stateOrProvinceName [match,supplied,optional]nom de l'état ou de la province
organizationName [match,supplied,optional]nom de l'organisation
organizationalUnitName [match,supplied,optional]Nom de l'établissement
commonName [match,supplied,optional]Le nom commun (CN), également connu sous le nom de nom de domaine complet (FQDN), est la valeur caractéristique d'un nom distinctif (DN). En règle générale, il est composé du nom de domaine de l'hôte et ressemble à "www.digicert.com" ou "digicert.com".
emailAddress [match,supplied,optional]l'adresse email à contacter en cas de problème avec le certificat
[ policy_anything ]
countryName [match,supplied,optional]nom du pays
stateOrProvinceName optionalnom de l'état ou de la province
localityName supplied
organizationName matchnom de l'organisation
organizationalUnitName optionalNom de l'établissement
commonName suppliedLe nom commun (CN), également connu sous le nom de nom de domaine complet (FQDN)
emailAddress suppliedl'adresse email a rattacher au certificat
[ req ]
définit les sections du certificat, ainsi que les jours et les champs de série. Ce champ est obligatoire et doit être exactement [req]. Vous pouvez spécifier les champs suivants dans cette section :
default_bits 2048Spécifie la taille de clé par défaut en bits.Cette option est utilisée conjointement avec l'option -new pour générer une nouvelle clé. Elle peut être remplacée en spécifiant une taille de clé explicite dans l'option -newkey. La plus petite taille de clé acceptée est de 512 bits. Si aucune taille de clé n'est spécifiée, 2048 bits sont utilisés.
default_keyfile privkey.pemle fichier de clef privée par défault
distinguished_name req_distinguished_namespécifie la section qui définit les informations nécessaires pour générer un certificat auto-signé ou une demande de certificat, où req_distinguished_name est le nom de la section
attributes req_attributes
x509_extensionsv3_ca The extensions to add to the self signed cert
string_maskutf8onlyCela définit le type de chaînes à accepter. Essentiellement des chaînes imprimables non UTF.
[ req_distinguished_name ]
countryName Country Name (2 letter code)la restriction de taille pour le nom du pays
countryName_default FRles nom du pay par défault
countryName_min 2le nombre minimum de lettre pour désigner le pay
countryName_max 2le nombre maximum de lettre pour désigner le pay
stateOrProvinceName State or Province Name (full name)
stateOrProvinceName_default Sommenom de la région ou du département par défault
localityName Locality Name (eg, city)Nom de la localité (ville)
localityName_default AmiensLe nom de la localité par défault.
0.organizationName Organization Name (eg, company)Nom de l'organisation (par exemple, société); le "0" indique qu'il s'agit de la première entrée pour organizationName. Puisqu'il peut s'agir d'un champ à valeurs multiples
0.organizationName_default ISRINom de l'organisation par défault
organizationalUnitName Nom du service (ex, section)
organizationalUnitName_default M1Nom du service par défault
commonName Common Name (e.g. server FQDN or YOUR name)Le nom commun (CN), également connu sous le nom de nom de domaine complet (FQDN)
commonName_default domotrix.domotrixLe nom commun (CN ou FQDN) par default
commonName_max 64le nombre de caractère maximum du CN
emailAddress Email Addressl'adresse email
emailAddress_default tanguy.schnellbach@domotrix.frl'adresse email par default
emailAddress_max 64le nombre de caractère maximum de l'adresse email
[ req_attributes ]
défini les attributs supplémentaires pour les demandes
challengePassword A challenge passwordle mot de passe
challengePassword_min 4le nombre minimum de caratère pour le mot de passe
challengePassword_max 20le nombre maximum de caractère pou le mot de passe
unstructuredName An optional company nameLe noms non structurés est destinée à être spécifiée par les émetteurs de certificats
[ usr_cert ]
basicConstraints=CA:FALSE
nsComment "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ v3_req ]
Cette section définit les extensions x509v3 à demander dans les requêtes
basicConstraintsCA:FALSE
keyUsagenonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraintscritical,CA:true
[ crl_ext ]
authorityKeyIdentifier=keyid:always
[ proxy_cert_ext ]
basicConstraints=CA:FALSE
nsComment "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
[ tsa ]
default_tsatsa_config1the default TSA section
[ tsa_config1 ]
dir ./demoCA TSA root directory
serial $dir/tsaserial The current serial number (mandatory)
crypto_device builtin OpenSSL engine to use for signing
signer_cert $dir/tsacert.pem The TSA signing certificate
certs $dir/cacert.pem Certificate chain to include in reply
signer_key $dir/private/tsakey.pem The TSA private key (optional)
signer_digest sha256 Signing digest to use. (Optional)
default_policy tsa_policy1 Policy if request did not specify it
other_policies tsa_policy2, tsa_policy3 acceptable policies (optional)
digests sha1, sha256, sha384, sha512 Acceptable message digests (mandatory)
accuracy secs:1, millisecs:500, microsecs:100 (optional)
clock_precision_digits 0 number of digits after dot. (optional)
ordering yes Is ordering defined for timestamps?
tsa_name yes Must the TSA name be included in the reply?
ess_cert_id_chain no Must the ESS cert id chain be included?
ess_cert_id_alg sha1 algorithm to compute certificate
[default_conf]
ssl_confssl_sect
[ssl_sect]
system_defaultsystem_default_sect
[system_default_sect]
MinProtocolTLSv1.2
CipherStringDEFAULT@SECLEVEL=2
[ server_cert ]
crlDistributionPointsURI:http://path/certificats/crl/list_revok.crl





script de création de certificats auto signé
Alors non, celà ne sert pas à rien! dans les fait un certificat auto-signé ne serviras pas en production mais ce site ayant une valeur pédagogique,
celà vous permet d'apréhender les différents fichiers/étapes dans la création d'un certificats.

#!/bin/bash

[ $# -lt 1 ] && echo	" nombre d arguement invalide  "$'\n'" 0 -> creation du certificat racine  "$'\n'" 1 + nom -> creation du certificat client  " && exit 1 

if [ $1 -eq 0 ]
then

echo "bonjour je vais cous crée les certificats"
mkdir -p certificats/certs certificats/crl certificats/keys certificats/private certificats/req certificats/client
touch certificats/conf.cnf
echo 00 > certificats/crlnumber

echo 'HOME			= .' >  certificats/conf.cnf
echo 'oid_section		= new_oids' >>  certificats/conf.cnf
echo 'openssl_conf = default_conf' >>  certificats/conf.cnf
echo '[ new_oids ]' >>  certificats/conf.cnf
echo 'tsa_policy1 = 1.2.3.4.1' >>  certificats/conf.cnf
echo 'tsa_policy2 = 1.2.3.4.5.6' >>  certificats/conf.cnf
echo 'tsa_policy3 = 1.2.3.4.5.7' >>  certificats/conf.cnf
echo '[ ca ]' >>  certificats/conf.cnf
echo 'default_ca	= CA_default		# The default ca section' >>  certificats/conf.cnf
echo '[ CA_default ]' >>  certificats/conf.cnf
echo 'dir		= ./certificats		# T Where everything is kept' >>  certificats/conf.cnf
echo 'certs		= $dir/certs		# A Where the issued certs are kept' >>  certificats/conf.cnf
echo 'crl_dir		= $dir/crl		# N Where the issued crl are kept' >>  certificats/conf.cnf
echo 'database	= $dir/index.txt	# G database index file.' >>  certificats/conf.cnf
echo 'unique_subject	= no			# U Set to 'no' to allow creation of' >>  certificats/conf.cnf
echo 'new_certs_dir	= $dir/certs		# Y default place for new certs.' >>  certificats/conf.cnf
echo 'certificate	= $dir/certs/CA.crt 	# . The CA certificate' >>  certificats/conf.cnf
echo 'serial		= $dir/serial 		# S The current serial number' >>  certificats/conf.cnf
echo 'crlnumber	= $dir/crlnumber	# C the current crl number' >>  certificats/conf.cnf
echo 'crl		= $dir/crl.pem 		# H The current CRL' >>  certificats/conf.cnf
echo 'private_key	= $dir/private/CA_RSA.key # N The private key' >>  certificats/conf.cnf
echo 'x509_extensions	= usr_cert		# E The extensions to add to the cert' >>  certificats/conf.cnf
echo 'name_opt 	= ca_default		# L Subject Name options' >>  certificats/conf.cnf
echo 'cert_opt 	= ca_default		# L Certificate field options' >>  certificats/conf.cnf
echo 'default_days	= 1461			# B how long to certify for' >>  certificats/conf.cnf
echo 'default_crl_days= 30			# A how long before next CRL' >>  certificats/conf.cnf
echo 'default_md	= default		# C use public key default MD' >>  certificats/conf.cnf
echo 'preserve	= no			# H keep passed DN ordering' >>  certificats/conf.cnf
echo 'policy		= policy_match' >>  certificats/conf.cnf
echo '[ policy_match ]' >>  certificats/conf.cnf
echo 'countryName		= match' >>  certificats/conf.cnf
echo 'stateOrProvinceName	= match' >>  certificats/conf.cnf
echo 'organizationName	= match' >>  certificats/conf.cnf
echo 'organizationalUnitName	= optional' >>  certificats/conf.cnf
echo 'commonName		= supplied' >>  certificats/conf.cnf
echo 'emailAddress		= optional' >>  certificats/conf.cnf
echo '[ policy_anything ]' >>  certificats/conf.cnf
echo 'countryName		= supplied' >>  certificats/conf.cnf
echo 'stateOrProvinceName	= optional' >>  certificats/conf.cnf
echo 'localityName		= supplied' >>  certificats/conf.cnf
echo 'organizationName	= match' >>  certificats/conf.cnf
echo 'organizationalUnitName	= optional' >>  certificats/conf.cnf
echo 'commonName		= supplied' >>  certificats/conf.cnf
echo 'emailAddress		= supplied' >>  certificats/conf.cnf
echo '[ req ]' >>  certificats/conf.cnf
echo 'default_bits		= 2048' >>  certificats/conf.cnf
echo 'default_keyfile 	= privkey.pem' >>  certificats/conf.cnf
echo 'distinguished_name	= req_distinguished_name' >>  certificats/conf.cnf
echo 'attributes		= req_attributes' >>  certificats/conf.cnf
echo 'x509_extensions	= v3_ca	# The extensions to add to the self signed cert' >>  certificats/conf.cnf
echo 'string_mask = utf8only' >>  certificats/conf.cnf
echo '[ req_distinguished_name ]' >>  certificats/conf.cnf
echo 'countryName			= Country Name (2 letter code)' >>  certificats/conf.cnf
echo 'countryName_default		= FR' >>  certificats/conf.cnf
echo 'countryName_min			= 2' >>  certificats/conf.cnf
echo 'countryName_max			= 2' >>  certificats/conf.cnf
echo 'stateOrProvinceName		= State or Province Name (full name)' >>  certificats/conf.cnf
echo 'stateOrProvinceName_default	= Somme' >>  certificats/conf.cnf
echo 'localityName			= Locality Name (eg, city)' >>  certificats/conf.cnf
echo 'localityName_default		= Amiens' >>  certificats/conf.cnf
echo '0.organizationName		= Organization Name (eg, company)' >>  certificats/conf.cnf
echo '0.organizationName_default	= ISRI' >>  certificats/conf.cnf
echo 'organizationalUnitName		= Organizational Unit Name (eg, section)' >>  certificats/conf.cnf
echo 'organizationalUnitName_default	= M1' >>  certificats/conf.cnf
echo 'commonName			= Common Name (e.g. server FQDN or YOUR name)' >>  certificats/conf.cnf
echo 'commonName_default		= 127.0.0.1 ' >>  certificats/conf.cnf
echo 'commonName_max			= 64' >>  certificats/conf.cnf
echo 'emailAddress			= Email Address' >>  certificats/conf.cnf
echo 'emailAddress_default		= tanguy.schnellbach@domotrix.fr' >>  certificats/conf.cnf
echo 'emailAddress_max		= 64' >>  certificats/conf.cnf
echo '[ req_attributes ]' >>  certificats/conf.cnf
echo 'challengePassword		= A challenge password' >>  certificats/conf.cnf
echo 'challengePassword_min		= 4' >>  certificats/conf.cnf
echo 'challengePassword_max		= 20' >>  certificats/conf.cnf
echo 'unstructuredName		= An optional company name' >>  certificats/conf.cnf
echo '[ usr_cert ]' >>  certificats/conf.cnf
echo 'basicConstraints=CA:FALSE' >>  certificats/conf.cnf
echo 'nsComment			= "OpenSSL Generated Certificate"' >>  certificats/conf.cnf
echo 'subjectKeyIdentifier=hash' >>  certificats/conf.cnf
echo 'authorityKeyIdentifier=keyid,issuer' >>  certificats/conf.cnf
echo '[ v3_req ]' >>  certificats/conf.cnf
echo 'basicConstraints = CA:FALSE' >>  certificats/conf.cnf
echo 'keyUsage = nonRepudiation, digitalSignature, keyEncipherment' >>  certificats/conf.cnf
echo '[ v3_ca ]' >>  certificats/conf.cnf
echo 'subjectKeyIdentifier=hash' >>  certificats/conf.cnf
echo 'authorityKeyIdentifier=keyid:always,issuer' >>  certificats/conf.cnf
echo 'basicConstraints = critical,CA:true' >>  certificats/conf.cnf
echo '[ crl_ext ]' >>  certificats/conf.cnf
echo 'authorityKeyIdentifier=keyid:always' >>  certificats/conf.cnf
echo '[ proxy_cert_ext ]' >>  certificats/conf.cnf
echo 'basicConstraints=CA:FALSE' >>  certificats/conf.cnf
echo 'nsComment			= "OpenSSL Generated Certificate"' >>  certificats/conf.cnf
echo 'subjectKeyIdentifier=hash' >>  certificats/conf.cnf
echo 'authorityKeyIdentifier=keyid,issuer' >>  certificats/conf.cnf
echo 'proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo' >>  certificats/conf.cnf
echo '[ tsa ]' >>  certificats/conf.cnf
echo 'default_tsa = tsa_config1	# the default TSA section' >>  certificats/conf.cnf
echo '[ tsa_config1 ]' >>  certificats/conf.cnf
echo 'dir		= ./demoCA		# TSA root directory' >>  certificats/conf.cnf
echo 'serial		= $dir/tsaserial	# The current serial number (mandatory)' >>  certificats/conf.cnf
echo 'crypto_device	= builtin		# OpenSSL engine to use for signing' >>  certificats/conf.cnf
echo 'signer_cert	= $dir/tsacert.pem 	# The TSA signing certificate' >>  certificats/conf.cnf
echo 'certs		= $dir/cacert.pem	# Certificate chain to include in reply' >>  certificats/conf.cnf
echo 'signer_key	= $dir/private/tsakey.pem # The TSA private key (optional)' >>  certificats/conf.cnf
echo 'signer_digest  = sha256			# Signing digest to use. (Optional)' >>  certificats/conf.cnf
echo 'default_policy	= tsa_policy1		# Policy if request did not specify it' >>  certificats/conf.cnf
echo 'other_policies	= tsa_policy2, tsa_policy3	# acceptable policies (optional)' >>  certificats/conf.cnf
echo 'digests     = sha1, sha256, sha384, sha512  # Acceptable message digests (mandatory)' >>  certificats/conf.cnf
echo 'accuracy	= secs:1, millisecs:500, microsecs:100	# (optional)' >>  certificats/conf.cnf
echo 'clock_precision_digits  = 0	# number of digits after dot. (optional)' >>  certificats/conf.cnf
echo 'ordering		= yes	# Is ordering defined for timestamps?' >>  certificats/conf.cnf
echo 'tsa_name		= yes	# Must the TSA name be included in the reply?' >>  certificats/conf.cnf
echo 'ess_cert_id_chain	= no	# Must the ESS cert id chain be included?' >>  certificats/conf.cnf
echo 'ess_cert_id_alg		= sha1	# algorithm to compute certificate' >>  certificats/conf.cnf
echo '[default_conf]' >>  certificats/conf.cnf
echo 'ssl_conf = ssl_sect' >>  certificats/conf.cnf
echo '[ssl_sect]' >>  certificats/conf.cnf
echo 'system_default = system_default_sect' >>  certificats/conf.cnf
echo '[system_default_sect]' >>  certificats/conf.cnf
echo 'MinProtocol = TLSv1.2' >>  certificats/conf.cnf
echo 'CipherString = DEFAULT@SECLEVEL=2' >>  certificats/conf.cnf
echo '[ server_cert ]' >>  certificats/conf.cnf
echo 'crlDistributionPoints = URI:http://path/certificats/crl/list_revok.crl' >>  certificats/conf.cnf

touch certificats/index.txt
touch certificats/index.txt.attr
echo -n 00 > certificats/serial 

openssl genrsa -out certificats/private/CA_RSA.key 4096

openssl pkey -in certificats/private/CA_RSA.key -pubout -out certificats/keys/CA_RSA-pub.key

openssl req -x509 -sha256 -days 1460 -key certificats/private/CA_RSA.key  -config certificats/conf.cnf -out certificats/certs/CA.crt

else
[ $# -lt 2 ] && echo "$DATE nombre d arguement invalide  "$'\n'\
                "0 -> creation du certificat racine "$'\n'\ 
                "1 + nom -> creation du certificat client " && exit 1

	openssl genrsa -out certificats/client/CA_RSA-$2.key 2048 
	openssl pkey -in certificats/client/CA_RSA-$2.key -pubout -out certificats/client/CA_RSA-$2-pub.key
	openssl req -new -key certificats/client/CA_RSA-$2.key -out certificats/req/$2.csr -config certificats/conf.cnf
	openssl ca -in certificats/req/$2.csr -out certificats/certs/$2.crt -config certificats/conf.cnf

	#creation du certificat client
	sudo openssl pkcs12 -export -in certificats/certs/$2.crt -inkey certificats/client/CA_RSA-$2.key -out $2.pfx
fi