Aller au contenu

Autorité de certification

Introduction

Lors des échanges entre un client web, ldap, imap et un serveur, les données circulent en clair sur internet. Cela signifie qu'une personne mal intentionnée peut "sniffer" le réseau et capturer des données sensibles (mot de passe, données personnelles, numéro de carte de crédit, etc.).

En cryptographie, une Autorité de Certification (AC ou CA pour Certificate Authority en anglais) est un tiers de confiance permettant d'authentifier l'identité des correspondants. Une autorité de certification délivre des certificats décrivant des identités numériques et met à disposition les moyens de vérifier la validité des certificats qu'elle a fournis. Wikipedia. Pour plus d'information taper ssl comment ca marche sur votre moteur de recherche préféré.

Il existe plusieurs autorité de certifications:

  • goDaddy
  • SwissSign
  • thawte
  • veriSign
  • ...

L'avantage de celles-ci c'est que leurs certificats sont déjà installés dans votre navigateur.

Mais il peut s'avérer utilie de créer sa propre autorité de certification.

Préparation

Dossier

mkdir certificats
cd certificats

Fichier de configuration

Créer le fichier ca-config avec le contenu ci-dessous en adaptant la section [ req_distinguished_name ].

HOME            = .
RANDFILE        = $ENV::HOME/.rnd
oid_section     = new_oids

[ new_oids ]

[ ca ]
default_ca  = CA_default        # The default ca section
[ CA_default ]
dir     = .     # Where everything is kept
certs       = $dir/certs        # Where the issued certs are   kept
crl_dir     = $dir/crl      # Where the issued crl are kept
database    = $dir/dbca/index.txt   # database index file.
new_certs_dir   = $dir/newcerts     # default place for new certs.
certificate = $dir/cacert.pem   # The CA certificate
serial      = $dir/serial/serial        # The current serial number
crl     = $dir/crl.pem      # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE    = $dir/private/.rand    # private random number file
x509_extensions = usr_cert      # The extentions to add to the cert
default_days    = 365           # how long to certify for
default_crl_days= 30            # how long before next CRL
default_md  = md5           # which md to use.
preserve    = no            # keep passed DN ordering
policy      = policy_match

[ policy_match ]
countryName     = match
stateOrProvinceName = match
organizationName    = match
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

[ policy_anything ]
countryName     = optional
stateOrProvinceName = optional
localityName        = optional
organizationName    = optional
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

[ req ]
default_bits        = 1024
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes      = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
string_mask = nombstr

[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default     = CH
countryName_min         = 2
countryName_max         = 2

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = Vaud

localityName            = Locality Name (eg, city)
localityName_default        = Nyon

0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = GMO Documentation (gmodocs)

organizationalUnitName      = Organizational Unit Name (eg, section)

organizationalUnitName_default  = SDOCS (Service de la documentation)

commonName          = Common Name (eg, YOUR name)
commonName_default  = GMODocs CA
commonName_max          = 64

emailAddress            = Email Address
emailAddress_default        = docs.gmo@gmail.com
emailAddress_max        = 40

[ req_attributes ]
challengePassword       = A challenge password
challengePassword_min       = 4
challengePassword_max       = 20

unstructuredName        = An optional company name

[ usr_cert ]
basicConstraints=CA:FALSE
nsComment           = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true

[ crl_ext ]
authorityKeyIdentifier=keyid:always,issuer:always

Création de l'autorité de certification

Laisser les paramètres par défaut.

openssl req -new -x509 -extensions v3_ca -days 1825 -newkey rsa:4096 -keyout gmodocs.key -out gmodocs.crt -config ca-config

Mot de passe

Un mot de passe vous est demandé. Choisir un mot de passe fort et mettez-le en sécurité. Il vous sera demandé lors de la création de certificats.

Plusieurs fichiers sont créés.

Fichiers Descriptions
./gmodocs.key Clés privée du certificat (ne pas distribuer). A conserver et à protéger
./gmodocs.crt Certificat utilisé pour signé les certificats. A installer sur les clients

Installation du certificat

Pas traité ici, car chaque navigateur est différent

Linux (Rocky 9)

sudo cp gmodocs.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

** Vérification **

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-bundle.crt
...
subject=C = CH, ST = Vaud, L = Nyon, O = GMO Documentation (gmodocs), OU = SDOCS (Service de la documentation), CN = GMODocs CA, emailAddress = docs.gmo@gmail.com
subject=CN = ACCVRAIZ1, OU = PKIACCV, O = ACCV, C = ES
subject=C = ES, O = FNMT-RCM, OU = AC RAIZ FNMT-RCM
subject=C = ES, O = FNMT-RCM, OU = Ceres, organizationIdentifier = VATES-Q2826004J, CN = AC RAIZ FNMT-RCM SERVIDORES SEGUROS
...

Sources

Create your own CA


Version Date Change Auteur
1.0 18.10.2022 Création GMo