🔍 Vérification de certificat RFC3161
Validez l'authenticité de vos certificats d'horodatage
📋 Processus de vérification en 3 étapes
📄 Fichier original
Le fichier que vous avez horodaté
📜 Certificat .tsr
Le certificat d'horodatage RFC3161
✅ Validation
Vérification automatique de l'authenticité
📄 1. Fichier original
Sélectionnez le fichier que vous avez horodaté
Glissez-déposez votre fichier original
📏 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
📏 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 :
- apple-root-ca.pem : Apple Root CA G3
- apple-timestamp-ca.pem : Apple Timestamp CA
🎯 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
- 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
- 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
- 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
- Téléchargez OpenSSL depuis slproweb.com
- Installez la version "Light" (suffisant pour la vérification TSR)
- Ajoutez le dossier bin d'OpenSSL au PATH de Windows
openssl version
Pour Linux : Installez avec
sudo apt install openssl (Debian/Ubuntu) ou sudo yum install openssl (RedHat/CentOS)
- Téléchargez le certificat racine Apple : apple.com/certificateauthority
- Cherchez "Apple Root CA - G3" et téléchargez-le au format PEM
- Si besoin, convertissez le .cer en .pem :
openssl x509 -inform DER -in cert.cer -out cert.pem - Utilisez ce certificat avec l'option
-CAfiledans la commande de vérification
- 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
🔗 Outils connexes
Besoin de créer un nouveau certificat d'horodatage ou de sécuriser vos documents ?
Horodatez un nouveau fichier avec un certificat RFC3161
Protégez vos données avec nos outils de cryptographie