PRESIDÊNCIA DA REPÚBLICA - CASA CIVIL
SCN QUADRA 02 BLOCO E - CEP 70712-905 - Brasília/DF
Telefone: (61) 3424-3945 - https://www.iti.gov.br
INSTRUÇÃO NORMATIVA N° 06, DE 16 DE ABRIL DE 2018
INCLUI O ITEM 6.4 NO DOC-ICP-17.01,
REFERENTE A REQUISITOS PARA
SERVIÇOS DE CONFIANÇA DE USO DE
CHAVES PRIVADAS.
O DIRETOR-PRESIDENTE DO INSTITUTO NACIONAL DE
TECNOLOGIA DA INFORMAÇÃO, no uso das atribuições que lhe foram
conferidas pelo inciso VI do art. do anexo I do Decreto 8.985, de 8 de
fevereiro de 2017, pelo art. da Resolução 33, do Comitê Gestor da ICP-
Brasil, de 21 de outubro de 2004,
RESOLVE:
Art. 1º O DOC-ICP-17.01, versão 1.0, passa a vigorar acrescido do
item 6.4 com a seguinte redação:
6.4. Requisitos para serviços de confiaa de uso de chaves
privadas
6.4.1. Definições para Interface de Serviços de Confiança
Deverá ser utilizado o protocolo TLS, definido pela RFC 5246, para
comunicação com serviços de confiança.
Deverá ser utilizado o framework OAuth 2.0 (RFC 6749 e RFC 7636)
para implementação da interface aos serviços de confiança dos PSC.
Adicionalmente, poderá ser implementada outra interface para os
serviços de confiança, desde que o PSC proveja o software necessário para
possibilitar ao titular o uso das suas chaves privadas de forma segura.
6.4.2. Definições para URI de base para Serviços de Confiaa
A URI de base URI-base - definirá o estilo e formato dos
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 1
REVOGADA
endereços HTTPS de serviços de confiança.
A URI de base conterá número correspondendo à versão de API
definida pela ICP-Brasil.
Este documento trata da versão “v0” de API para PSC.
Exemplo de URI-base:
https://servico.provedor_de_servico.com.br/v0/
Obs.: O endereço servico.provedor_de_servico.com.br representa
neste exemplo a porção authority da URI em domínio utilizado pelo PSC.
As demais porções de URI presentes neste documento devem ser
concatenadas à URI-base.
6.4.3. Autorização e Autenticação para Requisição de Serviços
6.4.3.1. Fluxo básico para Uso de Serviços de Confiança
Seguindo o fluxo de autorização estabelecido pela RFC 6749, o uso
de chaves privadas em PSC deverá ser precedido de solicitação bem sucedida,
por parte de aplicações, dos seguintes serviços:
i. Requisição de digo de Autorização
ii. Requisição de Token de Acesso
iii. Serviço de assinatura utilizando chave de usrios:
6.4.3.2. Trânsito de Fatores de Autenticação
As aplicações o deverão coletar fatores de autenticação do
usuário. Para este fim, os PSC deverão se comunicar diretamente com
equipamento do usrio, previamente identificado e cadastrado junto ao PSC de
forma segura.
Excetua-se desta regra o Serviço Autorização com Credenciais do
Titular”.
6.4.3.3. Autenticação de Aplicações de Assinatura
Para obter acesso aos serviços de confiança, os PSC deverão
implementar obrigatoriamente o Serviço de Cadastro de Aplicação com
Certificado ICP-Brasil para SSL.
O PSC poderá tamm implementar Serviços de Confiança Opcionais
para Cadastro de Aplicação sem Certificado, Token de Acesso para Aplicações e
Manutenção de Aplicações.
Os PSC poderão implementar, para as aplicações, outros métodos de
acesso aos seus serviços, desde que os riscos associados sejam avaliados e
possibilitem rastreabilidade.
6.4.4. Relação de Serviços de Confiaa Disponibilizados por PSC
a) Serviços de Confiaa Obrigatórios
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 2
i. Código de Autorização
ii. Token de Acesso
iii. Assinatura
iv. Cadastro de Aplicação com Certificado
b) Serviços de Confiaa Opcionais
i. Cadastro de Aplicação sem Certificado
ii. Token de Acesso para Aplicação
iii. Manutenção de Aplicação
iv. Autorização com Credenciais do Titular
6.4.5. Detalhamento de Serviços de Confiança Obrigatórios
6.4.5.1. Serviços de Autorização
6.4.5.1.1. Código de Autorização (Authorization Code Request)
Serviço para obter do titular a autorização de uso da sua chave
privada.
a) Solicitação
Path : <URI-base>/oauth/authorize;
Método HTTPS : GET;
Parâmetros da requisição : concatenados as o Path como
parâmetros http query, usando o formato "application/x-www-form-
urlencoded" :
response_type : obrigatório, valor "code";
client_id : obrigatório, deve conter a identificação da
aplicação;
redirect_uri : opcional, deve ter a URI para redirecionar o
usuário de volta para a aplicação de origem. A URI deve estar na lista
de URI's autorizadas para a aplicação. Deve ser URL ENCODED. Se o
informado, será considerada a primeira URI cadastrada para a
aplicação;
state : opcional, é retornado sem modificações para
aplicação de origem;
Recomendado. Um valor opaco usado pela aplicação
para manter o estado entre a requisição e a resposta. O serviço
de autorização incluirá este valor ao redirecionar o módulo do
usuário de volta ao endereço da aplicação. Este parâmetro
deverá ser usado para prevenir ataques de falsificação de
requisições entre sites (cross-site request forgery).
lifetime : opcional, indica o tempo de vida desejado para o
token a ser gerado. Inteiro, em segundos;
scope : opcional, se o informado, será considerado
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 3
"single_signature".
(ver lista de escopos abaixo). Possíveis valores para o
parâmetro:
single_signature: token que permite a assinatura de
apenas um conteúdo (hash), sendo invalidado apos a sua
utilização;
multi_signature: token que permite a assinatura de
multiplos hashes em uma única requisicao, sendo invalidado apos
a sua utilização;
signature_session: token de sessão OAuth que
permite várias assinaturas em várias chamadas a API, desde que
o token esteja dentro do prazo de validade ou queo tenha sido
revogado pela aplicação ou pelo usrio.
code_challenge : obrigatório, ver RFC 7636
code_challenge_method : obrigatório, valor “S256(ver RFC
7636).
b) Resposta da Requisição de Código de Autorização:
É retornado um URI de redirecionamento com dois parâmetros http
query, usando o formato "application/x-www-form-urlencoded":
code : obrigatório, código de autorização gerado pelo PSC,
a ser usado na solicitação do token de acesso;
state : obrigatório caso tenha sido informado na
requisição, deverá conter o que foi enviado na requisição.
6.4.5.1.2. Token de Acesso
Após a obtenção de código de autorização, o token de acesso deve
ser solicitado com parâmetros no formato "application/x-www-form-urlencoded" .
a) Solicitação
Path : <URI-base>/oauth/token ;
Método HTTPS : POST;
Parâmetros da requisição : formato "application/x-www-form-
urlencoded"
grant_type : obrigatório, valor "authorization_code";
client_id : obrigatório, deve conter a identificação da
aplicação;
client_secret : opcional, sendo obrigatório se a aplicação
o utilizar certificado ICP-Brasil;
code : deve conter código de autorização retornado do
Serviço digo de Autorização como redirect_uri;
redirect_uri : opcional, deve ser igual ao informado no
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 4
Serviço digo de Autorização;
code_verifier : obrigatório, correspondendo a
code_challenge enviado na Requisição de Código de Autorização, ver
RFC 7636.
Exemplo:
POST {.../oauth/token} HTTP/1.1
Host: {servidor do PSC}
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=MyApplicationId
&client_secret=123qwe
&code=09b30f74d40a7fece1a26cccc97746c364e61022
&redirect_uri=https://idg.receita.fazenda.gov.br
&code_verifier={Verifier}
b) Resposta da Requisição de Token de Acesso:
Parâmetros de retorno : formato "application/json;charset=UTF-
8"
access_token : obrigatório, valor do token de acesso;
token_type : obrigatório, valor "Bearer";
expires_in : obrigatório, valor inteiro com validade do
token em segundos. Não deve ultrapassar o valor 300 (5 minutos);
scope : opcional, deve ser informado se o escopo retornado
for diferente do solicitado pela aplicação.
Exemplo:
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8
Cache-Control: no-store Pragma: no-cache { "access_token":
"b923575f1ced0ee732ee274b2e02784040bd9606", "expires_in": 300,
"token_type": "Bearer" }
OBS: o será permitido o refresh_token.
6.4.5.2. Assinatura
Os parâmetros com conteúdo a ser assinado e assinaturas deverão
conter valores em hexadecimal.
Se o escopo do token permitir apenas uma assinatura
(sigle_signature) e for informado mais de um conteúdo, uma mensagem de erro
deve ser retornada.
a) Solicitação
Path : <URI-base>/oauth/signature
Método HTTPS : POST
Cabeçalho :
Content-type : application/json ;
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 5
Accept : application/json ;
Authorization : Bearer access_token;
Parâmetros : formato "application/json;charset=UTF-8" :
certificate_alias": identificador da chave ;
hashes : conjunto com valores a serem assinados. Cada
elemento do conjunto conterá:
id : identificador do conteúdo a ser assinado;
alias : forma level do identificador do conteúdo;
hash : conteúdo a ser assinado
Exemplo
"certificate_alias": "cert001abc",
"hashes": [{
"id": "Signature request ID 1",
"alias": "Contrato de aluguel XPTO",
"hash": "hash to sign"
},
{
"id": "Signature request ID 2",
"alias": "Documento do Word",
"hash": "hash to sign"
}
{
"id": "Signature request ID n",
"alias": "Firefox",
"hash": "hash to sign"
}
]}
b) Resposta da Requisição de Assinatura:
Parâmetros : formato "application/json;charset=UTF-8" :
status : obrigatório, “success" para sucesso;
message: obrigatório, mensagem com informações
adicionais;
id : identificador do conteúdo assinado;
raw_signature : valor numérico em base64 da assinatura
produzida.
Exemplo
{
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 6
"status": "success",
"message": "Hashes assinados com sucesso",
"signatures": [{
"id": "Signature request ID 1",
"raw_signature": "my raw signature base64"
},
{
"id": "Signature request ID 2",
"raw_signature": "my raw signature base64"
},
{
"id": "Signature request ID n",
"raw_signature": "my raw signature base64"
}]}
6.4.5.4. Cadastro de Aplicação com Certificado
Serviço para cadastro de uma aplicação junto ao PSC, sendo que a
aplicação utilizará um certificado SSL ICP-Brasil para assinar os dados enviados,
substituindo neste caso o Serviço de Cadastro de Aplicação.
a) Solicitação
Path : <URI-base>/oauth/application_cert
Método HTTPS: POST
Cabeçalho :
Content-type : application/json ;
Accept : application/json ;
Parâmetros : formato "application/json;charset=UTF-8" :
signed_info, estrutura de dados assinada com certificado
SSL ICP-Brasil, contendo:
name, obrigatório, nome da aplicação;
comments, obrigatório, descrição da aplicação;
redirect_uris, obrigatório, URIs autorizadas para
redirecionamento (para serviços de requisição de autorização).
Devem ser oriundas da URL Base do certificado de equipamento
apresentado, sendo vedada a utilização de fragments;
b) Resposta do Serviço de Cadastro de Aplicação com Certificado
Parâmetros : formato "application/json;charset=UTF-8" :
status, obrigatório, “success" para sucesso;
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 7
message, obrigatório, mensagem com informações
adicionais.
6.4.6. Detalhamento de Serviços de Confiança Opcionais
6.4.6.1. Cadastro de Aplicação sem Certificado
Serviço para cadastro de uma aplicação junto ao PSC. É obrigatório
para todas as aplicações que utilizarem serviços de autorização sem certificados
ICP-Brasil.
a) Solicitação
Path : <URI-base>/oauth/application
Método HTTPS: POST
Cabeçalho :
Content-type : application/json ;
Accept : application/json ;
Parâmetros : formato "application/json;charset=UTF-8" :
client_id : obrigatório, CNPJ base da aplicação (antes da
"/");
client_secret : obrigatório, senha/segredo da aplicação;
name : obrigatório, nome/descrição da aplicação;
comments : obrigatório, observações gerais de uso da
aplicação;
redirect_uris : obrigatório, URIs autorizadas para
redirecionamento (para serviços de digo de autorização).
Exemplo:
{
"client_id": "(CNPJ da aplicacao)",
"client_secret": "(Senha/Segredo da aplicacao)",
"name": "(Nome/Descricao da aplicacao)",
"comments": "(Observacoes gerais de uso da aplicacao)",
"redirect_uris": [
"URI 1 pre cadastrada para redirecionamento",
"URI 2 pre cadastrada para redirecionamento",
"URI N pre cadastrada para redirecionamento"
]
}
b) Resposta da Requisição de Cadastro de Aplicação
Parâmetros : formato "application/json;charset=UTF-8" :
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 8
status : obrigatório, “success" para sucesso;
message: obrigatório, mensagem com informações
adicionais.
Exemplo:
{
"status": "success",
"message": "Aplicacao cadastrada com sucesso"
}
6.4.6.2. Serviços de Manutenção de Cadastro de Aplicação
Serviço para manutenção das informações armazenadas de uma
aplicação no PSC. É obrigatório para todas as aplicações que utilizarem serviços
de autorização o identificadas por certificados ICP-Brasil para SSL.
6.4.6.2.1. Token de Acesso para Aplicação
Requisição para que uma aplicação obtenha token de acesso para
manutenção de seu cadastro junto ao PSC.
a) Solicitação
Método HTTPS : POST;
Path : <URI-base>/oauth/client_token ;
Parâmetros da requisição: concatenados as o Path como
parâmetros http query, usando o formato "application/x-www-form-
urlencoded" :
grant_type, obrigatório, valor "client_credentials";
client_id, obrigatório, deve conter a identificação da
aplicação;
client_secret, obrigatório se a aplicação o utilizar
certificado SSL ICP-Brasil;
lifetime, opcional, validade desejada para o token a ser
gerado, deve conter valor Inteiro, em segundos.
Exemplo
POST {.../oauth/client_token} HTTP/1.1
Host: {servidor do PSC}
Content-Type: application/x-www-form-urlencoded
client_id=Identificacao_aplicacao
&client_secret=123qwe
&grant_type=client_credentials
&lifetime=900
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 9
b) Resposta da Requisição de Token de Acesso para Aplicações:
Parâmetros de retorno : formato "application/json;charset=UTF-
8" :
access_token, obrigatório, valor do token de acesso;
token_type, obrigatório, valor "Bearer";
expires_in, opcional, validade do token em segundos.
Exemplo:
{
"access_token": "b923575f1ced0ee732ee274b2e02784040bd9606",
"expires_in": 7200,
"token_type": "Bearer"
}
6.4.6.2.2. Manutenção de Aplicação
Serviço para atualização de informações de uma aplicação. Requer
um token de acesso para aplicações, enviado no parâmetro de cabeçalho
“Authorization” .
a) Solicitação
Path : <URI-base>/oauth/client_maintenance ;
Método HTTPS : PUT ;
Cabeçalho :
Content-type : application/json ;
Accept : application/json ;
Authorization : Bearer access_token (“Bearer concatenado
espaço e access_token);
Parâmetros : formato "application/json;charset=UTF-8" :
client_id, obrigatório, CNPJ base da aplicacao (antes da
"/");
client_secret, opcional, nova senha da aplicacao;
name, opcional, nome da aplicação;
comments, opcional, observações gerais de uso da
aplicação;
redirect_uris, opcional, URI’s autorizadas para
redirecionamento (para requisição de digo de autorização).
Exemplo:
{
"client_id": "(CNPJ da aplicacao)",
"client_secret": "(Senha/Segredo da aplicacao)",
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 10
"name": "(Nome/Descricao da aplicacao)",
"comments": "(Observacoes gerais de uso da aplicacao)",
"redirect_uris": [
"URI 1 pre cadastrada para redirecionamento",
"URI 2 pre cadastrada para redirecionamento",
"URI N pre cadastrada para redirecionamento"
]}
b) Resposta da Requisição de Manutenção de Aplicações
Parâmetros de retorno : formato "application/json;charset=UTF-
8" :
status, obrigatório, “success" para sucesso;
message, obrigatório, mensagem com informações
adicionais.
Exemplo :
{
"status": "success",
"message": "Aplicacao atualizada com sucesso"
}
6.4.6.3. Autorização com Credenciais do Titular
Serviço para obter do titular autorização de uso da sua chave
privada, com solicitação de fatores de autenticação.
No nimo um fator de autenticação obtido deve ser válido para uma
única solicitação de autorização (OTP- one-time password).
Os fatores de autenticação deverão ter seus valores concatenados e
enviados no parâmetro “password”.
a) Solicitação
Path : <URI-base>/oauth/pwd_authorize ;
Método HTTPS : POST ;
Cabeçalho :
Content-type : application/json ;
Accept : application/json ;
Parâmetros : formato "application/json;charset=UTF-8" :
grant_type, obrigatório, valor "password”;
client_id, obrigatório, identificação da aplicação;
client_secret, opcional, sendo obrigatório apenas quando a
aplicação não utilizar certificado ICP-Brasil;
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 11
username, obrigatório, identificação do usrio por meio de
CPF ou CNPJ;
password, obrigatório, valor da concatenação de fatores de
autenticação informadas pelo usrio;
lifetime, opcional, indica o tempo de vida desejado para o
token a ser gerado, valor inteiro, em segundos. o deve ultrapassar
o valor 300 (5 minutos);
scope, opcional, se o informado será considerado
"single_signature". (ver lista de escopos para Serviço de Código de
Autorização ).
Exemplo:
{
client_id": "MyApplicationId",
"client_secret": "123qwe","username": "0660457192",
"password": "123456SENHA",
"grant_type": "password",
"scope": "single_signature",
"lifetime": 900
}
b) Resposta da Requisição de Manutenção de Aplicações
Parâmetros de retorno : formato "application/json;charset=UTF-
8" :
access_token, obrigatório, valor do token de acesso;
token_type, obrigatório, valor "Bearer";
expires_in, obrigatório, validade do token em segundos.
o deve ultrapassar o valor 300 (5 minutos);
scope, opcional, informado apenas se o escopo retornado
for diferente do solicitado pela aplicação.
Exemplo:
{
"access_token":
"b923575f1ced0ee732ee274b2e02784040bd9606",
"expires_in": 300,
"token_type": "Bearer"
} (NR)
Ar t. 2º Aprovar a versão 1.1 do documento DOC-ICP-17.01
PROCEDIMENTOS OPERACIONAIS MÍNIMOS PARA OS PRESTADORES DE SERVIÇO
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 12
DE CONFIANÇA DA ICP-BRASIL.
§ As demais cláusulas do referido documento, na sua versão
imediatamente anterior, integram a presente versão e mantêm-se válidas.
§ O documento referido no caput encontra-se disponibilizado, em
sua totalidade, no sítio http://www.iti.gov.br.
Art. 3º Esta Instrução Normativa entra em vigor na data de sua
publicação.
GASTÃO JOSÉ DE OLIVEIRA RAMOS
Documento assinado eletronicamente por Gastão Jose de Oliveira Ramos,
Presidente, em 19/04/2018, às 11:38, conforme horário oficial de Brasília,
com o emprego de certificado digital emitido no âmbito da ICP-Brasil, com
fundamento no art. 6º, caput, do Decreto nº 8.539, de 8 de outubro de
2015.
de Série do Certificado: 1196012486691539497
A autenticidade deste documento pode ser conferida no site
https://sei.iti.gov.br/sei/controlador_externo.php?
acao=documento_conferir&id_orgao_acesso_externo=0, informando o
digo verificador 0104545 e odigo CRC B84830F1.
Instrução Normativa 06/2018 (0104545) SEI 99990.000567/2017-94 / pg. 13