Pular para o conteúdo
getnextpdf.com

Enterprise edição

Política de Certificate Transparency para certificados de assinatura

O NextPDF Enterprise permite que um fluxo de trabalho de assinatura leve em conta a postura de Certificate Transparency (CT) de um certificado de assinatura antes de assinar. CT é o ecossistema de logs públicos no qual os certificados são registrados para que a emissão indevida seja detectável; um certificado registrado em CT carrega um ou mais Signed Certificate Timestamps (SCTs). O NextPDF Enterprise representa a postura de CT de um certificado como um valor de resultado — se a extensão SCT está presente, quantos SCTs estão presentes e válidos e quais logs os emitiram — e oferece uma verificação de limiar de SCT mínimo. Esta página é de nível de comportamento: ela declara o que o resultado carrega, como a verificação de limiar funciona e o que o NextPDF decide e não decide.

O NextPDF Enterprise representa e verifica por limiar um resultado de CT; ele não é um log de CT, um auditor de log nem um monitor. O limite é declarado em Segurança e compliance.

Os pré-requisitos são declarados no front matter e repetidos em Pré-requisitos.

Este recurso é entregue no NextPDF Enterprise (nextpdf/enterprise) e é ativado com um envelope de licença de nível Enterprise. Uma implantação sem esse direito não carrega as classes do recurso. Compare edições e obtenha uma licença.

Um certificado registrado em CT carrega SCTs. Um SCT carrega uma versão, um identificador de log, um carimbo de tempo e a assinatura do log sobre a entrada do certificado, conforme a RFC 6962 §3.1. Um log retorna um SCT como sua promessa de incorporar o certificado ao seu log somente acréscimo, e as partes confiantes rejeitam um certificado que não tenha um SCT válido, conforme a RFC 6962 §3. A Certificate Transparency versão 2.0 mantém o mesmo modelo: um log retorna um SCT na submissão, que o submissor valida antes de confiar nele, conforme a RFC 9162 §3.

O NextPDF Enterprise representa a postura de CT de um certificado como um valor de resultado que carrega:

  • se o certificado contém a extensão SCT;
  • o número total de SCTs encontrados;
  • o número de SCTs cujas assinaturas são válidas;
  • os identificadores de log — hashes SHA-256 — dos logs que emitiram os SCTs.

O resultado expõe uma verificação de limiar de SCT mínimo: ele relata se a contagem de SCTs válidos atinge ou excede um mínimo exigido. Você define o mínimo de acordo com a sua política. Uma política comum espera pelo menos dois SCTs de logs diferentes para certificados de vida mais curta e mais para os de vida mais longa; o valor do limiar é você quem escolhe.

Use a verificação de limiar como uma barreira em um fluxo de trabalho de assinatura: exija um certificado registrado em CT (uma contagem suficiente de SCTs válidos) antes de assinar e recuse caso contrário.

A Certificate Transparency responde a uma pergunta restrita: este certificado está registrado publicamente e por quantos logs independentes. O NextPDF Enterprise modela essa resposta como um simples valor de resultado, não como um veredito. O resultado relata o sinalizador de extensão SCT, as contagens de SCTs e os identificadores dos logs emissores, e então para. Ele não decide se essa postura é boa o suficiente, porque o limiar de confiança é uma política da parte confiante que varia conforme a vida útil e o risco do certificado. Assim, a contagem de SCT mínimo continua sendo você quem define, e o NextPDF fica de fora dos papéis de operador de log, auditor e monitor. A Certificate Transparency é uma verificação entre várias em uma decisão de assinatura sólida, e esta página a torna uma barreira explícita antes de o signatário ser construído.

Contexto de design: Validar uma assinatura corretamente.

  1. Instale o NextPDF Core e o pacote Enterprise, e mantenha uma licença Enterprise ativa.
  2. Tenha o certificado de assinatura cuja postura de CT você quer impor, junto com os dados de SCT que o seu ambiente extrai dele.
  3. Decida o limiar de SCT mínimo que a sua política exige.
  • Limiar de SCT mínimo — o número de SCTs válidos que um certificado deve carregar para passar na sua política. Passe-o para a verificação de limiar.
  • Posicionamento da política — decida em que ponto do seu fluxo de trabalho de assinatura a barreira é executada: antes de construir o signatário, para que um certificado pouco registrado nunca chegue a uma operação de assinatura.
  1. Obtenha o resultado de CT para o seu certificado de assinatura, carregando o sinalizador de extensão SCT, as contagens total e válida de SCTs e os identificadores de log.
  2. Decida o limiar de SCT mínimo para a sua política.
  3. Execute a verificação de limiar; trate uma aprovação como “política de CT satisfeita” e uma reprovação como “recusar assinar com este certificado”.
  4. Coloque a barreira no fluxo de trabalho de assinatura com base no resultado, antes de o signatário ser construído.
examples/enterprise/ct-policy-gate.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\CertificateTransparency\CtValidationResult;
use Psr\Log\LoggerInterface;
final readonly class CtSigningPolicy
{
/**
* @param int<1, max> $minimumScts The minimum count of valid SCTs your policy requires.
*/
public function __construct(
private int $minimumScts,
private LoggerInterface $logger,
) {}
/**
* Decide whether a certificate's CT posture satisfies the policy.
*
* The gate runs before the signer is constructed, so an under-logged
* certificate never reaches a signing operation. A missing SCT extension
* is treated as a policy failure, not an exception.
*
* @param CtValidationResult $result The CT posture of the signing certificate.
*
* @return bool True when the certificate meets the minimum-SCT threshold.
*/
public function isAcceptable(CtValidationResult $result): bool
{
if (! $result->hasSctsExtension) {
$this->logger->warning('Signing certificate carries no SCT extension; CT policy not met.');
return false;
}
$acceptable = $result->meetsPolicy($this->minimumScts);
if (! $acceptable) {
$this->logger->warning('Signing certificate has too few valid SCTs for the CT policy.', [
'validScts' => $result->validScts,
'minimumScts' => $this->minimumScts,
]);
}
return $acceptable;
}
}
  1. Construa um resultado com a extensão SCT presente e uma contagem de SCTs válidos no seu limiar, e confirme que a verificação de limiar passa.
  2. Construa um resultado uma unidade abaixo do seu limiar e confirme que a verificação falha.
  3. Construa um resultado com a extensão SCT ausente e confirme que a barreira recusa independentemente da contagem.
  4. Confirme que o seu fluxo de trabalho de assinatura não constrói um signatário quando a barreira recusa.
  • O NextPDF representa e verifica por limiar; ele não opera logs. O NextPDF Enterprise expõe a postura de CT e uma verificação de SCT mínimo. Ele não é um log de CT, um auditor nem um monitor, e não submete certificados a logs.
  • O limiar é a sua política. O valor de SCT mínimo é você quem define; o NextPDF não impõe um número. Uma extensão SCT ausente é uma reprovação clara de política.
  • Coloque a barreira antes de assinar. Execute a verificação antes de construir o signatário, para que um certificado pouco registrado nunca chegue a uma operação de assinatura.
  • A semântica do SCT segue os padrões. Um SCT é a promessa de um log que as partes confiantes esperam que esteja presente e válida (RFC 6962 §3; estrutura §3.1; CT v2 RFC 9162 §3).

Esta página trata de confiança em certificados. Toda fonte normativa é parafraseada; nenhum texto normativo é reproduzido.

  • Sem extensão SCT. Trate um resultado sem a extensão SCT como uma reprovação de política; recuse-se a assinar.
  • SCTs válidos insuficientes. Uma contagem de SCTs válidos abaixo do seu limiar reprova a verificação; recuse-se a assinar.
  • Posicionamento da política. Execute a barreira antes de o signatário ser construído; uma verificação tardia que roda depois da assinatura não protege o documento produzido.

Esta página documenta apenas o comportamento observável externamente e a superfície de API pública suportada. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismos, nomes de arquivos de runbook e prefixos de tickets estão fora de escopo.