Certificados de teste
Se você não tiver um certificado ICP-Brasil para testar nossos produtos, você pode utilizar um dos certificados para testes da ICP de testes da Lacuna Software.
A ICP de testes da Lacuna Software nunca deve ser aceita em ambiente de produção!
Todos os arquivos no zip acima estão em formato PKCS #12 (arquivos .pfx) com senha 1234. Os seguintes certificados estão presentes:
- Alan Mathison Turing
- Email: testturing@lacunasoftware.com
- Mimetiza certificado ICP-Brasil de pessoa física com CPF 560.723.861-05
- Ferdinand Georg Frobenius
- Email: testfrobenius@lacunasoftware.com
- Mimetiza certificado ICP-Brasil de pessoa física com CPF 873.780.111-26
- Pierre de Fermat
- Email: test@lacunasoftware.com
- Mimetiza certificado ICP-Brasil de pessoa física com CPF 473.633.618-86
- Wayne Enterprises, Inc
- Email: test@wayneenterprises.com
- Mimetiza certificado ICP-Brasil de pessoa jurídica com CNPJ 34.785.515/0001-66
- Representante legal: Bruce Wayne, CPF 478.911.786-31
Se você precisar de um certificado diferente com dados específicos, você mesmo pode emitir um certificado de testes com os dados que quiser.
Lembre-se de sempre remover a confiança na ICP de testes da Lacuna Software ao levar a sua aplicação para produção. Ainda melhor, recomendamos o emprego de alguma técnica de compilação condicional de modo que a ICP de testes seja aceita apenas quando o código estiver executando em modo debug.
O que os arquivos contêm
-
Cada arquivo contém só o certificado final e a chave privada dele, sem a cadeia. Importar um arquivo não instala a raiz nem a AC intermediária de testes.
-
Os certificados são emitidos pela Lacuna CA Test v7, que é emitida pela Lacuna Root Test v3. Para confiar na ICP de testes, confie nessa raiz:
- Subject:
C=BR, O=ICP-Brasil, OU=Lacuna Software - LS, CN=Lacuna Root Test v3, válida de 16/12/2024 a 16/12/2074. - Impressão digital SHA-256:
BE:1E:84:17:7B:80:F1:88:9A:65:F1:10:10:A8:FB:85:49:5B:E7:0F:FC:3D:83:F5:C6:D6:3A:92:BE:DC:C0:18. - Download: lacuna-root-test-v3.cer. A AC intermediária é a lacuna-ca-test-v7.cer.
- Subject:
-
Os certificados valem até janeiro de 2075, com os usos de chave Digital Signature, Non Repudiation e Key Encipherment, e os usos estendidos autenticação de cliente TLS e proteção de e-mail.
-
Os arquivos usam a criptografia antiga do PKCS #12 (3DES para a chave, RC2 de 40 bits para o certificado, MAC com SHA-1). O OpenSSL 3 os recusa com o erro
unsupported ... RC2-40-CBC, a menos que você passe-legacy:openssl pkcs12 -legacy -in "Pierre de Fermat.pfx" -passin pass:1234 -nokeys
Confiando na ICP de testes em cada produto
Cada produto decide à sua maneira em quais raízes confia, e você precisa configurar cada um para confiar na ICP de testes. As seções abaixo mostram como, e o que fazem os projetos de exemplo:
| Produto | Como confiar na ICP de testes | O que os exemplos fazem |
|---|---|---|
| Web PKI | Instale o certificado no repositório do usuário; a confiança vem do Rest PKI ou dos trustArbitrators de uma assinatura local | .NET: adiciona uma raiz de testes antiga, que não aceita mais estes certificados |
| Rest PKI | Contexto de segurança 803517ad-3bbc-4169-b085-60053a8f6dbf | .NET: builds de debug; demais linguagens: trustLacunaTestRoot |
| Rest PKI Core | O mesmo contexto de segurança, por requisição ou como padrão da organização | .NET: builds de debug; Java: trustLacunaTestRoot |
| PKI SDK | TrustedRoots com a Lacuna Root Test v3 num LinkedTrustArbitrator | .NET: builds de debug |
| PKI Express | trustLacunaTestRoot no operador | trustLacunaTestRoot na configuração |
| Signer | Adicione a raiz ao TrustArbitrator da instância (on-premises) | Assinam no sandbox com um certificado de teste |
| TrustBridge | Certificates:Validation:UseLacunaTestPki no Servidor e em cada estação de trabalho | Nenhum exemplo publicado |
Web PKI
O Web PKI lista os certificados do repositório de certificados do sistema operacional e dos dispositivos criptográficos conectados, então um certificado de teste precisa estar instalado para que o Web PKI o liste.
Windows. Importe o arquivo .pfx para o repositório Pessoal do usuário atual. Dê um duplo clique no arquivo e siga o Assistente para Importação de Certificados (local do repositório Usuário Atual, senha 1234), ou rode no PowerShell:
Import-PfxCertificate -FilePath ".\Pierre de Fermat.pfx" -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString 1234 -AsPlainText -Force)
Depois disso, o certmgr.msc mostra o certificado na pasta Pessoal, com a indicação de que você tem a chave privada correspondente. Veja Primeiros passos.
TODO(docs): como instalar os arquivos PKCS #12 de teste para que o Web PKI os liste no Linux e no macOS. Nenhuma fonte diz qual repositório o Web PKI lê nesses sistemas.
Confiança. Instalar o certificado não faz uma assinatura confiar nele:
- Com o Rest PKI ou o Rest PKI Core, quem decide é o contexto de segurança da operação: veja Configurando o Rest PKI e Rest PKI Core.
- Numa assinatura feita só com o Web PKI, como a
signPdf(), adicione a Lacuna Root Test v3 aostrustArbitratorscomo árbitrotrustedRoot, com a raiz codificada em Base64, só em desenvolvimento. O exemplo em ASP.NET MVC faz isso emViews/PadesSignatureWeb/Index.cshtml, mas o_lacunaTestRootdele (emViews/Shared/_Layout.cshtml) é uma raiz antiga, a Lacuna Root Test v1, que expirou em janeiro de 2025 e não é a raiz destes certificados: use a Lacuna Root Test v3.
trustArbitrators: [
pki.standardTrustArbitrators.pkiBrazil,
// Lacuna Software Test Root (development only!)
{ type: 'trustedRoot', trustedRoot: lacunaTestRootBase64 }
]
Configurando o Rest PKI
O ID do contexto de segurança que contém a ICP de testes da Lacuna Software é:
Lacuna Test PKI security context ID (for development purposes only!!!):
803517ad-3bbc-4169-b085-60053a8f6dbf
Passe-o como o contexto de segurança da operação. Por exemplo, para iniciar uma assinatura PAdES (PDF) em PHP:
// Trust Lacuna Test PKI (for development purposes only!!!)
$signatureStarter->setSecurityContext("803517ad-3bbc-4169-b085-60053a8f6dbf");
Ou em Java:
// Trust Lacuna Test PKI (for development purposes only!!!)
signatureStarter.setSecurityContext(new SecurityContext("803517ad-3bbc-4169-b085-60053a8f6dbf"));
Nos projetos do PkiSuiteSamples você não altera o exemplo: todas as páginas obtêm o contexto de segurança de um auxiliar Util, que devolve o contexto da ICP de testes da Lacuna quando a chave do projeto está ligada.
| Linguagem | Exemplo (PAdES com o Rest PKI) | Chave |
|---|---|---|
| PHP | php/plain/public/pades-signature-rest/index.php, pelo Util::getSecurityContextId() | "trustLacunaTestRoot" => true em php/plain/config.php (true por padrão) |
| Java | java/springmvc/.../controller/PadesSignatureRestController.java, pelo Util.getSecurityContext() | trustLacunaTestRoot em application.yml (false) e application-dev.yml (true) |
| .NET | dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/PadesSignatureRestController.cs, pelo Util.GetSecurityContextId() | Build de debug: StandardSecurityContexts.LacunaTest sob #if DEBUG, PkiBrazil nos demais |
| Node.js | trustLacunaTestRoot em nodejs/expressmvc/config/*.js | |
| Python | TRUST_LACUNA_TEST_ROOT em python/flask/sample/config.py e python/django/sample/config.py |
O exemplo em .NET avisa que uma instalação on-premises do Rest PKI pode não ter esse contexto de segurança; se a sua não tiver, entre em contato com o suporte ao desenvolvedor.
A partir daí, os certificados da nossa ICP de testes passam a ser aceitos.
Rest PKI Core
Toda instância do Rest PKI Core tem o contexto de segurança padrão Lacuna Test PKI (for development purposes only!), com o mesmo ID, 803517ad-3bbc-4169-b085-60053a8f6dbf (StandardSecurityContexts.LacunaTest no cliente .NET). A instância o cria ao iniciar, então as instâncias on-premises também o têm. Ele confia na ICP-Brasil, no repositório de certificados confiáveis do Windows e na Lacuna Root Test v3.
Use-o de uma de duas formas:
- Por requisição: passe o ID como
SecurityContextIdao criar uma sessão de assinatura (CreateSignatureSessionRequest.SecurityContextId) ou preparar uma assinatura (PrepareSignatureOptions.SecurityContextId,securityContextIdnoPOST api/signature). - Para toda a organização: no dashboard, escolha-o em Configurações > Configurações gerais > Contexto de segurança padrão, o contexto de segurança usado quando a requisição não informa um. Só usuários com o papel Admin ou Manager na organização veem Configurações.
Quando a requisição não informa um contexto de segurança, o Rest PKI Core usa o padrão da organização, ou então a configuração General:DefaultSecurityContext da instância, cujo padrão é a ICP-Brasil (PKI Brazil). Por isso, por padrão, os certificados de teste não são aceitos.
Nos exemplos, o projeto em ASP.NET MVC passa StandardSecurityContexts.LacunaTest em builds de debug e PkiBrazil nos demais; o projeto em Java passa SecurityContext.lacunaTest só quando trustLacunaTestRoot é true no application.yml, que vem com false.
Não há sandbox público: os exemplos e o site de demonstração usam uma organização de avaliação no core.pki.rest, cuja chave de API a Lacuna troca todo mês. Pegue a chave atual no repositório de exemplos, em vez de copiá-la para o seu código.
TODO(docs): como um desenvolvedor obtém uma chave de avaliação própria para o core.pki.rest.
PKI SDK
O PKI SDK não tem contexto de segurança: as raízes em que ele confia vêm de um ITrustArbitrator. Para confiar na ICP de testes, adicione a Lacuna Root Test v3 como TrustedRoots a um LinkedTrustArbitrator, só em builds de debug. Os exemplos fazem isso no Util.GetTrustArbitrator():
var trustArbitrator = new LinkedTrustArbitrator(TrustArbitrators.PkiBrazil, TrustArbitrators.Windows);
#if DEBUG
// For development purposes, we also trust in Lacuna Software's test certificates.
// lacunaRootBytes: Lacuna Root Test v3 (the samples embed it in Base64)
var lacunaRoot = PKCertificate.Decode(lacunaRootBytes);
trustArbitrator.Add(new TrustedRoots(lacunaRoot));
#endif
Depois, use esse árbitro onde uma validação ou uma política de assinatura precisar de um:
-
PAdES: passe-o para a política, por exemplo
PadesPoliciesForGeneration.GetPadesBasic(trustArbitrator)ePadesPoliciesForValidation.GetPadesBasic(trustArbitrator). -
Políticas da ICP-Brasil vêm com o próprio árbitro de confiança, que confia só nas raízes da ICP-Brasil, então recusam um certificado de teste mesmo que o resto da sua aplicação use o seu árbitro. Substitua-o, só em builds de debug:
- CAdES, como
CadesPoliciesForGeneration.GetPkiBrazilAdrBasica():policy.ClearTrustArbitrator()e depoispolicy.AddTrustArbitrator(trustArbitrator). - XML, como
BrazilXmlPolicySpec.GetNFePadraoNacional():policy.ClearTrustArbitrators()e depoispolicy.AddTrustArbitrator(trustArbitrator).
- CAdES, como
Veja Validando certificados para TrustedRoots e LinkedTrustArbitrator.
PKI Express
Ligue trustLacunaTestRoot no operador (trust_lacuna_test_root em Python e Ruby). Veja "Confiando em certificados que não sejam da ICP-Brasil" para Node.js, Java, PHP, Python e Ruby, e Quais certificados são confiáveis.
Signer
- Por padrão, uma instância do Signer aceita só certificados ICP-Brasil. Uma instância on-premises só aceita a ICP de testes da Lacuna depois que você adiciona a Lacuna Root Test v3 à seção
TrustArbitratordela e, quando os tipos de assinatura estão habilitados, aSignatureTypes:Simple:TrustArbitratoreSignatureTypes:Qualified:TrustArbitrator. As assinaturas avançadas usam o TrustArbitrator do contexto de segurança delas, que o administrador da instância define na área de administração. Veja TrustArbitrator. - O cenário de assinatura pública dos exemplos do Signer (.NET e Node.js) assina no sandbox do Signer,
https://signer-lac.azurewebsites.net, onde os clientes desenvolvem e testam as integrações (para ter uma organização e uma chave de API nele, entre em contato com o suporte), com um certificado de teste da Lacuna emitido pela Lacuna CA Test v7 para o CPF 56072386105: o arquivonodejs/samples/56072386105.pfx, senha1234. Oidentifierdo participante precisa ser igual ao CPF do certificado. - Para assinar em nuvem pelo widget de assinatura embutida, o exemplo online usa um certificado de teste do BirdID (CPF 026.102.470-10) no ambiente de testes do BirdID, pareado lendo um QR code no aplicativo BirdID. Veja Assinatura embutida.
TODO(docs): se o sandbox confia na ICP de testes da Lacuna (os exemplos indicam que sim, mas nenhuma página registra uma execução bem-sucedida) e quais certificados de teste o Dropsigner (www.dropsigner.com) aceita.
TrustBridge
- Um Servidor TrustBridge só confia na ICP de testes da Lacuna com
Certificates:Validation:UseLacunaTestPkidefinida comotrue(padrãofalse); uma estação de trabalho faz o mesmo pela própria configuração de mesmo nome. Somente para desenvolvimento: com ela ligada, o Servidor registraCriticalna inicialização e mostra um banner de aviso em todas as páginas administrativas. Veja As fontes de âncoras no Servidor e na estação de trabalho, e Certificados e credenciais de teste na referência rápida do TrustBridge.
TODO(docs): se cadastrar a Lacuna Root Test v3 na tela Autoridades Certificadoras Confiáveis do TrustBridge funciona em vez de UseLacunaTestPki.