Pular para o conteúdo principal

Assinatura Digital

O pacote oferece suporte completo para assinatura digital de documentos XML DPS utilizando certificados A1 (PKCS#12), conforme exigido pelo padrão nacional.

Requisitos

  • Certificado Digital A1 (arquivo .pfx ou .p12).
  • Senha do certificado.
  • Extensão openssl habilitada no PHP.

Carregando o Certificado

Utilize a classe Certificate para carregar seu certificado digital.

use Nfse\Signer\Certificate;

try {
$certificado = new Certificate('/caminho/para/certificado.pfx', 'senha123');

// Você pode acessar a chave privada e o certificado limpo se necessário
$privateKey = $certificado->getPrivateKey();
$publicCert = $certificado->getCleanCertificate();
} catch (\Exception $e) {
echo "Erro ao carregar certificado: " . $e->getMessage();
}

Assinando um XML

Utilize a classe XmlSigner para assinar digitalmente o XML. A assinatura segue o padrão XMLDSig (RSA-SHA1) com canonização C14N.

use Nfse\Signer\XmlSigner;

// 1. Instancie o assinador com o certificado carregado
$signer = new XmlSigner($certificado);

// 2. Carregue o XML que deseja assinar (string)
$xmlContent = file_get_contents('dps-gerada.xml');

// 3. Assine o documento
// O segundo parâmetro é a tag que será assinada (ex: 'infDPS' para DPS)
try {
$xmlAssinado = $signer->sign($xmlContent, 'infDPS');

// Salve ou utilize o XML assinado
file_put_contents('dps-assinada.xml', $xmlAssinado);
} catch (\Exception $e) {
echo "Erro ao assinar XML: " . $e->getMessage();
}

Detalhes Técnicos

  • Algoritmos Suportados: RSA-SHA1 e RSA-SHA256.
  • Canonização: C14N (http://www.w3.org/TR/2001/REC-xml-c14n-20010315).
  • Transformações: Enveloped Signature e C14N.
  • Estrutura: A assinatura é anexada como filha do elemento pai da tag assinada (ex: dentro de <DPS> para <infDPS>).

O XmlSigner permite configurar o algoritmo desejado (o padrão é SHA1 para compatibilidade):

use Nfse\Signer\XmlSigner;
use Nfse\Signer\XmlSignerParameters;

$params = new XmlSignerParameters(
algorithm: OPENSSL_ALGO_SHA256
);
$signer = new XmlSigner($certificado, $params);

Validação

A classe Certificate realiza validações básicas ao carregar o arquivo PFX, verificando se a senha está correta e se o arquivo é válido. Validações adicionais de expiração podem ser implementadas conforme a necessidade do negócio.


📚 Próximos Passos


🔗 Referências