## Intro

Ce guide pratique montre comment inspecter, valider, dépanner et convertir en toute sécurité des certificats TLS avec OpenSSL 3.x. Il distingue quatre vérifications souvent confondues :

- L’analyse d’un fichier de certificat (structure et champs)

- La validation d’une chaîne de certificats (ancre de confiance, intermédiaires et usage)

- La vérification d’un nom d’hôte (contrôle d’identité basé sur le SAN)

- L’établissement d’une connexion TCP/TLS (réussite de la poignée de main)

Vous trouverez des commandes copiables, ce que chaque commande démontre, ce qu’elle ne prouve pas, ainsi que des notes de sécurité pour éviter de perdre des clés ou d’exposer des secrets.

## 1) Identifier votre OpenSSL et l’environnement

Les options et valeurs par défaut varient selon la compilation et la version. OpenSSL 1.1.1 est en fin de vie ; privilégiez OpenSSL 3.x. Notez votre environnement avant de lancer des diagnostics :

openssl version -a 
 Preuves attendues : version d’OpenSSL, indicateurs de compilation, OPENSSLDIR, fournisseurs (providers) et emplacements de confiance par défaut. Ces éléments influencent le comportement de vérification et la disponibilité d’options comme -verify_hostname.

Tableau : Inventaire de la version et de l’environnement

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Élément à consigner</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Exemple de preuve</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Pourquoi c’est important</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Version d’OpenSSL</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">OpenSSL 3.0.13</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Détermine les options de commande et le comportement de vérification</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Configuration de build</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Options avec fournisseur FIPS (Federal Information Processing Standards)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Explique la disponibilité des providers et les algorithmes autorisés</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">OPENSSLDIR</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">OPENSSLDIR: /etc/ssl</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Emplacement des CAfile et CApath par défaut</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Confiance par défaut</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Valeurs CAfile et CApath</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Influence les décisions de confiance de s_client et verify</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">OS et shell</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Linux x86_64, bash</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Reproductibilité des commandes et des chemins</td></tr></tbody>
</table>
</div>

## 2) Inspecter un certificat local (PEM)

Analysez un certificat au format PEM (Privacy-Enhanced Mail — encodage Base64 avec en-têtes) et concentrez-vous sur l’identité et les périodes de validité. L’identité d’un nom d’hôte moderne repose sur le SAN (Subject Alternative Name — extension listant les identités, principalement DNS et IP), pas uniquement sur le Common Name.

openssl x509 -in <certificate.pem> -noout \
 -subject -issuer -serial -dates \
 -fingerprint -sha256 \
 -ext subjectAltName 

- subject : Champs d’identité descriptifs

- issuer : Émetteur (qui a signé)

- serial : Numéro de série unique par émetteur

- dates : fenêtre de validité notBefore et notAfter

- fingerprint avec -sha256 : empreinte SHA-256 pour le suivi

- subjectAltName : liste des noms DNS et IP valides pour le certificat (source principale pour les contrôles de nom d’hôte)

 Étape de vérification : confirmez que le nom d’hôte cible figure dans les entrées DNS du SAN.

## 3) Vérifier les fenêtres d’expiration sans supposer la politique de renouvellement

Testez si un certificat restera valide au moins N secondes. Exemple : 30 jours = 2 592 000 secondes.

openssl x509 -checkend 2592000 -noout -in <certificate.pem>
echo $? 

- Code de sortie 0 : n’expirera PAS dans les 30 jours

- Code non nul : expirera dans les 30 jours ou une erreur est survenue

 Étape de vérification : en cas de code non nul, confirmez la date notAfter réelle avec la commande de la section 2.

## 4) Inspecter un point de terminaison distant avec s_client (poignée de main et chaîne présentée)

Utilisez SNI (Server Name Indication — indication du nom de serveur) pour sélectionner l’hôte virtuel correct. Demandez la chaîne complète telle que servie et exigez un code de retour non nul en cas d’erreurs de vérification. La redirection de l’entrée ferme stdin pour une sortie propre.

openssl s_client -connect <host>:443 -servername <host> \
 -showcerts -verify_return_error </dev/null 
 À observer :

- Chaîne de certificats telle que présentée par le serveur (peut être incomplète)

- Réussite de la poignée de main vs statut de vérification

- Concordance du certificat feuille avec le nom d’hôte attendu (non vérifiée automatiquement sans -verify_hostname)

Notes :

- La sélection du magasin de confiance dépend de votre build OpenSSL et des valeurs par défaut de l’OS. Vous pouvez surcharger avec -CAfile ou -CApath pour reproduire un problème.

- Une poignée de main réussie ou l’affichage d’un certificat ne prouvent pas, à eux seuls, l’identité ou la confiance.

## 5) Vérification explicite du nom d’hôte (OpenSSL 3.x)

Commencez par vérifier si votre s_client prend en charge -verify_hostname.

openssl s_client -help 2>&1 | grep -i verify_hostname || echo "Option not supported" 
 Si pris en charge (OpenSSL 3.x recommandé) :

openssl s_client -connect <host>:443 -servername <host> \
 -verify_hostname <host> -verify_return_error </dev/null 
 Preuves attendues : « verification OK » lorsque le SAN contient le nom d’hôte et que la chaîne se valide jusqu’à une ancre de confiance. En cas d’échec, s_client renvoie un code non nul et imprime la raison du défaut.

## 6) Valider une chaîne locale (ancre de confiance vs intermédiaires)

Séparez l’ancre de confiance (CA, Certification Authority — autorité de certification) des intermédiaires non approuvés et validez la feuille.

openssl verify -CAfile <root-ca.pem> -untrusted <intermediate.pem> <leaf.pem> 
 Preuve attendue : <leaf.pem>: OK. En cas d’échec, les causes courantes incluent des intermédiaires expirés, un ordre incorrect, un intermédiaire manquant ou une racine non approuvée.

Distinctions importantes :

- La validation de chaîne ne vérifie pas les noms d’hôte ; elle vérifie les signatures, l’heure et la confiance jusqu’à une ancre.

- Les contrôles de finalité (purpose), par exemple sslserver vs sslclient, sont distincts ; utilisez -purpose sslserver si vous avez besoin de cette vérification explicite.

## 7) Inspecter une CSR en toute sécurité

CSR (Certificate Signing Request — demande de signature de certificat).

openssl req -in <request.csr> -noout -text -verify 

- L’option -verify confirme que la CSR est auto-signée par la clé publique intégrée, prouvant la possession de la clé privée correspondante au moment de la création.

- Elle ne prouve pas l’identité du demandeur ni qu’une CA l’approuvera.

 Étape de vérification : confirmez que les valeurs SAN demandées et les extensions d’usage de clé correspondent à votre politique d’émission.

## 8) Reconnaître et convertir les formats de certificats sans écrasement

Créez toujours un nouveau fichier et vérifiez avant de remplacer l’original.

- Reconnaitre un certificat : openssl x509 -in <file> -noout -subject

- Reconnaitre une clé privée sans l’exposer : openssl pkey -in <key.pem> -noout

Tableau : Formats et matrice de conversion (non destructif)

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">De</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Vers</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Commande</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Étape de vérification</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat PEM</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat DER (Distinguished Encoding Rules — binaire ASN.1)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.pem&gt; -outform DER -out &lt;certificate.der&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.der&gt; -inform DER -noout -subject</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat DER</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat PEM</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.der&gt; -inform DER -out &lt;certificate.pem.new&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.pem.new&gt; -noout -subject</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Paquet PKCS#12 (Public-Key Cryptography Standards #12)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat feuille PEM</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl pkcs12 -in &lt;bundle.p12&gt; -clcerts -nokeys -out &lt;leaf-cert.pem&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;leaf-cert.pem&gt; -noout -subject</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Paquet PKCS#12</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Clé PEM chiffrée</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl pkcs12 -in &lt;bundle.p12&gt; -nocerts -out &lt;key.pem&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl pkey -in &lt;key.pem&gt; -noout</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat et clé PEM</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Paquet PKCS#12</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl pkcs12 -export -inkey &lt;key.pem&gt; -in &lt;certificate.pem&gt; -out &lt;bundle.p12&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl pkcs12 -in &lt;bundle.p12&gt; -info -nokeys</td></tr></tbody>
</table>
</div>

## 9) Inspection et export PKCS#12, en sécurité

Évitez de mettre les mots de passe directement sur la ligne de commande ; ils peuvent fuiter via l’historique du shell ou la liste des processus. Préférez les invites interactives, ou utilisez des mécanismes protégés fournis par votre environnement.

- Inspecter les certificats à l’intérieur d’un PKCS#12 sans afficher les clés privées :

openssl pkcs12 -in <bundle.p12> -info -nokeys 

- Exporter uniquement le certificat feuille (sans clés) :

 openssl pkcs12 -in <bundle.p12> -clcerts -nokeys -out <leaf-cert.pem> 

- Exporter une clé privée chiffrée (une phrase secrète de sortie vous sera demandée) :

 openssl pkcs12 -in <bundle.p12> -nocerts -out <key.pem> 
 Étape de vérification : analysez les sorties avec openssl x509 ou openssl pkey comme montré, et confirmez que les permissions de fichiers restreignent l’accès à la clé privée.

## 10) Apparier un certificat à sa clé privée sans exposer la clé

Dérivez des empreintes de clés publiques des deux côtés et comparez. Elles doivent être identiques.

- Depuis le certificat :

openssl x509 -in <certificate.pem> -noout -pubkey | openssl sha256 

- Depuis la clé privée :

 openssl pkey -in <key.pem> -pubout | openssl sha256 
 Preuve attendue : les deux digests SHA-256 (Secure Hash Algorithm 256-bit — empreinte à 256 bits) correspondent. Mises en garde :

- L’ancienne méthode -modulus ne s’applique qu’à RSA, pas à ECDSA ou Ed25519.

- N’affichez pas de matériau de clé privée ; extraire la clé publique suffit pour l’appariement.

## 11) Ce que chaque commande prouve (et ne prouve pas)

Tableau : Commandes d’inspection courantes et leurs limites

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Commande</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Prouve</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Ne prouve pas</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.pem&gt; -noout -text</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Champs du certificat, SAN, fenêtre de validité</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Confiance jusqu’à une racine, propriété du nom d’hôte, connectivité en direct</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -checkend N -in &lt;certificate.pem&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Si l’expiration franchit N</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Si une AC renouvellera, comportement de rechargement de l’application</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect -servername -showcerts</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Réussite de la poignée de main TLS, chaîne présentée</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérification du nom d’hôte sans -verify_hostname, politique spécifique à l’application</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -verify_hostname &lt;host&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Contrôle d’identité du nom d’hôte via SAN et chaîne</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Que votre OS ou appli utilise le même magasin de confiance ou la même politique de chiffrement</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl verify -CAfile -untrusted &lt;leaf.pem&gt;</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Chaîne de signatures jusqu’à l’ancre, l’heure, et la finalité si spécifiée</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Concordance du nom d’hôte, configuration serveur en direct</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl req -in &lt;request.csr&gt; -verify</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Intégrité de la CSR et possession de clé à la création</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Identité du demandeur ou approbation par une CA</td></tr></tbody>
</table>
</div>

## 12) Dépanner les pannes TLS courantes

Commencez par des inspections en lecture seule. Ne modifiez pas les fichiers avant d’avoir identifié la cause.

Tableau : Symptôme TLS, cause probable, premier diagnostic sûr

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Symptôme</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Cause probable</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Premier diagnostic sûr</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Poignée de main OK, le navigateur affiche un nom non concordant</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">SAN erroné ou mauvais hôte virtuel</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect &lt;host&gt;:443 -servername &lt;host&gt; -verify_hostname &lt;host&gt; &lt;/dev/null</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Échec de la poignée de main avec certificat expiré</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat expiré ou pas encore valide</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.pem&gt; -noout -dates et -checkend N</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Erreur CA inconnue ou auto-signé</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Racine non approuvée ou ancre de confiance manquante</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl verify -CAfile &lt;root-ca.pem&gt; &lt;leaf.pem&gt;</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Fonctionne sur certains clients, pas d’autres</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Intermédiaire manquant ou erroné côté serveur</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect &lt;host&gt;:443 -showcerts &lt;/dev/null</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Certificat correct, mauvais site quand même</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Oubli de -servername (SNI) côté client ou routage serveur</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect &lt;host&gt;:443 -servername &lt;host&gt; &lt;/dev/null</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Pannes sporadiques selon l’heure</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Horloge système décalée</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">date côté client et serveur ; vérifiez notBefore et notAfter</td></tr></tbody>
</table>
</div>

## 13) Bonnes pratiques opérationnelles

- Commencez par l’analyse et la vérification en lecture seule ; préservez les originaux et leurs permissions.

- Ne remplacez jamais un certificat ou une clé fonctionnels sans créer un nouveau fichier et le vérifier d’abord.

- Restreignez l’accès aux clés via les permissions du système de fichiers ; auditez qui peut lire les clés privées.

- Ne collez pas de clés privées ni de PKCS#12 complets dans des tickets ou des journaux.

- Confirmez séparément le comportement de rechargement de l’application : certains serveurs exigent un redémarrage pour utiliser un nouveau certificat ou une nouvelle clé.

- Documentez explicitement l’ancre de confiance et la chaîne d’intermédiaires dans l’automatisation de déploiement.

- Rappelez-vous que openssl s_client est un outil de diagnostic ; il ne reproduit pas exactement la pile TLS, le magasin de confiance ou la politique de chaque application.

## 14) Liste de contrôle avant et après déploiement

Tableau : Contrôles de déploiement vérifiables rapidement

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Phase</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Élément de la liste</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Preuve</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Avant déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">OpenSSL 3.x disponible et consigné</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl version -a archivé dans les journaux</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Avant déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Le SAN du certificat feuille inclut les hôtes cibles</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl x509 -in &lt;certificate.pem&gt; -noout -ext subjectAltName</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Avant déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">La chaîne se valide jusqu’à l’ancre de confiance voulue</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl verify -CAfile &lt;root-ca.pem&gt; -untrusted &lt;intermediate.pem&gt; &lt;leaf.pem&gt;</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Avant déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">La clé correspond au certificat</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Empreintes SHA-256 identiques des clés publiques dérivées</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Après déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Le serveur présente la chaîne complète</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect &lt;host&gt;:443 -servername &lt;host&gt; -showcerts &lt;/dev/null</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Après déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">La vérification de nom d’hôte réussit</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">openssl s_client -connect &lt;host&gt;:443 -servername &lt;host&gt; -verify_hostname &lt;host&gt; &lt;/dev/null</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Après déploiement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Rechargement ou redémarrage de l’appli confirmé</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Journaux applicatifs et audit de configuration versionné</td></tr></tbody>
</table>
</div>

## Conclusion

Pour diagnostiquer TLS, traitez l’analyse, la validation de chaîne, la vérification de nom d’hôte et la poignée de main réseau comme des étapes distinctes. Commencez par l’inventaire de version, inspectez les fichiers locaux en sécurité, puis testez le point de terminaison en direct avec SNI et des contrôles explicites du nom d’hôte. Gardez les conversions non destructives, n’exposez jamais de clés privées et vérifiez indépendamment le rechargement applicatif. Avec ces commandes OpenSSL 3.x et ces listes de contrôle, vous pouvez passer des symptômes aux correctifs étayés par des preuves rapidement et en toute sécurité.