🔍 Vérification de certificat RFC3161

Validez l'authenticité de vos certificats d'horodatage

📋 Processus de vérification en 3 étapes
1
📄 Fichier original

Le fichier que vous avez horodaté

2
📜 Certificat .tsr

Le certificat d'horodatage RFC3161

3
✅ Validation

Vérification automatique de l'authenticité

📄 1. Fichier original

Sélectionnez le fichier que vous avez horodaté

📄

Glissez-déposez votre fichier original

📄 Fichier :
📏 Taille :
🔐 Hash SHA-256 : ✅ Calculé
📜 2. Certificat d'horodatage (.tsr)

Sélectionnez le fichier .tsr que vous avez reçu

📜

Glissez-déposez votre fichier .tsr

📜 Certificat :
📏 Taille : ✅ Chargé
🔧 Vérification avec OpenSSL (Méthode avancée)

Pour une vérification cryptographique complète, utilisez OpenSSL en ligne de commande :

📦 1. Vérifier la structure du certificat TSR
openssl ts -reply -in certificat.tsr -text

Cette commande affiche le contenu du certificat : date, hash, numéro de série, etc.

🔐 2. Extraire le hash du certificat
openssl ts -reply -in certificat.tsr -text | grep "Message data"

Extrait uniquement le hash du fichier horodaté.

📄 3. Calculer le hash du fichier original
openssl dgst -sha256 fichier_original.pdf

Calcule le hash SHA-256 de votre fichier original.

✅ 4. Vérification complète avec validation de signature
# Créer une requête de vérification
openssl ts -query -data fichier_original.pdf -sha256 -cert -out request.tsq

# Vérifier le certificat avec la chaîne de certificats Apple
openssl ts -verify -in certificat.tsr -queryfile request.tsq -CAfile apple-root-ca.pem -untrusted apple-timestamp-ca.pem

Note : Vous devez télécharger les certificats racine et intermédiaire d'Apple :

🎯 Exemple de sortie réussie
Verification: OK
❌ Exemples d'erreurs courantes
Erreur Signification Solution
Message imprint mismatch Le hash ne correspond pas Le fichier a été modifié ou ce n'est pas le bon fichier
unable to get local issuer certificate Chaîne de certificats manquante Téléchargez les certificats Apple (CA root et intermédiaire)
TSA untrusted Autorité non reconnue Vérifiez que vous utilisez le bon fichier -CAfile
Bad response format Fichier TSR corrompu Retéléchargez le certificat TSR
💻 Scripts de vérification automatique
🐧 Script Bash (Linux/Mac)
#!/bin/bash
# Script de vérification TSR

FICHIER="$1"
TSR="$2"

if [ ! -f "$FICHIER" ] || [ ! -f "$TSR" ]; then
    echo "❌ Usage: $0 fichier_original.pdf certificat.tsr"
    exit 1
fi

echo "🔍 Vérification du certificat TSR..."
echo ""

# 1. Afficher les infos du certificat
echo "📜 Informations du certificat :"
openssl ts -reply -in "$TSR" -text | grep -E "(Time stamp:|Hash Algorithm:|Message data:|Serial Number:)"
echo ""

# 2. Extraire le hash du TSR
TSR_HASH=$(openssl ts -reply -in "$TSR" -text | grep "Message data:" | awk '{print $3}')
echo "🔐 Hash dans le certificat : $TSR_HASH"

# 3. Calculer le hash du fichier
FILE_HASH=$(openssl dgst -sha256 "$FICHIER" | awk '{print $2}')
echo "🔐 Hash du fichier actuel : $FILE_HASH"
echo ""

# 4. Comparer
if [ "$TSR_HASH" = "$FILE_HASH" ]; then
    echo "✅ VALIDATION RÉUSSIE : Les hash correspondent !"
    echo "Le fichier n'a pas été modifié depuis l'horodatage."
else
    echo "❌ ÉCHEC : Les hash ne correspondent pas !"
    echo "Le fichier a été modifié ou ce n'est pas le bon fichier."
    exit 1
fi
🪟 Script PowerShell (Windows)
param(
    [Parameter(Mandatory=$true)]
    [string]$FichierOriginal,
    
    [Parameter(Mandatory=$true)]
    [string]$CertificatTSR
)

Write-Host "🔍 Vérification du certificat TSR..." -ForegroundColor Cyan
Write-Host ""

# Vérifier que les fichiers existent
if (!(Test-Path $FichierOriginal) -or !(Test-Path $CertificatTSR)) {
    Write-Host "❌ Erreur : Fichier introuvable" -ForegroundColor Red
    exit 1
}

# Afficher les infos du certificat
Write-Host "📜 Informations du certificat :" -ForegroundColor Yellow
openssl ts -reply -in $CertificatTSR -text | Select-String -Pattern "Time stamp:|Hash Algorithm:|Message data:|Serial Number:"
Write-Host ""

# Extraire le hash du TSR
$tsrOutput = openssl ts -reply -in $CertificatTSR -text | Select-String "Message data:"
$tsrHash = ($tsrOutput -split ":\s+")[1].Trim()
Write-Host "🔐 Hash dans le certificat : $tsrHash" -ForegroundColor Cyan

# Calculer le hash du fichier
$fileHashOutput = openssl dgst -sha256 $FichierOriginal
$fileHash = ($fileHashOutput -split "=\s+")[1].Trim()
Write-Host "🔐 Hash du fichier actuel : $fileHash" -ForegroundColor Cyan
Write-Host ""

# Comparer
if ($tsrHash -eq $fileHash) {
    Write-Host "✅ VALIDATION RÉUSSIE : Les hash correspondent !" -ForegroundColor Green
    Write-Host "Le fichier n'a pas été modifié depuis l'horodatage." -ForegroundColor Green
} else {
    Write-Host "❌ ÉCHEC : Les hash ne correspondent pas !" -ForegroundColor Red
    Write-Host "Le fichier a été modifié ou ce n'est pas le bon fichier." -ForegroundColor Red
    exit 1
}
🐍 Script Python
#!/usr/bin/env python3
import sys
import hashlib
import subprocess

def calculate_sha256(filepath):
    """Calcule le hash SHA-256 d'un fichier"""
    sha256_hash = hashlib.sha256()
    with open(filepath, "rb") as f:
        for byte_block in iter(lambda: f.read(4096), b""):
            sha256_hash.update(byte_block)
    return sha256_hash.hexdigest()

def extract_tsr_hash(tsr_file):
    """Extrait le hash du certificat TSR"""
    try:
        result = subprocess.run(
            ['openssl', 'ts', '-reply', '-in', tsr_file, '-text'],
            capture_output=True, text=True, check=True
        )
        for line in result.stdout.split('\n'):
            if 'Message data:' in line:
                return line.split(':')[1].strip().lower()
    except Exception as e:
        print(f"❌ Erreur lors de la lecture du TSR : {e}")
        sys.exit(1)

def main():
    if len(sys.argv) != 3:
        print("❌ Usage: python verify_tsr.py fichier_original.pdf certificat.tsr")
        sys.exit(1)
    
    fichier_original = sys.argv[1]
    certificat_tsr = sys.argv[2]
    
    print("🔍 Vérification du certificat TSR...")
    print()
    
    # Calculer le hash du fichier
    print("📄 Calcul du hash du fichier original...")
    file_hash = calculate_sha256(fichier_original)
    print(f"🔐 Hash du fichier : {file_hash}")
    print()
    
    # Extraire le hash du TSR
    print("📜 Extraction du hash du certificat...")
    tsr_hash = extract_tsr_hash(certificat_tsr)
    print(f"🔐 Hash du certificat : {tsr_hash}")
    print()
    
    # Comparer
    if file_hash == tsr_hash:
        print("✅ VALIDATION RÉUSSIE : Les hash correspondent !")
        print("Le fichier n'a pas été modifié depuis l'horodatage.")
        sys.exit(0)
    else:
        print("❌ ÉCHEC : Les hash ne correspondent pas !")
        print("Le fichier a été modifié ou ce n'est pas le bon fichier.")
        sys.exit(1)

if __name__ == "__main__":
    main()
❓ Questions fréquentes sur la vérification

La vérification d'un certificat TSR RFC3161 contrôle plusieurs éléments :
  • Correspondance du hash : Le hash SHA-256 du fichier actuel doit correspondre au hash inscrit dans le certificat
  • Signature cryptographique : La signature du serveur TSA doit être valide
  • Chaîne de certificats : Les certificats de l'autorité (Apple TSA) doivent être valides et non révoqués
  • Date d'horodatage : La date inscrite prouve que le fichier existait à ce moment précis

Si les hash ne correspondent pas, cela signifie que :
  • Le fichier a été modifié après l'horodatage (même une modification minime change le hash)
  • Vous n'utilisez pas le bon fichier original
  • Le certificat TSR ne correspond pas à ce fichier
  • Le fichier a été corrompu lors du transfert
Un seul bit de différence suffit à changer complètement le hash SHA-256.

Oui, absolument ! Pour prouver l'authenticité et l'antériorité d'un document, vous devez conserver :
  • Le fichier original (exactement tel qu'il était lors de l'horodatage)
  • Le certificat .tsr correspondant
  • Idéalement le rapport en format texte pour faciliter la lecture
Conseil : Créez un dossier ZIP contenant les trois éléments pour archivage.

Pour Windows :
  1. Téléchargez OpenSSL depuis slproweb.com
  2. Installez la version "Light" (suffisant pour la vérification TSR)
  3. Ajoutez le dossier bin d'OpenSSL au PATH de Windows
Pour Mac : OpenSSL est préinstallé. Ouvrez Terminal et tapez openssl version

Pour Linux : Installez avec sudo apt install openssl (Debian/Ubuntu) ou sudo yum install openssl (RedHat/CentOS)

Pour une validation complète avec vérification de la chaîne de certificats :
  1. Téléchargez le certificat racine Apple : apple.com/certificateauthority
  2. Cherchez "Apple Root CA - G3" et téléchargez-le au format PEM
  3. Si besoin, convertissez le .cer en .pem : openssl x509 -inform DER -in cert.cer -out cert.pem
  4. Utilisez ce certificat avec l'option -CAfile dans la commande de vérification

Non, un certificat TSR RFC3161 délivré par une autorité reconnue (comme Apple) ne peut pas être falsifié car :
  • Il est signé cryptographiquement avec la clé privée de l'autorité TSA
  • La signature peut être vérifiée avec le certificat public de l'autorité
  • Toute modification du contenu invaliderait la signature
  • La chaîne de certificats remonte jusqu'à une autorité racine de confiance
C'est pourquoi les certificats RFC3161 ont une valeur juridique et sont acceptés comme preuves.
🔗 Outils connexes

Besoin de créer un nouveau certificat d'horodatage ou de sécuriser vos documents ?

🕒 Créer un certificat d'horodatage

Horodatez un nouveau fichier avec un certificat RFC3161

🔐 Outils de chiffrement

Protégez vos données avec nos outils de cryptographie