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
.pfxou.p12). - Senha do certificado.
- Extensão
opensslhabilitada 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
- Assinando DPS - Guia completo de assinatura de DPS
- XmlSigner Parametrizado - Configurações avançadas de assinatura
- Serialização XML - Como gerar XMLs para assinar
- Utilitários - Geração de IDs para documentos
- Exemplos Práticos - Exemplos completos end-to-end
🔗 Referências
- XML-DSig Specification - Padrão W3C de assinatura XML
- OpenSSL PHP - Documentação OpenSSL
- Schemas XSD - Schemas oficiais NFSe
- Exemplos de Assinatura - Código de exemplo
- Manual NFSe - Documentação oficial do governo