Demoiselle Certificate CA ICP-Brasil Homologacao

Demoiselle CA ICP-Brasil Homologacao Component

License

License

GroupId

GroupId

br.gov.frameworkdemoiselle.component
ArtifactId

ArtifactId

demoiselle-certificate-ca-icpbrasil-homologacao
Last Version

Last Version

1.2.8
Release Date

Release Date

Type

Type

jar
Description

Description

Demoiselle Certificate CA ICP-Brasil Homologacao
Demoiselle CA ICP-Brasil Homologacao Component
Project URL

Project URL

http://www.frameworkdemoiselle.gov.br
Project Organization

Project Organization

SERPRO - Serviço Federal de Processamento de Dados

Download demoiselle-certificate-ca-icpbrasil-homologacao

How to add to project

<!-- https://jarcasting.com/artifacts/br.gov.frameworkdemoiselle.component/demoiselle-certificate-ca-icpbrasil-homologacao/ -->
<dependency>
    <groupId>br.gov.frameworkdemoiselle.component</groupId>
    <artifactId>demoiselle-certificate-ca-icpbrasil-homologacao</artifactId>
    <version>1.2.8</version>
</dependency>
// https://jarcasting.com/artifacts/br.gov.frameworkdemoiselle.component/demoiselle-certificate-ca-icpbrasil-homologacao/
implementation 'br.gov.frameworkdemoiselle.component:demoiselle-certificate-ca-icpbrasil-homologacao:1.2.8'
// https://jarcasting.com/artifacts/br.gov.frameworkdemoiselle.component/demoiselle-certificate-ca-icpbrasil-homologacao/
implementation ("br.gov.frameworkdemoiselle.component:demoiselle-certificate-ca-icpbrasil-homologacao:1.2.8")
'br.gov.frameworkdemoiselle.component:demoiselle-certificate-ca-icpbrasil-homologacao:jar:1.2.8'
<dependency org="br.gov.frameworkdemoiselle.component" name="demoiselle-certificate-ca-icpbrasil-homologacao" rev="1.2.8">
  <artifact name="demoiselle-certificate-ca-icpbrasil-homologacao" type="jar" />
</dependency>
@Grapes(
@Grab(group='br.gov.frameworkdemoiselle.component', module='demoiselle-certificate-ca-icpbrasil-homologacao', version='1.2.8')
)
libraryDependencies += "br.gov.frameworkdemoiselle.component" % "demoiselle-certificate-ca-icpbrasil-homologacao" % "1.2.8"
[br.gov.frameworkdemoiselle.component/demoiselle-certificate-ca-icpbrasil-homologacao "1.2.8"]

Dependencies

compile (4)

Group / Artifact Type Version
br.gov.frameworkdemoiselle.component : demoiselle-certificate-core jar 1.2.8
br.gov.frameworkdemoiselle.component : demoiselle-certificate-ca-icpbrasil jar 1.2.8
org.bouncycastle : bcprov-jdk15 jar 1.45
org.bouncycastle : bcmail-jdk15 jar 1.45

test (1)

Group / Artifact Type Version
junit : junit jar

Project Modules

There are no modules declared in this project.

Caso esteja iniciando um projeto novo utilize o componente Demoiselle Signer (https://github.com/demoiselle/signer)

Demoiselle Certificate

================================

O Demoiselle Certificate é um componente para facilitar a implementação de assinatura digital usando certificado. O componente implementa o padrão de assinatura básica ADRB em CADES do ICPBrasil, conforme o DOC-ICP-15.

O componente é dividido de acordo com suas funcionalidades:

  • demoiselle-certificate-core: fornece acesso ao token, carregamento de certificado e API para dados de um certificado ICPBrasil

  • demoiselle-certificate-ca-icpbrasil: possui as cadeias de autoridades certificadores ICPBrasil válidas

  • demoiselle-certificate-criprography: provê funcionalidades de criptografia

  • demoiselle-certificate-signer: realiza assinatura digital e verificação de assinatura

  • demoiselle-certificate-desktop: possui funcionalidades para desenvolvimento aplicação desktop via Java Web Start

Funcionalidades ainda não implementadas no componente:

  • Assinatura com carimbo de tempo
  • Assinatura no padrão XADES (assinatura em XML)
  • Assinatura no padrão PADES (assinatura em PDF)

Repositório Maven

<repositories>
	<repository>
		<id>demoiselle.sourceforge.net-release</id>
		<url>http://demoiselle.sourceforge.net/repository/release</url>
	</repository>
	<repository>
		<id>demoiselle.sourceforge.net-snapshot</id>
		<url>http://demoiselle.sourceforge.net/repository/snapshot</url>
	</repository>
</repositories>

Documentação

A documentação completa está disponível em: Documentação

Modelo e Aplicação de Exemplo

Disponibilizamos uma aplicação de exemplo seguindo o modelo descrito abaixo em: Github

Aplicação Web

Alt text

  1. O usuário escolhe os arquivos que deseja assinar.
  2. O usuário clica no botão assinar, que dispara uma requisição para baixar o JNLP.
  3. A requisição deve conter as identificações dos arquivos selecionados, os quais devem trafegar dentro do corpo da requisição numa conexão segura. Jamais deve-se trafegar as identificações na URL. Recomenda-se fazer uma requisição POST via HTTPS. Recomenda-se usar o formato JSON, passando as identificações como arrays. Definir o cabeçalho Content-Type: application/json.
  4. O serviço (ou página dinâmica) deve recuperar as identificações dos arquivos no corpo da requisição, criar uma chave única e seguro (Token) e associar as identificações à chave de forma persistente.
  5. O serviço (ou página dinâmica) deve criar um novo arquivo JNLP contendo no seu corpo o Token criado e uma URL fixa que auxiliará o assinador a recuperar os arquivos e a submeter as assinaturas posteriormente. Por questões de segurança esta URL não deve conter tokens, nem chaves, nem identificadores de sessão.
  6. O serviço (ou página dinâmica) devolve a resposta com o status HTTP 200 contendo o arquivo JNLP no corpo e no cabeçalho o Content-Type: application/x-java-jnlp-file.

Alt text

Enquanto o proceso de assinatura ocorre em paralelo, recomenda-se que a aplicação Web fique em estado de espera. De tempos em tempos, ou via notificação do servidor, a tela deve verificar o status do processo de assinatura para desbloquear a tela apresentando uma mensagem de sucesso ou de falha para o usuário.

Aplicação Java SE

Alt text

  1. Após o download da aplicação Java SE, o usuário deve executá-la (ou ela deve executar automaticamente). Durante o processo de inicialização, a aplicação deve acessar a URL auxiliar definida nos atributos do JNLP para obter os arquivos.
  2. A aplicação deve disparar uma requisição GET via HTTPS para a URL informando o Token, ambos obtidos nos atributos do JNLP. O Token deve ser passado no cabeçalho Authorization: TOKEN Token. Por questões de segurança, NUNCA trafegue o Token na URL. Definir o cabeçalho Accept: application/zip.
  3. Ao receber a requisiçao, o serviço (ou página dinâmica) que responde pela URL deve resgatar da base os arquivos associados ao Token.
  4. O serviço (ou página dinâmica) devolve a resposta com o status HTTP 200 contendo os arquivos zipados no corpo. No cabeçalho deve conter Content-Type: application/zip. Os arquivos a serem assinados devem estar agrupados na raiz do ZIP. Fica a critério do projeto definir se os arquivos que compõem o ZIP serão os arquivos originais ou apenas os seus hashs.
  5. Ao final da requisição, a aplicação descompacta o arquivo ZIP para obter os arquivos a serem assinados. Recomenda-se exibir para o usuário o nome dos arquivos que serão assinados.
  6. O processo de assinatura tem início de forma automática, disparando todos os passos da interação com o usuário para obter o certificado digital e proceder com a assinatura propriamente dita.
  7. Após a conclusão do processo de assinatura, a aplicação deve fazer uma requisição POST via HTTPS para a URL informando o Token no cabeçalho Authorization: TOKEN Token e as assinaturas zipadas no corpo. Os arquivos a serem assinados devem estar agrupados na raiz do ZIP. No cabeçalho da requisição deve conter também Content-Type: application/zip.
  8. Ao receber a requisiçao, o serviço (ou página dinâmica) deve resgatar da base os arquivos associados ao Token, verificar se a assinatura corresponde ao arquivo no servidor, guarda a assinatura na base de dados associando-as aos arquivos originais, desassocia o Token dos arquivos e descarta o Token.
  9. O serviço (ou página dinâmica) devolve a resposta com o status HTTP 204 e a aplicação cliente se encerra.
br.gov.frameworkdemoiselle.component

Demoiselle

Versions

Version
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-RC3
1.2.0-RC2
1.2.0-RC1
1.1.3
1.1.2