Passo a passo

Solicitação de credenciais

As credenciais de acesso aos ambientes de homologação/teste e produção da API de Assinatura Eletrônica devem ser solicitadas por um Gestor Público, por meio do Serviço de Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/governodigital/pt-br/estrategias-e-governanca-digital/transformacao-digital/servico-de-integracao-aos-produtos-de-identidade-digital-gov.br

Para iniciar a solicitação, clique no botão “Iniciar” e siga as instruções fornecidas pelo sistema.

⚠️ Importante: A liberação das credenciais de produção está condicionada à integração prévia do sistema com o Login Único e à sua hospedagem em um domínio oficial do governo (ex.: gov.br, mil.br, edu.br, jus.br, leg.br, def.br, mp.br, tc.br, entre outros), conforme estabelecido nos artigos 3º e 5º da Portaria SGD/MGI nº 7.076, de 2 de outubro de 2024.

Prazo para liberação das credenciais

Após o recebimento e a análise da solicitação, não havendo necessidade de ajustes negociais ou técnicos, os prazos estimados para o envio das credenciais da API de Assinatura Eletrônica Avançada são os seguintes:

  • Ambiente de Homologação: até 3 dias úteis

  • Ambiente de Produção: até 5 dias úteis

Alteração de URL(s)

Para alterar a(s) URL(s) de retorno, siga as orientações abaixo:

Integrações em andamento

1. Acesse o Portal do Serviço de Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/governodigital/pt-br/estrategias-e-governanca-digital/transformacao-digital/servico-de-integracao-aos-produtos-de-identidade-digital-gov.br

  1. Clique no botão “Acompanhamento”.

  2. Na aba “Enviar dados/dúvidas” do seu protocolo de solicitação, forneça as seguintes informações:

    • client_id

    • ambiente (homologação ou produção)

    • nova Url de Retorno

Integrações concluídas

  1. Acesse o Portal de Serviço de Pós-Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/governodigital/pt-br/estrategias-e-governanca-digital/transformacao-digital/servico-de-pos-integracao-aos-produtos-do-ecossistema-da-identidade-digital-gov.br

  2. Clique no botão “Iniciar”.

  3. Na aba “Dados da Solicitação” do seu protocolo, selecione o tipo de solicitação “Atualização de URLs” e preencha as informações necessárias.

Dúvidas, Problemas, Alterações

Integrações em andamento

1. Acesse o Portal do Serviço de Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/governodigital/pt-br/estrategias-e-governanca-digital/transformacao-digital/servico-de-integracao-aos-produtos-de-identidade-digital-gov.br

  1. Clique no botão “Acompanhamento”.

  2. Na aba “Enviar dados/dúvidas” do seu protocolo de solicitação, escreva sobre a solicitação.

Integrações concluídas

  1. Acesse o Portal de Serviço de Pós-Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/pt-br/servicos/ofertar-servicos-de-pos-integracao-aos-produtos-do-ecossistema-da-identidade-digital-gov-br

  2. Clique no botão “Iniciar”.

  3. Na aba “Dados da Solicitação” do seu protocolo, selecione o tipo de solicitação “Outras solicitações” e e preencha as informações necessárias.

Integrações disponibilizadas para diversos outros órgãos ou entidades públicas

De acordo com o artigo 13 da Portaria SGD/MGI nº 7.076, de 2 de outubro de 2024, as informações sobre adesão às integrações disponibilizadas a diferentes órgãos ou entidades públicas devem ser enviadas à Secretaria de Governo Digital pelo órgão gestor da respectiva integração.

## Procedimento para o envio

1. Acesse o Portal do Serviço de Pós-Integração aos Produtos do Ecossistema da Conta Digital GOV.BR. Link para a página: https://www.gov.br/pt-br/servicos/ofertar-servicos-de-pos-integracao-aos-produtos-do-ecossistema-da-identidade-digital-gov-br

  1. Clique no botão “Iniciar”.

  2. Na aba “Dados da Solicitação” do seu protocolo, selecione o tipo de solicitação “Atualização de integrações disponibilizadas para diversos órgãos/entidades públicas” e preencha os campos necessários.

As informações devem ser enviadas mensalmente até o dia 05 de cada mês, contendo os dados referentes às integrações realizadas no mês anterior.

Em caso de dúvidas sobre este procedimento, utilize o canal de comunicação oficial: integracaoid@gestao.gov.br

Orientações para testes

De Acordo com a portaria SGD/MGI 11230/2025 as contas digitais da plataforma gov.br são classificadas em três tipos: Bronze, Prata e Ouro. A conta digital bronze permite ao usuário somente a realização de assinaturas simples. Nesta plataforma para realizar uma assinatura avançada, seja qual for o ambiente, o usuário deve possuir conta digital prata ou ouro.

Importante

Documentos assinados digitalmente no ambiente de HOMOLOGAÇÃO são validados em: https://validar.staging.iti.br

Importante

Documentos assinados no ambiente de PRODUÇÃO podem ser validados no serviço de validação de assinaturas eletrônicas do ITI https://validar.iti.gov.br

Troubleshoot:

  • atributo IdMessageDigest inválido ❌

  • Mensagem de alerta: Falha ao construir o atributo. Problemas ao obter o hash

  • Corretude: Invalid

O Hash do PDF foi calculado errado. Verifique a Seção Assinaturas PKCs7 e PDF.

Criar uma conta nível prata gov.br

  1. Acesse https://sso.staging.acesso.gov.br/ e siga passos do tutorial abaixo:

Tutorial conta prata

API de assinatura digital gov.br

Esta API de assinatura segue os princípios do estilo de arquitetura REST e fornece serviços web baseados em HTTP que implementam a assinatura digital utilizando certificados avançados gov.br. Para acesso a esses serviços a API adota o uso do protocolo OAuth 2.0, que é um padrão aberto de delegação de autorização. Deste modo, o uso da API envolve duas etapas:

  1. Geração do token de acesso (Access Token)

  2. Consumo dos serviços de assinatura da API

Diagrama de sequência aplicação cliente e API

O diagrama abaixo apresenta o fluxo de interação entre a aplicação cliente e os serviços de autenticação do Login único e os serviços da API de assinatura.

_images/diagrama_sequencia2.png

Requisitar Autenticação e Verificar nível conta

Para as 2 etapas iniciais (“Requisitar Autenticação” e “Verificar nível conta”), acesse https://acesso.gov.br/roteiro-tecnico/iniciarintegracao.html#passo-a-passo-para-integrar.

Geração do access token

Passo 1: Gerar code

Endereço servidor autorização:

https://cas.staging.iti.br/oauth2.0/authorize?

A aplicação cliente deve redirecionar o navegador do usuário para o endereço do servidor de autorização para de obter seu consentimento para o uso de seu certificado para a assinatura. Nesse processo, a aplicação deve usar credenciais previamente autorizadas no servidor. Esta requisição possui os parâmetros abaixo:

Parâmetro

Valor

response_type

code

client_id

Chave de acesso, que identifica o serviço consumidor da aplicação cadastrada.

scope

Valores possíveis: sign, signature_session, govbr, icp_brasil

redirect_uri

URL de retorno cadastrada para a aplicação cliente. Não necessita utilizar o formato URL Encode.

state

Valor usado para manter o estado entre a solicitação e o retorno de chamada.

nonce

Sequência de caracteres usado para associar uma sessão do serviço consumidor ao token.

O parâmetro scope aceita múltiplos valores separados por espaços, conforme RFC 6749.

Importante

Os escopos sign e signature_session são mutuamente exclusivos, ou seja, apenas um deles deve ser preenchido em cada chamada.

Deve-se incluir no parâmetro scope o valor sign para gerar um token que permite a assinatura de um único hash, de forma que o token gerado só pode ser utilizado uma única vez. Na tentativa de uma nova assinatura com esse mesmo token, um erro será retornado.

Deve-se incluir no parâmetro scope o valor signature_session para gerar um token que permita a assinatura de vários hashes, de forma que o token gerado pode ser utilizado para várias vezes. Neste caso, durante a validade do token, este poderá ser utilizado para realizar várias assinaturas em lote.

https://<Servidor OAuth>/authorize?response_type=code&redirect_uri=<URI de redirecionamento>&scope=sign&client_id=<client_id>

Se o órgão integrador desejar permitir que o cidadão utilize certificados em nuvem fornecidos pelos Prestadores de Serviço de Confiança (PSC) da ICP-Brasil para realizar assinaturas digitais qualificadas através da API de Assinatura, deve-se incluir o valor icp_brasil no parâmetro scope.

Neste caso, será exibida uma tela com todos os PSCs da ICP-Brasil nos quais o cidadão possui certificados qualificados emitidos, para que ele escolha qual certificado utilizar.

A seguir, as regras de combinação de escopos e o tipo de assinatura resultante:

  • Se nem o escopo icp_brasil e nem o escopo govbr for utilizado, será realizada assinatura com certificado GOV.BR (assinatura avançada que é o comportamento padrão de versões anteriores da API).

  • Se apenas o escopo govbr estiver presente, será realizada assinatura com certificado GOV.BR (assinatura avançada).

  • Se apenas o escopo icp_brasil estiver presente, será realizada assinatura com certificado ICP-Brasil (assinatura qualificada).

  • Se ambos os escopos icp_brasil e govbr estiverem presentes, o cidadão poderá optar por realizar sua assinatura com o certificado ICP-Brasil (assinatura qualificada) ou com o certificado GOV.BR (assinatura avançada).

Importante

O comportamento dos escopos sign e signature_session é o mesmo, independentemente de a assinatura ser GOV.BR ou ICP-Brasil.

Exemplo de url permitindo assinaturas em lote tanto avançadas quanto qualificadas:

https://<Servidor OAuth>/authorize?response_type=code&redirect_uri=<URI de redirecionamento>&scope=signature_session+govbr+icp_brasil&client_id=<client_id>

Caso o cidadão opte por utilizar o certificado da ICP-Brasil (assinatura avançada), ele será direcionado para o PSC da ICP-Brasil para realizar a liberação de acesso à sua chave privada.

Caso o cidadão opte por utilizar o certificado GOV.BR (assinatura qualificada), o serviço pede a autorização expressa do usuário para acessar seu certificado para assinatura. Neste instante será pedido um código de autorização a ser enviado por SMS.

Atenção

No ambiente de homologação, o código de autorização é enviado por SMS e também pode ser utilizado o código 12345. No ambiente de Produção o código de autenticação é enviado por notificação do aplicativo gov.br ou por SMS se usuário não possuir aplicativo gov.br instalado.

Após a autorização, o usuário é redirecionado para o endereço <URI de redirecionamento> enviado no redirect_uri e retorna, como um parâmetro de query, o atributo code e o atributo state. O <URI de redirecionamento> deve ser um endpoint da aplicação correspondente ao padrão autorizado no servidor de autorização, e capaz de receber e tratar o parâmetro “code”. Este atributo deve ser utilizado na fase seguinte para solicitar um Access Token ao servidor de autorização.

Nota

A URL de retorno deve pertencer ao domínio do órgão. Por exemplo: https://www.nomeorgao.gov.br/assinar. Cada órgão e ou serviço que será integrado a API de assinatura deve solicitar credenciais separadas.

Troubleshoot:

Retorno 401: Unauthorized/Acesso não Autorizado

Um dos motivos pode ser que a URL de retorno cadastrada não é exatamente igual à que está sendo utilizada no parâmetro redirect_uri. Neste caso, deve-se solicitar o ajuste da informação no processo aberto.

Passo 2: Solicitar Access Token

Realizar a seguinte requisição HTTP com método POST para o endereço https://cas.staging.iti.br/oauth2.0/token? passando as informações abaixo:

Parâmetro

Valor

code

Código de autorização gerado pelo servidor.

client_id

Chave de acesso, que identifica o serviço consumidor da aplicação cadastrada.

grant_type

authorization_code

client_secret

Chave secreta conhecida apenas pela aplicação cliente e servidor de autorização.

redirect_uri

URI de retorno cadastrada para a aplicação cliente.

Content-Type

application/x-www-form-urlencoded

O parâmetro <redirect_uri> deve ter exatamente o mesmo valor informado no passo 1. Sendo feita corretamente as duas requisições, o servidor OAuth retornará um objeto JSON contendo o Access Token, que deve ser usado nas requisições subsequentes aos endpoints do serviço.

Exemplo de código HTTP de sucesso:

Retorno 200: sucesso

{
"access_token": "eyJhbGciOiJIUzI1NiJ9.
                ZXlKNmFYQWlPaUpFUlVZaUxDSmxibU1pT2lKQk1USTRRMEpETFVoVE1qVTJJaXdpWVd4bklqb2laR2x5SW4wLi5HRWxyUDlFTWJUZTgtc
                2g1ZU5LWWNRLjBUU2o5dnpfZGdyLTMxTEdhamxHbGFza1NzQTU0RFhOVlREWUZFUVF6TWdoeTNsSFc3U0NsSlFqUDJER3BPdHM0M1N1W
                GhwdFBDQmlUN3ZfMmNScWR5cjFhRm5CUk9PRU9aN2hrVHUyTTBrTlprWld0UzEyVUljMllZVnNlMjB1eUhnWTF2Y0pkS3JZWi1Lc
                Wt0d1JuU01KbENhdjZfZV9qaEtKbkUycW10X3Z2Rm5WSldiVWgzaXQ4LXpydEtQVkktdndWVTRfUUhaaGpWb0dUVWF5c2xVRWtVeVBw
                X3RNUjdySV9pcC1NVHp0SnJ0QS1rajB0WUZRWjlBTE1VSGxCaGJZVTBja0FEMWxTREtoVDhER0FyOWxOSVZCQmUxUlU0ZW81OUxkV
                lZCX1VHTVNKMzE3U2FjdmFoeE91cEo5VjFxRU96SlJnQzJ3eEY0blI2Nml1U3ZWeVVLcTFuNUhHZ0dxUFNNZnhwdjBHUmFPNjhDSTVfdW
                lldXdYcncwejRtTndpM19MWFFnNnZ3WGhOTmRCdVluNkh1c0E2eUgtNmV0ZXF0QTY4NkkuVWU3eHNQcWxUZWFtSDJkQUxLVTJKdw.DwbD
                PSdZsRYvyfH-sKx7lanle219DQvt65kRzqsGxyZ",
"token_type": "bearer",
"expires_in": 600
}

Exemplos de códigos HTTP de erro:

Retorno 401: Algum valor do parâmetro informado incorretamente. Exemplo:

{
        "timestamp": 1688566398186,
        "status": 401,
        "error": "Unauthorized",
        "message": "No message available",
        "path": "/oauth2.0/token"
}

Retorno 400: Parâmetro <code> utilizado por mais de uma vez ou inválido.

error=invalid_request

Nota

O servidor OAuth de homologação está delegando a autenticação ao ambiente de staging do gov.br.

Importante: Para valor do parâmetro scope igual a sign, o access token gerado autoriza o uso da chave privada do usuário para a confecção de uma única assinatura eletrônica avançada. O token deve ser usado em até 10 minutos. O tempo de validade do token poderá ser modificado no futuro à discrição do ITI. No caso do valor do parâmetro scope igual a signature_session (assinatura em lote), o access token gerado autoriza o uso da chave privada do usuário para a confecção de várias (até 100 arquivos) assinaturas eletrônicas avançadas durante o prazo de validade do token.

Obtenção do certificado do usuário

Para obtenção do certificado do usuário deve-se fazer uma requisição HTTP GET para endereço https://assinatura-api.staging.iti.br/externo/v2/certificadoPublico enviando o cabeçalho Authorization com o tipo de autorização Bearer e o access token obtido anteriormente. Segue abaixo o parâmetros para requisição:

Parâmetro

Valor

Authorization

Bearer <access token>

Exemplo de requisição:

GET /externo/v2/certificadoPublico HTTP/1.1
Host: assinatura-api.staging.iti.br
Authorization: Bearer AT-183-eRE7ot2y3FpEOTCIo1gwnZ81LMmT5I8c

Será retornado o certificado digital com formato PEM na resposta.

Atenção

Para emissão do certificado é realizada, previamente, a validação da situação cadastral do CPF e do nível identidade da conta gov.br do usuário.

Nível de identidade bronze Se usuário possui nível identidade bronze a API impede a emissão de certificado e retorna código e mensagem abaixo:

Response: 403

Cidadão não possui a identidade (Prata ou Ouro) necessária para uso da assinatura eletrônica digital.

CPF situação cancelada, nula, falecido Se CPF de usuário com as seguintes situações: 1. Titular Falecido - quando há data de óbito vinculada ao CPF; 2. Cancelada por Multiplicidade - quando há mais de uma inscrição no CPF para a mesma pessoa; nesse caso, elege-se um para permanecer ativo e os demais são vinculados a ele; 3. Nula - quando constatada a fraude. 4. Cancelada de Ofício - ato de ofício, no interesse da administração tributária ou determinação judicial. A API impede a emissão de certificado e retorna código e mensagem abaixo:

Response: 403

CPF com situação cancelada, nula ou falecido na Receita Federal não permite uso da assinatura eletrônica digital.

Realização da assinatura digital de um HASH SHA-256 em PKCS#7

Para gerar um pacote PKCS#7 contendo a assinatura digital de um HASH SHA-256 utilizando a chave privada do usuário, deve-se fazer uma requisição HTTP POST para o endereço https://assinatura-api.staging.iti.br/externo/v2/assinarPKCS7 enviando os seguintes parâmetros:

Parâmetros

Valor

Content-Type

application/json

Authorization

Bearer <access token>

Body da requisição:

{ "hashBase64": "<Hash SHA256 codificado em Base64>"}

Exemplo de requisição:

POST /externo/v2/assinarPKCS7 HTTP/1.1
Host: assinatura-api.staging.iti.br
Content-Type: application/json
Authorization: Bearer AT-183-eRE7ot2y3FpEOTCIo1gwnZ81LMmT5I8c

{"hashBase64":"kmm8XNQNIzSHTKAC2W0G2fFbxGy24kniLuUAZjZbFb0="}

Será retornado um arquivo contendo o pacote PKCS#7 com a assinatura digital do hash SHA256-RSA e com o certificado público do usuário. O arquivo retornado pode ser validado em https://verificador.staging.iti.br/.

Atenção

Do mesmo modo do serviço para obtenção do certificado, para gerar uma ou mais assinaturas é realizada, previamente, a validação da situação cadastral do CPF e do nível identidade da conta gov.br do usuário.

Nível de identidade bronze Se usuário possui nível identidade bronze a API impede a assinatura e retorna código e mensagem abaixo:

Response: 403

Cidadão não possui a identidade (Prata ou Ouro) necessária para uso da assinatura eletrônica digital.

CPF situação cancelada, nula, falecido Se CPF de usuário com as seguintes situações: 1. Titular Falecido - quando há data de óbito vinculada ao CPF; 2. Cancelada por Multiplicidade - quando há mais de uma inscrição no CPF para a mesma pessoa; nesse caso, elege-se um para permanecer ativo e os demais são vinculados a ele; 3. Nula - quando constatada a fraude. 4. Cancelada de Ofício - ato de ofício, no interesse da administração tributária ou determinação judicial. A API impede a assinatura e retorna código e mensagem abaixo:

Response: 403

CPF com situação cancelada, nula ou falecido na Receita Federal não permite uso da assinatura eletrônica digital.

Assinatura em Lote: Para gerar múltiplos pacotes PKCS#7, cada qual correspondente a assinatura digital de um HASH SHA-256 distinto (correspondentes a diferentes documentos), deve-se seguir as orientações do tópico Geração do Access Token para solicitação do token que permita esta operação (scope signature_session). Após a obtenção deste token, deve ser feita uma requisição para o endereço https://assinatura-api.staging.iti.br/externo/v2/assinarPKCS7 para cada hash a ser assinado, enviando os mesmo parâmetros informados acima. No código de Exemplo de aplicação pode-se verificar no arquivo assinar.php um exemplo de implementação da chamada ao serviço para uma assinatura em lote. O retorno desta operação será um arquivo contendo o pacote PKCS#7 correspondente a cada hash enviado na requisição ao serviço.

Assinaturas PKCS#7 e PDF

Existem duas formas principais de assinar um documento PDF:

  • Assinatura detached

  • Assinatura envelopada

A Assinatura detached faz uso de dois arquivos: (1) o arquivo PDF a ser assinado; e (2) um arquivo de assinatura (.p7s). Nesta modalidade de assinatura, nenhuma informação referente à assinatura é inclusa no PDF. Toda a informação da assinatura está encapsulada no arquivo (.p7s). Qualquer alteração no PDF irá invalidar a assinatura contida no arquivo no arquivo (.p7s). Para validar esta modalidade de assinatura, é necessário apresentar para o software de verificação os dois arquivos, PDF e (.p7s).

Para realizar esta modalidade de assinatura pela API de assinatura eletrônica avançada, deve-se calcular o hash sha256 sobre todo o arquivo PDF e enviá-lo através da operação assinarPKCS7 detalhada no tópico anterior. O arquivo binário retornado como resposta desta operação deve ser salvo com a extensão (.p7s).

A assinatura envelopada, por sua vez, inclui dentro do próprio arquivo PDF o pacote de assinatura PKCS#7. Portanto, não há um arquivo de assinatura separado. Para realizar essa modalidade de assinatura deve-se:

  1. Preparar o documento de assinatura

  2. Calcular quais os bytes (bytes-ranges) do arquivo preparado no passo 1 deverão entrar no computo do hash. Diferentemente da assinatura detached, o cálculo do hash para assinatura envelopadas em PDF não é o hash SHA256 do documento original (integral). É uma parte do documento preparado no passo 1.

  3. Calcular o hash SHA256 desses bytes

  4. Submeter o hash SHA256 à operação assinarPKCS7 desta API.

  5. O resultado da operação assinarPKCS7 deve ser codificado em hexadecimal e embutido no espaço que foi previamente alocado no documento no passo 1.

O detalhamento de como preparar o documento, calcular os bytes-ranges utilizados no computo do hash e como embutir o arquivo PKCS7 no arquivo PDF previamente preparado podem ser encontrados na especificação ISO 32000-1:2008 (Link). Existem bibliotecas que automatizam esse procedimento de acordo com o padrão (ex: PDFBox para Java e iText para C# e Java Exemplos iText).

Recomendações para assinaturas digitais em PDF

O PDF foi especificado e desenvolvido pela empresa Adobe System. A partir da versão PDF 1.6, a Adobe utiliza o padrão ISO 32000-1 em sua especificação. Este padrão define a especificação do formato digital para representação de um documento PDF de forma que permita aos usuários trocar e visualizar documentos independente do ambiente que eles foram criados. Resumidamente, a especificação define a estrutura do conteúdo do arquivo PDF, como este conteúdo pode ser interpretado, acessado, atualizado e armazenado dentro do arquivo.

O padrão PDF possui a funcionalidade chamada Atualização Incremental. Essa funcionalidade permite que o PDF seja modificado acrescentando novas informações após o fim do arquivo. A assinatura de PDF é realizada incorporando uma assinatura digital ao fim do PDF utilizando o mecanismo de Atualização Incremental. Este tipo de implementação protege contra modificação todas as informações anteriores a Assinatura Digital a ser realizada e a própria Assinatura Digital incluída no arquivo. Entretanto, ela não impede que novas Atualizações Incrementais sejam realizadas, alterando visualmente o PDF após uma assinatura ter sido incluída. Ainda assim, sempre é possível recuperar a versão que foi efetivamente assinada, e esta versão não pode ser modificada de forma alguma.

A possibilidade de alteração visual em documentos previamente assinados pode causar confusão por parte de cidadãos e órgãos públicos no momento da validação e verificação de documentos assinados. Por esta razão a partir da Versão 1.5 do PDF, foi introduzido um mecanismo para proteção e controle de alterações passíveis de serem realizadas em documentos PDF assinados. Esse mecanismo é chamado MDP (modification detection and prevention - DocMDP), e permite que a primeira pessoa a assinar o documento, ou seja, o autor, possa especificar quais alterações poderão ser realizadas em futuras atualizações incrementais.

Recomenda-se fortemente que a primeira assinatura realizada em um documento PDF seja configurada da seguinte forma:

  1. Incluir entrada Reference, com uma referência indireta a um Dicionário “Signature Reference”. Suprimir a entrada /M (Time of Signing - ISO32000/2008 - 12.8.1 - Tabela 252) no dicionário de assinatura (Signature Dictionary). Exemplo:

166 0 obj
<<
/Type /Sig
/Filter /Adobe.PPKLite
/SubFilter /adbe.pkcs7.detached
/M
/Reference [168 0 R]
/Contents <24730....>
/ByteRange [0 36705 55651 8985]
>>
Endobj
  1. O dicionário “Signature Reference” conter as entradas “Transform Method” com o valor DocMDP; e, “TransformParams” com uma referência indireta para um dicionário de TransformParams. Exemplo:

168 0 obj
<<
/Type /SigRef
/TransformMethod /DocMDP
/TransformParams 170 0 R
>>
  1. O dicionário “TransformParams” com uma entrada P com valor 2 e entrada V com valor 1.2.

170 0 obj
<<
/Type /TransformParams
/P 2
/V /1.2
>>

Importante

Não é recomendado o uso do dicionário /Perms com entrada /DocMDP por questões de compatibilidade com o Adobe. Ao configurar a primeira assinatura desta forma apenas serão permitidas as seguintes alterações: Preenchimento de formulários, templates e inclusão de novas assinaturas.

Outros valores de P possíveis de serem usados:

  • P = 1 -> Nenhuma alteração é admitida;

  • P = 2 -> Alterações permitidas em formulários, templates e inclusão de novas assinaturas; e

  • P = 3 -> Além das permissões admitidas para P = 2, admite-se também anotações, deleções e modificações.

Nota

A utilização da logo gov.br é permitida nas assinaturas que adicionam imagem ao PDF. A orientações quanto a aplicação da logo podem ser verificadas em Manual de uso da marca Link manual

Orientações para homologação do sistema integrado

A homologação será realizada através da demonstração por video anexado ao processo, demonstrando os fluxos abaixo:

1. Fluxo via Login Único GovBR

Deve-se apresentar o fluxo completo de assinatura, tanto para conta Bronze, quanto para contas Prata/Ouro, conforme descrito a seguir.

### 1.1 Conta Bronze

Passo 1: Login no sistema

  • Apresentar a tela inicial.

  • Demonstrar o usuário realizando sua autenticação via Login Único GovBR.

Passo 2: Assinatura não permitida

  • Caso o sistema permita login com conta nível Bronze, a funcionalidade de assinatura deve estar bloqueada ou indisponível.

  • Não se deve permitir que o usuário chegue à tela de Autorização.

  • É obrigatório, independente do usuário ter acesso ou não ao sistema, apresentar uma mensagem informando a impossibilidade de assinatura por ser usuário Bronze. Deve-se também disponibilizar um link para realizar o upgrade da conta.

    É necessário possuir conta gov.br nível prata ou ouro para utilizar o serviço de assinatura. `Clique aqui <https://confiabilidades.acesso.gov.br/>` para realizar o upgrade da conta.
    

Atenção

Problema: Usuário conta BRONZE está sendo redirecionado automaticamente para a tela de Autorização. Verifique:

  1. Na url do browser, se o client_id está com o valor correto. Se não estiver, corrija e teste novamente.

  2. Estando o item 1 correto, verifique se estão realizando as chamadas referentes às etapas iniciais “Requisitar Autenticação” e “Verificar nível conta” ANTES de chamar as requisições do contexto de assinatura. Se não estiverem, implemente as etapas faltantes e teste novamente.

Deve-se realizar as chamadas referentes às etapas iniciais pois só assim terão as informações da conta, evitando as chamadas do contexto de assinatura caso o usuário seja conta bronze.

Link para detalhamento da implementação das etapas “Requisitar Autenticação” e “Verificar nível conta”: https://acesso.gov.br/roteiro-tecnico/iniciarintegracao.html#passo-a-passo-para-integrar

Passo 3: Logout do sistema

### 1.2 Conta Prata/Ouro

Passo 1: Login no sistema

  • Apresentar a tela inicial.

  • Demonstrar o usuário realizando sua autenticação via Login Único GovBR.

Passo 2: Realização da assinatura

  • Apresentar como o usuário realiza a assinatura.

  • Este processo poderá incluir a assinatura de um arquivo gerado pelo próprio sistema ou a assinatura de um arquivo que usuário tenha que anexar ao sistema, isso depende do fluxo de funcionamento do sistema do órgão.

Passo 3: Download do arquivo assinado

  • Apresentar como usuário faz a visualização/download do arquivo assinado para a validação.

  • Caso a aplicação utilize assinatura destacada (gerando dois arquivos: .p7s e o arquivo original), o vídeo deve mostrar como o usuário é orientado a fazer o download de ambos os arquivos.

Passo 4: Logout do sistema

2. Fluxo via Login Alternativo

Nos sistemas que oferecem login alternativo (diferente do Login Único GovBR), deve-se mostrar o fluxo completo de assinatura, também considerando os diferentes níveis de conta.

Nota

Caso o login alternativo não tenha acesso à área de assinatura, o vídeo deve evidenciar este comportamento.

### 2.1 Conta Bronze

Passo 1: Autenticação via login alternativo

  • Apresentar a tela inicial.

  • Demonstrar o usuário realizando sua autenticação via login alternativo.

Passo 2: Solicitação de login GovBR ao tentar assinar

  • Ao clicar em “Assinar”, deve-se solicitar autenticação via Login Único GovBR.

Passo 3: Assinatura não permitida após login GovBR

Ao realizar o login, demonstrar que o usuário está impossibilitado de realizar a assinatura

  • Não se deve permitir que o usuário chegue à tela de Autorização.

  • É obrigatório apresentar uma mensagem informando a impossibilidade de assinatura por ser usuário Bronze. Deve-se também disponibilizar um link para realizar o upgrade da conta.

    É necessário possuir conta gov.br nível prata ou ouro para utilizar o serviço de assinatura. `Clique aqui <https://confiabilidades.acesso.gov.br/>` para realizar o upgrade da conta.
    

Atenção

Problema: Usuário conta BRONZE está sendo redirecionado automaticamente para a tela de Autorização. Verifique:

  1. Na url do browser, se o client_id está com o valor correto. Se não estiver, corrija e teste novamente.

  2. Estando o item 1 correto, verifique se estão realizando as chamadas referentes às etapas iniciais “Requisitar Autenticação” e “Verificar nível conta” ANTES de chamar as requisições do contexto de assinatura. Se não estiverem, implemente as etapas faltantes e teste novamente.

Deve-se realizar as chamadas referentes às etapas iniciais pois só assim terão as informações da conta, evitando as chamadas do contexto de assinatura caso o usuário seja conta bronze.

Link para detalhamento da implementação das etapas “Requisitar Autenticação” e “Verificar nível conta”: https://acesso.gov.br/roteiro-tecnico/iniciarintegracao.html#passo-a-passo-para-integrar

Passo 4: Logout do sistema

  • Demonstrar o usuário realizando o logout.

  • O usuário deve ser redirecionado para a tela inicial do sistema.

### 2.2 Conta Prata/Ouro

Passo 1: Autenticação via login alternativo

  • Apresentar a tela inicial.

  • Demonstrar o usuário realizando sua autenticação via login alternativo.

Passo 2: Solicitação de login GovBR ao tentar assinar

  • Ao clicar em “Assinar”, deve-se solicitar autenticação via Login Único GovBR.

Passo 3: Realização da assinatura

  • Apresentar como o usuário realiza a assinatura.

  • Este processo poderá incluir a assinatura de um arquivo gerado pelo próprio sistema ou a assinatura de um arquivo que usuário tenha que anexar ao sistema, isso depende do fluxo de funcionamento do sistema do órgão.

Passo 4: Download do arquivo assinado

  • Apresentar como usuário faz a visualização/download do arquivo assinado para a validação.

  • Caso a aplicação utilize assinatura destacada (gerando dois arquivos: .p7s e o arquivo original), o vídeo deve mostrar como o usuário é orientado a fazer o download de ambos os arquivos.

Passo 5: Logout do sistema

  • Demonstrar o usuário realizando o logout.

  • O usuário deve ser redirecionado para a tela inicial do sistema.

Atenção

O video deverá mostrar no navegador a url da aplicação em todas as etapas da demonstração da jornada.

Exemplo de aplicação

Logo abaixo, encontra-se um pequeno exemplo PHP para prova de conceito.

Download Exemplo PHP

Este exemplo é composto por 4 arquivos:

  • index.php Formulário para upload de um arquivo

  • upload.php Script para recepção de arquivo e cálculo de seu hash SHA256. O Resultado do SHA256 é armazenado na sessão do usuário.

  • assinar.php Implementação do handshake OAuth, assim como a utilização dos dois endpoints acima. Como resultado, uma página conforme a figura abaixo será apresentada, mostrando o certificado emitido para o usuário autenticado e a assinatura.

  • config.php Arquivo de configuração para executar o exemplo. Os valores $clientid e $secret precisam ser substituídos pelas credenciais de homologação cadastradas para a aplicação cliente.

_images/image.png

Para executar o exemplo, é possível utilizar Docker com o comando abaixo:

docker-compose up -d

e acessar o endereço http://127.0.0.1:8080

Erros Comuns

⚠️ Erro 401 – Acesso não autorizado

  • Este erro ocorre quando o cliente que está solicitando o credenciamento não utiliza corretamente os parâmetros da chamada de autorização.

Solução:

  • Verifique se as credenciais client_id e redirect_uri estão sendo corretamente utilizadas, pois esses dados devem ser exatamente os mesmos que foram cadastrados e encaminhados previamente no arquivo .txt.

  • Verifique se a URL de autorização está montada corretamente, garantindo que:

  • O redirect_uri esteja idêntico ao cadastrado (incluindo protocolo http/https e caminho completo).

  • O client_id seja exatamente o fornecido no credenciamento.

  • O scope esteja configurado corretamente (sign ou signature_session).

Exemplo de chamada correta:

https://cas.staging.iti.br/oauth2.0/authorize?response_type=code&scope=signature_session&redirect_uri=<redirect_uri_cadastrado>&client_id=<client_id_cadastrado>

Chave PGP: Validação dos dados

Ao anexar as credenciais ao processo, certifique-se de que:

  • A chave esteja dentro de uma data de validade (não será aceito chave sem data de expiração)

  • A chave não esteja expirada

Como criar um par de chaves PGP

GnuPG para Windows

Faça o download do aplicativo Gpg4win em: https://gpg4win.org/download.html O Gpg4win é um pacote de instalação para qualquer versão do Windows, que inclui o software de criptografia GnuPG. Siga abaixo as instruções detalhadas de como gerar um par de chaves PGP:

  1. Após o download, execute a instalação e deixe os seguintes componentes marcados conforme imagem abaixo:

_images/pgp1.png
  1. Concluída a instalação, execute o Kleopatra para a criação do par de chaves. Kleopatra é uma ferramenta para gerenciamento de certificados X.509, chaves PGP e também para gerenciamento de certificados de servidores. A janela principal deverá se parecer com a seguinte:

_images/pgp2.png
  1. Para criar novo par de chaves (pública e privada), vá até o item do Menu ArquivoNovo Par de chaves… selecione Criar um par de chaves OpenPGP pessoal. Na tela seguinte informe os detalhes Nome e Email, marque a opção para proteger a chave com senha e clique em Configurações avançadas…

  2. Escolha as opções para o tipo do par de chaves e defina uma data de validade. Esta data pode ser alterada depois. Após confirmação da tela abaixo, abrirá uma janela para informar a senha. O ideal é colocar uma senha forte, que deve conter pelo menos 8 caracteres, 1 digito ou caractere especial.

_images/pgp3.png

5. Após concluído, o sistema permite o envio da chave pública por email clicando em Enviar chave pública por e-mail… ou o usuário tem a opção de clicar em Terminar e exportar a chave pública para enviá-la por email posteriormente. Para exportar a chave pública e enviá-la anexo ao email, clique com botão direito na chave criada e depois clique em Exportar…

GnuPG para Linux

Praticamente todas as distribuições do Linux trazem o GnuPG instalado e para criar um par de chaves pública e privada em nome do utilizador ‘Fulano de Tal’, por exemplo, siga os passos abaixo:

  1. Abra o terminal e execute o comando abaixo e informe os dados requisitados (Nome e Email). Se não forem especificados os parâmetros adicionais, o tipo da chave será RSA 3072 bits. Será perguntado uma frase para a senha (frase secreta, memorize-a), basta responder de acordo com o que será pedido.

        $ gpg --gen-key

        gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.
        gpg: directory '/home/user/.gnupg' created
        gpg: keybox '/home/user/.gnupg/pubring.kbx' created
        Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

    O GnuPG precisa construir uma ID de usuário para identificar sua chave.

        Nome completo: **Fulano de Tal**
        Endereço de correio eletrônico: **fulanodetal@email.com**
        Você selecionou este identificador de usuário: "Fulano de Tal <fulanodetal@email.com>"
        Change (N)ame, (E)mail, or (O)kay/(Q)uit? O

        gpg: /home/user/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado
gpg: chave D5882F501CC722AA marcada como plenamente confiável
gpg: directory '/home/user/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/user/.gnupg/openpgprevocs.d/269C3D6B65B150A9B349170D5882F501CC722AA.rev'

        Chaves pública e privada criadas e assinadas.

        pub rsa3072 2021-04-30 [SC] [expira: 2023-04-30] 269C3D6B65B150A9B349170D5882F501CC722AA uid Fulano de Tal <fulanodetal@email.com>
sub rsa3072 2021-04-30 [E] [expira: 2023-04-30]

2. Para enviar um documento ou um e-mail cifrado com sua chave, é necessário que a pessoa tenha a sua chave pública. Partindo do ponto que a pessoa fez um pedido da sua chave pública, então é necessário criar um arquivo com a chave e passar o arquivo para o solicitante (por exemplo, podemos passar pelo e-mail). Execute o comando abaixo no terminal do Linux para exportar a sua chave para o arquivo MinhaChave.asc

$ gpg --export 269C3D6B65B150A9B449170D5882F501CC722AA> MinhaChave.asc

A sequência de números e letras “269C3D6B65B150A9B349170D5882F501CC722AA” é o ID da chave (da chave que criamos aqui no exemplo, substitua pelo seu ID) e MinhaChave.asc é o nome do arquivo onde será gravada a chave (pode ser outro nome). O próximo passo é o envio do arquivo com a chave pública para a pessoa e então ela poderá criptografar um e-mail ou um documento com a sua chave pública. Se foi criptografado com a sua chave pública, somente a sua chave privada será capaz de decodificar o documento e a frase secreta de sua chave será requisitada.

  1. Para decifrar um documento que foi criptografado com a sua chave pública basta seguir os passos abaixo, substituindo NomeArquivo.gpg pelo nome do arquivo cifrado. Será solicitada a frase secreta de sua chave privada. Um arquivo com nome ArquivoTextoClaro será criado na mesma pasta. Este arquivo contêm as informações decifradas.

$ gpg -d NomeArquivo.gpg > ArquivoTextoClaro

gpg: criptografado com 3072-bit RSA chave, ID 4628820328759F85, criado 2021-04-24 "Fulano de Tal <fulanodetal@email.com>"