Aller au contenu
getnextpdf.com

Enterprise édition

Certificate Transparency — Référence détaillée

Cette page est la référence détaillée de la surface Certificate Transparency (CT) dans NextPDF Enterprise. Cette surface est un unique objet-valeur immuable : NextPDF\Enterprise\Security\CertificateTransparency\CtValidationResult. Il résume la posture Signed Certificate Timestamp (SCT) d’un certificat de signature X.509. Il porte le drapeau de l’extension SCT, le nombre total et le nombre valide de SCT, ainsi que les identifiants des logs émetteurs. Il expose une seule méthode de politique, meetsPolicy(), qui est un contrôle de seuil minimal de SCT. Le type représente un résultat ; il n’extrait pas les SCT, ne vérifie pas les signatures des SCT et ne contacte pas les logs CT. Pour le guide au niveau du workflow, voir Politique Certificate Transparency pour les certificats de signature.

Cette capacité est livrée dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de palier Enterprise. Un déploiement sans ce droit d’accès ne charge pas les classes de la capacité. Compare les éditions et obtiens une licence.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
CtValidationResultObjet-valeur immuable résumant la posture SCT d’un certificatNe lève pasfinal readonly ; les quatre propriétés promues par le constructeur sont publiques
CtValidationResult::__constructbool $hasSctsExtension, int $totalScts, int $validScts, array<string> $logIdsStocke les valeurs fournies telles quelles, sans validation ni réconciliationNouvelle instance CtValidationResultAucun @throws déclaré ; PHP lève TypeError sur des types d’arguments incompatibles sous strict_typesPropriétés publiques readonly promues
CtValidationResult::meetsPolicyint $minimumScts = 2Compare le nombre de SCT valides au seuil : validScts >= $minimumSctsboolNe lève pasCompte uniquement les SCT valides ; ne vérifie ni la distinction des logs ni la présence de l’extension
final readonly class CtValidationResult
public function __construct(
public bool $hasSctsExtension,
public int $totalScts,
public int $validScts,
public array $logIds,
) {}
public function meetsPolicy(int $minimumScts = 2): bool

Propriétés publiques readonly

PropriétéTypeSignification
$hasSctsExtensionboolIndique si le certificat contient l’extension SCT
$totalSctsintNombre total de SCT trouvés dans l’extension
$validSctsintNombre de SCT à signature valide, tel que déterminé en amont
$logIdsarray<string>Identifiants (hachages SHA-256) des logs CT qui ont émis les SCT
  • CtValidationResult est une valeur de résultat. Elle représente l’issue de l’extraction et de la vérification des SCT effectuées par l’environnement de l’appelant. Elle n’analyse pas les certificats, ne vérifie pas les signatures des SCT, n’interroge pas les logs et ne soumet pas de certificats aux logs.
  • L’extension en question est l’extension de certificat X.509v3 à SCT embarqués, identifiée par l’OID 1.3.6.1.4.1.11129.2.4.2 — RFC 6962 §3.3. Un SCT porte une version, un identifiant de log, un horodatage, des extensions et la signature du log sur l’entrée — RFC 6962 §3.2.
  • Chaque entrée de $logIds est un identifiant de log au sens de la RFC 6962 §3.2 : le hachage SHA-256 de la clé publique du log sur son SubjectPublicKeyInfo encodé en DER. Le type stocke les chaînes telles que fournies et ne les recalcule ni ne les valide.
  • meetsPolicy() implémente exactement une comparaison : le nombre de SCT valides est supérieur ou égal au seuil. Le seuil par défaut est 2.
  • meetsPolicy() ne consulte pas $hasSctsExtension. Une politique qui doit échouer sur une extension absente contrôle la propriété séparément, avant ou parallèlement au contrôle de seuil.
  • meetsPolicy() ne déduplique pas $logIds. Une politique qui exige des SCT provenant de logs indépendants vérifie la distinction via $logIds lui-même.
  • Le constructeur stocke les entrées telles quelles. Il n’effectue aucun contrôle de plage ni aucun contrôle de cohérence entre champs.
  • Les instances sont immuables (final readonly). Toutes les lectures et le contrôle de seuil sont déterministes et sans effet de bord.
  • La valeur du seuil relève du choix de politique de l’opérateur ; NextPDF n’impose aucun nombre. La source du package annote un point de référence de l’écosystème : la politique CT de Chrome, à la date de 2024, attend au moins deux SCT provenant de logs différents pour les certificats d’une durée de vie allant jusqu’à 180 jours, et trois pour les certificats à durée de vie plus longue. Il s’agit d’une politique de programme de navigateur, non d’une exigence de l’IETF.
  • Le placement prévu est un contrôle avant signature : un workflow de signature refuse de construire un signataire lorsque le contrôle échoue. La justification suit le modèle de confiance CT : un SCT est la promesse du log d’incorporer le certificat, et les parties utilisatrices rejettent un certificat dépourvu de SCT valide — RFC 6962 §3. La version 2.0 de CT conserve le même modèle : un log qui accepte une soumission retourne un SCT, que le soumissionnaire valide avant de s’y fier — RFC 9162 §3.
  • Seuil nul ou négatif. meetsPolicy(0) retourne true pour tout $validScts non négatif. La méthode ne rejette pas la valeur. Choisis un seuil d’au moins 1.
  • Extension absente, compteurs positifs. Lorsque $hasSctsExtension vaut false mais que $validScts atteint le seuil, meetsPolicy() retourne quand même true. Le contrôle doit vérifier $hasSctsExtension explicitement lorsque l’absence doit échouer ; la page de capacité montre ce motif.
  • Identifiants de log en double. N SCT valides provenant d’un unique log satisfont un seuil de N. Le contrôle de seuil ne fait aucune affirmation d’indépendance. Les politiques de distinction des logs inspectent $logIds.
  • Compteurs incohérents. Un $validScts supérieur à $totalScts, ou un compteur négatif, est stocké tel que fourni. Aucune exception n’est levée. L’étape d’extraction en amont porte la responsabilité de la cohérence des entrées.
  • Chaînes d’identifiant de log non validées. Le type n’impose ni forme de 32 octets ni forme hexadécimale sur les entrées de $logIds. Les identifiants malformés passent inchangés.
  • Aucun chemin d’exception. Aucune méthode de cette surface ne lève d’exception sous des types PHP valides. Le mode de défaillance du contrôle de politique est le refus (false), non une exception. Des types d’arguments incompatibles lèvent un TypeError PHP sous strict_types, comme pour toute API PHP typée.

CtValidationResult n’effectue aucun calcul cryptographique. Il ne calcule aucun condensé et ne vérifie aucune signature. Le fait qu’une signature SCT ait été comptée comme valide est décidé en amont, par le composant qui a effectué la vérification avant de construire le résultat. Le profil de politique cryptographique FIPS 140-3 d’Enterprise, documenté avec le module de sécurité, n’altère donc pas le comportement de ce type.

AffirmationStandardClause
Un SCT est la promesse du log d’incorporer le certificat ; les parties utilisatrices rejettent un certificat dépourvu de SCT valide.RFC 6962§3
Un SCT porte une version, un identifiant de log, un horodatage, des extensions et la signature du log sur l’entrée.RFC 6962§3.2
L’identifiant de log est le hachage SHA-256 de la clé publique du log sur son SubjectPublicKeyInfo encodé en DER.RFC 6962§3.2
Les SCT embarqués voyagent dans une extension de certificat X.509v3 identifiée par l’OID 1.3.6.1.4.1.11129.2.4.2.RFC 6962§3.3
Dans la version 2.0 de CT, un log qui accepte une soumission retourne un SCT, que le soumissionnaire valide avant de s’y fier.RFC 9162§3

Toutes les clauses sont paraphrasées ; NextPDF ne reproduit pas le texte normatif. NextPDF ne formule aucune affirmation de conformité ni de certification Certificate Transparency. NextPDF Enterprise n’est ni un log CT, ni un auditeur, ni un moniteur. Il ne soumet pas de certificats aux logs et n’affirme pas d’issue de vérification CT. Le type représente des compteurs et des identifiants produits par l’environnement de l’appelant, et il évalue un seuil choisi par l’appelant. Les programmes CT des navigateurs, tel celui de Chrome, sont des politiques d’écosystème plutôt que des exigences normatives de l’IETF ; sélectionner et satisfaire une telle politique relève de la responsabilité de l’opérateur.

  • L’objet-valeur n’a aucune dépendance et aucune E/S. Construis les instances directement dans les tests unitaires.
  • Tests aux limites recommandés : nombre valide exactement au seuil, un en dessous du seuil, extension absente avec des compteurs au seuil, et identifiants de log en double face à une politique de distinction.
  • La classe est déclarée sous strict_types=1 avec des propriétés promues typées. Des types d’arguments erronés lèvent un TypeError PHP chez l’appelant.
  • La classe porte une annotation de package @since de 1.0.0 et référence les RFC 6962 et RFC 9162 dans sa documentation source.
  • Le paramètre $logIds est documenté comme array<string> ; l’analyse statique traite la propriété comme un tableau de chaînes. Préserve cette forme lors de la construction des résultats.
  • Place ta vérification CT en amont et ce contrôle de seuil avant la construction du signataire, afin qu’un certificat insuffisamment journalisé n’atteigne jamais une opération de signature. La page de capacité documente le workflow et un exemple de contrôle abouti.

Cette page documente uniquement le comportement observable de l’extérieur et la surface de l’API publique prise en charge. Les chemins de namespace internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.