---
title: "Referência rápida do PKI Express"
description: "O PKI Express em uma página: instale os binários e o pacote cliente, ative a licença, configure, assine, valide, aplique carimbo de tempo e trate erros."
canonical: "https://docs.lacunasoftware.com/articles/pki-express/quick-reference"
locale: "pt-BR"
product: "PKI Express"
last_updated: "2026-10-12"
---

# Referência rápida do PKI Express

O essencial do PKI Express em uma página, com links para as páginas completas.

## Para que serve

O PKI Express cria assinaturas digitais CMS/CAdES, PDF/PAdES e XmlDSig/XAdES a partir de praticamente qualquer linguagem de programação, nos seus próprios servidores Windows ou Linux. 
Você o instala no servidor e o aciona por uma biblioteca cliente para Java, Node.js, PHP, Python ou Ruby; para assinar com o certificado do usuário numa página web, ele trabalha junto com o Web PKI. 

| Alternativa | Quando é a melhor escolha |
|---|---|
| [PKI SDK](https://docs.lacunasoftware.com/articles/pki-sdk/quick-reference) | Sua aplicação é .NET: o PKI SDK é uma biblioteca para aplicações .NET, e o guia de certificação digital o recomenda para assinaturas no servidor em .NET  |
| [Rest PKI Core](https://docs.lacunasoftware.com/articles/rest-pki/core/quick-reference) | Você prefere chamar uma API REST a instalar software nos seus servidores: use-o como serviço em core.pki.rest ou numa instância própria; ele também hospeda a página em que o usuário assina  |
| [Web PKI](https://docs.lacunasoftware.com/articles/web-pki/quick-reference) | Você precisa da parte do navegador: listar os certificados do usuário e assinar com eles numa página web. Ele complementa o PKI Express, em vez de substituí-lo  |
| [Signer](https://docs.lacunasoftware.com/articles/signer/quick-reference) | Você quer enviar documentos para pessoas e colher as assinaturas delas com um fluxo pronto, como SaaS ou on-premises, em vez de construir o fluxo  |

## Instalação

Duas partes: o próprio PKI Express, em cada servidor que executa a sua aplicação, e o pacote cliente da sua linguagem. 

| Linguagem | Pacote | Major atual | Registro |
|---|---|---|---|
| PKI Express, Windows Server 2008 R2+ / Windows 7+ (requer o .NET Framework 4.6.1) | Instalador `pkie-1.38.0-x64.msi`; pacotes x86 e zip na [página de instalação](https://docs.lacunasoftware.com/articles/pki-express/setup/windows) | 1 (1.38.0) | [cdn.lacunasoftware.com](https://cdn.lacunasoftware.com/pki-express/windows/pkie-1.38.0-x64.msi)  |
| PKI Express, Linux (Ubuntu/Mint, RHEL, CentOS/Oracle Linux/Fedora) | `pkie-1.38.0.tar.gz` ([instalação](https://docs.lacunasoftware.com/articles/pki-express/setup)) | 1 (1.38.0) | [cdn.lacunasoftware.com](https://cdn.lacunasoftware.com/pki-express/linux/pkie-1.38.0.tar.gz)  |
| Java | `com.lacunasoftware.pkiexpress:pki-express` | 1 (1.23.1) | [Maven Central](https://search.maven.org/artifact/com.lacunasoftware.pkiexpress/pki-express)  |
| Node.js | `pki-express` | 1 (1.16.2) | [npm](https://www.npmjs.com/package/pki-express)  |
| PHP 5.5+ | `lacuna/pki-express` | 1 (1.17.0) | [Packagist](https://packagist.org/packages/lacuna/pki-express)  |
| Python | `pkiexpress` | 1 (1.10.4) | [PyPI](https://pypi.org/project/pkiexpress)  |
| Ruby | `pki_express` | 1 (1.3.2) | [RubyGems](https://rubygems.org/gems/pki_express)  |

No Linux, extraia o pacote em `/usr/share/pkie`, crie um link para `/usr/share/pkie/pkie` em `/usr/local/bin`, configure a pasta de logs e execute `sudo pkie activate LacunaPkiLicense.config`; as páginas de [Ubuntu](https://docs.lacunasoftware.com/articles/pki-express/setup/linux-ubuntu), [RHEL](https://docs.lacunasoftware.com/articles/pki-express/setup/linux-rhel) e [CentOS](https://docs.lacunasoftware.com/articles/pki-express/setup/linux-centos) trazem os comandos. Para atualizar, execute o novo instalador (Windows) ou substitua o conteúdo de `/usr/share/pkie` pelo novo pacote (Linux). 

## Configuração e autenticação

**Licença, sem chave de API.** O PKI Express precisa de um arquivo de licença, `LacunaPkiLicense.config`; peça à Lacuna uma licença de testes gratuita. Ative-a uma vez em cada máquina: com `pkie activate` no Linux ([ativação manual](https://docs.lacunasoftware.com/articles/pki-express/setup/manual-activation) se a ativação pela rede falhar) e com o *PKI Express Configuration Manager* (`pkiemgr.exe`, na pasta de instalação) no Windows. A sua aplicação não lê a licença, e não há URL de serviço: a biblioteca cliente executa o PKI Express instalado na mesma máquina. 

As **configurações do servidor** são definidas com `pkie config --set name=value` (com privilégios de administrador); `pkie config --effective` mostra os valores em uso. 

| Configuração | Chaves | Página |
|---|---|---|
| Pasta e nível mínimo de log | `logDir`, `logLevel` | [Logs](https://docs.lacunasoftware.com/articles/pki-express/config/log) |
| Pasta temporária (cache de LCRs e de certificados de AC) | `tempDir` | [Pasta temporária](https://docs.lacunasoftware.com/articles/pki-express/config/temp-dir) |
| Proxy | `proxyHost`, `proxyPort`, `proxyUsername`, `proxyPassword` | [Proxy](https://docs.lacunasoftware.com/articles/pki-express/config/proxy) |
| LAPP, para obter LCRs e certificados de AC por meio de `*.lacunasoftware.com` (o suporte também precisa autorizar o acesso) | `lappEnabled` | [LAPP](https://docs.lacunasoftware.com/articles/pki-express/config/lapp) |
| Chaves no Azure Key Vault | `azureAppId`, `azureAppSecret`, `azureKeyVaultEndpoint` | [Azure](https://docs.lacunasoftware.com/articles/pki-express/config/azure) |
| Certificados em nuvem (BirdID, NeoID, RemoteID, SafeID, VIDaaS e outros) | `trustServices:<service>:clientId`, `trustServices:<service>:clientSecret`, `trustServices:<service>:endpoint` | [Certificados em nuvem](https://docs.lacunasoftware.com/articles/pki-express/config/trust-services)  |
| Chaves em tokens e HSMs PKCS#11 | `pkcs11LibraryPath` | [Histórico de versões, 1.38.0](https://docs.lacunasoftware.com/articles/pki-express/changelog#v1-38-0) |

TODO(docs): o `pkcs11LibraryPath` (PKI Express 1.38.0) não tem página de configuração; só o histórico de versões o cita, e nem as bibliotecas cliente nem um texto de ajuda publicado o descrevem.

**No seu código**, toda classe de operação herda de `PkiExpressOperator`, cujas configurações os exemplos aplicam num único helper, `Util.setPkiDefaults()`, chamado por todos os blocos abaixo: 

- em que confiar: por padrão, só em certificados ICP-Brasil; adicione raízes com `addTrustedRootSync()`, ou a raiz de teste da Lacuna com `trustLacunaTestRoot` ([confiando em certificados que não sejam da ICP-Brasil](https://docs.lacunasoftware.com/articles/pki-express/nodejs/trusting-in-custom-certificates)); 
- `timestampAuthority`, um `TimestampAuthority` para as políticas que exigem carimbo de tempo: os exemplos usam o do REST PKI, `https://pki.rest/tsp/a402df41-8559-47b2-a05c-be555bf66310`, com um token de acesso do REST PKI (`setOAuthTokenAuthentication()`); usuário e senha, e SSL mútuo, também funcionam ([autoridade de carimbo de tempo](https://docs.lacunasoftware.com/articles/pki-express/php/configuring-timestamp-authority)); 
- `offline`, para executar sem acesso à rede. 

Cada classe também aceita um `PkiExpressConfig` opcional (pasta do PKI Express, pasta temporária, pasta dos arquivos de transfer data): sem ele, as bibliotecas procuram o PKI Express nas pastas de instalação padrão do Windows e executam o `pkie` do `PATH` no Linux. No Linux, só a biblioteca de Java consegue executar o PKI Express 1.31.0 ou posterior a partir de uma pasta personalizada; veja [configurações da biblioteca cliente](https://docs.lacunasoftware.com/articles/pki-express/config#configurações-da-biblioteca-cliente). 

## Operações principais

Os blocos são trechos dos exemplos em Node.js (`nodejs/expressmvc/routes/` no PkiSuiteSamples), a linguagem com mais exemplos do PKI Express. Os nomes das políticas vêm de `StandardSignaturePolicies` e diferem dos do Rest PKI: veja a [tabela de equivalência](https://docs.lacunasoftware.com/articles/pki-express/nodejs/convert-from-restpki). 

TODO(docs): além do passo a passo em Java ([como funciona](https://docs.lacunasoftware.com/articles/pki-express/java/how-it-works)) e do mapa do projeto PHP ([exemplos em PHP](https://docs.lacunasoftware.com/articles/pki-express/php/plain)), nenhuma página documenta estas operações; o código abaixo vem dos exemplos.

### Assinar um PDF com o certificado do usuário
PAdES com a chave no computador do usuário, em duas etapas no servidor: `PadesSignatureStarter.start()` retorna o hash que o Web PKI assina no navegador (`signHash()`), e `SignatureFinisher.complete()` grava o PDF assinado. Passo a passo em Java: [como funciona](https://docs.lacunasoftware.com/articles/pki-express/java/how-it-works); aparência da assinatura: [representação visual](https://docs.lacunasoftware.com/articles/pki-express/nodejs/visual-rep). 

```js
// POST /start: certContent is the user's certificate, read by Web PKI
const signatureStarter = new PadesSignatureStarter();
Util.setPkiDefaults(signatureStarter);
signatureStarter.signaturePolicy = StandardSignaturePolicies.PADES_BASIC_WITH_LTV;
signatureStarter.setPdfToSignFromPathSync(StorageMock.getDataPath(fileId));
signatureStarter.setCertificateFromBase64Sync(certContent);
signatureStarter.start().then((response) => { /* toSignHash, digestAlgorithm, transferFile */ });

// POST /complete: signature is the result of Web PKI's signHash()
const signatureFinisher = new SignatureFinisher();
Util.setPkiDefaults(signatureFinisher);
signatureFinisher.setFileToSignFromPathSync(StorageMock.getDataPath(fileId));
signatureFinisher.setTransferFileFromPathSync(transferFile);
signatureFinisher.signature = signature;
signatureFinisher.outputFile = path.join(APP_ROOT, 'app-data', outputFile);
signatureFinisher.complete(true).then((result) => { /* signed PDF at outputFile */ });
```

### Assinar um PDF com uma chave no servidor
Uma etapa, sem navegador: `PadesSigner.sign()` assina com um arquivo PKCS #12 no servidor. 

```js
const signer = new PadesSigner();
Util.setPkiDefaults(signer);
signer.signaturePolicy = StandardSignaturePolicies.PADES_BASIC_WITH_LTV;
await signer.setPdfToSignFromPath(StorageMock.getDataPath(fileId));
await signer.setPkcs12FromPath(StorageMock.getSamplePkcs12Path());
signer.certPassword = '1234';
signer.outputFile = path.join(APP_ROOT, 'app-data', outputFile);
let signerCert = await signer.sign(true);
```

### Assinar um arquivo com CAdES
O `CadesSignatureStarter` segue o mesmo fluxo de início e conclusão, finalizado pelo `SignatureFinisher` (saída `.p7s`); se o arquivo já for um CMS, o PKI Express o coassina. 

```js
const signatureStarter = new CadesSignatureStarter();
Util.setPkiDefaults(signatureStarter);
signatureStarter.signaturePolicy = StandardSignaturePolicies.PKI_BRAZIL_CADES_ADR_BASICA;
signatureStarter.setFileToSignFromPathSync(StorageMock.getDataPath(fileId));
signatureStarter.setCertificateFromBase64Sync(certContent);
signatureStarter.start().then((response) => { /* same as the PDF flow */ });
```

### Assinar um documento XML
`XmlSigner.sign()` assina com uma chave no servidor; com o certificado do usuário, use `XmlSignatureStarter` e `SignatureFinisher`, como no fluxo do PDF. 

```js
const signer = new XmlSigner();
Util.setPkiDefaults(signer);
signer.signaturePolicy = StandardSignaturePolicies.XADES_BES;
await signer.setXmlToSignFromPath(StorageMock.getSampleDocPath(SampleDocs.SAMPLE_XML));
await signer.setPkcs12FromPath(StorageMock.getSamplePkcs12Path());
signer.certPassword = '1234';
signer.outputFile = path.join(APP_ROOT, 'app-data', outputFile);
let signerCert = await signer.sign(true);
```

### Validar um PDF assinado
`PadesSignatureExplorer.open()` retorna as assinaturas do arquivo e, com `validate = true`, as valida; o `CadesSignatureExplorer` faz o mesmo para CMS/CAdES. 

```js
const sigExplorer = new PadesSignatureExplorer();
Util.setPkiDefaults(sigExplorer);
sigExplorer.validate = true;
sigExplorer.setSignatureFileFromPathSync(filePath);
sigExplorer.signaturePolicy = StandardSignaturePolicies.PADES_BASIC;
sigExplorer.open().then((r) => res.render('open-pades-express', { signature: r }));
```

### Aplicar carimbo de tempo a um PDF
`PadesTimestamper.stamp()` aplica um carimbo de tempo a um PDF, usando a autoridade de carimbo de tempo do operador. 

```js
const stamper = new PadesTimestamper();
Util.setPkiDefaults(stamper);
stamper.setPdfFromPath(pdfPath).then(() => {
	stamper.setOutputFilePath(outputFilePath);
	stamper.stamp().then(() => { /* timestamped PDF at outputFilePath */ });
});
```

### Gerar uma versão para impressão
Depois de abrir as assinaturas com o `PadesSignatureExplorer`, `PdfMarker.apply()` aplica ao PDF textos e imagens montados com o `PdfHelper`, como os nomes dos signatários e um código de verificação. 

```js
const pdfMarker = new PdfMarker();
Util.setPkiDefaults(pdfMarker);
pdfMarker.setFileFromPathSync(pdfPath);
const pdf = new PdfHelper();
pdfMarker.marks.push(pdf.mark().onAllPages()
	.onContainer(pdf.container().width(1).anchorRight(1).height(1).anchorBottom(1))
	.addElement(pdf.imageElement().withOpacity(75).withImageContent(Util.getIcpBrasilLogoContent(), 'image/png')));
pdfMarker.outputFile = path.join(APP_ROOT, 'app-data', outputFile);
pdfMarker.apply();
```

### Autenticar com um certificado
`Authentication.start()` retorna um nonce e um algoritmo de digest para o Web PKI assinar; `complete()` verifica a assinatura e valida o certificado. 

```js
const auth = new Authentication();
Util.setPkiDefaults(auth);
auth.setNonce(nonce); // from auth.start(), signed in the browser by Web PKI
await auth.setCertificateFromBase64(certContent);
auth.setSignature(signature);
const result = await auth.complete();
if (result.validationResults.isValid()) { const userCert = result.certificate; }
```

## Erros

Toda operação do PKI Express termina com um código de retorno, `00 - Ok` ou um erro de `01` a `43`; assinaturas, autenticações e inspeções com validação também informam erros de validação, como `CertificateChainRootNotTrusted`. Lista completa: [códigos de retorno](https://docs.lacunasoftware.com/articles/pki-express/return-codes). 
Em Node.js, uma operação que falha rejeita a sua promise com um `CommandError` cujo `code` é o código de retorno (`ValidationError` para o código 14, `InstallationNotFoundError` quando o PKI Express não é encontrado); os exemplos o repassam para `next(err)`. O PHP lança `CommandException` (`$e->returnCode`), o Ruby `PkiExpress::CommandError` (`e.code.exitstatus`); Java e Python lançam uma exceção simples, com a saída na mensagem: veja [códigos de retorno nas bibliotecas cliente](https://docs.lacunasoftware.com/articles/pki-express/return-codes#códigos-de-retorno-nas-bibliotecas-cliente). 

| Erro | Significado | O que fazer |
|---|---|---|
| `17 - NotActivated` | O PKI Express não está ativado nesta máquina | Ative-o com a licença ([instalação](https://docs.lacunasoftware.com/articles/pki-express/setup))  |
| `14 - ValidationFailed` com `CertificateChainRootNotTrusted` | A raiz do certificado não é confiável; por padrão, só a ICP-Brasil é | Confie na raiz: `trustLacunaTestRoot` ou `addTrustedRootSync()` ([confiando em certificados que não sejam da ICP-Brasil](https://docs.lacunasoftware.com/articles/pki-express/nodejs/trusting-in-custom-certificates))  |
| `CertificateRevocationStatusUnknown` | O PKI Express não conseguiu acessar as LCRs do certificado | Configure o [proxy](https://docs.lacunasoftware.com/articles/pki-express/config/proxy) ou o [LAPP](https://docs.lacunasoftware.com/articles/pki-express/config/lapp)  |
| `32 - TimestampOptionsRequired` | Nenhuma autoridade de carimbo de tempo foi informada, e a política exige carimbo de tempo | Defina o `timestampAuthority` do operador ([autoridade de carimbo de tempo](https://docs.lacunasoftware.com/articles/pki-express/php/configuring-timestamp-authority))  |

## Certificados e credenciais de teste

- [Certificados de teste](https://docs.lacunasoftware.com/articles/pki-guide/test-certs): arquivos PKCS #12 da ICP de testes da Lacuna, senha `1234`; nunca confie nessa ICP em produção. 
- O PKI Express só os aceita depois que você confia na raiz de teste da Lacuna: `trustLacunaTestRoot` ([Node.js](https://docs.lacunasoftware.com/articles/pki-express/nodejs/trusting-in-custom-certificates), [Java](https://docs.lacunasoftware.com/articles/pki-express/java/trusting-in-custom-certificates), [PHP](https://docs.lacunasoftware.com/articles/pki-express/php/trusting-in-custom-certificates)) ou `trust_lacuna_test_root` ([Python](https://docs.lacunasoftware.com/articles/pki-express/python/trusting-in-custom-certificates), [Ruby](https://docs.lacunasoftware.com/articles/pki-express/ruby/trusting-in-custom-certificates)). 
- Licença: solicite uma [licença de testes gratuita](https://www.lacunasoftware.com/pt/home/purchase) e ative-a como em [Configuração e autenticação](https://docs.lacunasoftware.com/articles/pki-express/quick-reference#configuração-e-autenticação). 

## Experimente

Rode as demos ou comece por um exemplo na sua linguagem:

**Demonstrações e exemplos**

- Demonstração: [Sign a file with your certificate](https://try.lacunasoftware.com/pt/pki-suite/sign-a-file)
- Demonstração: [Sign a PDF with your cloud certificate](https://try.lacunasoftware.com/pt/pki-suite/sign-with-cloud-certificate)
- Demonstração: [Timestamp a PDF](https://try.lacunasoftware.com/pt/pki-suite/timestamp-a-pdf)
- Demonstração: [Validate a signed file](https://try.lacunasoftware.com/pt/pki-suite/validate-a-signed-file)
- Demonstração: [Make a printer-friendly version](https://try.lacunasoftware.com/pt/pki-suite/printer-friendly-version)
- Demonstração: [Your certificates in the browser](https://try.lacunasoftware.com/pt/web-pki/certificates-in-the-browser)
- Sign a PDF with PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PadesSignatureExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-signature-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-signature-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/pades_signature_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/pades_signature_express_controller.rb)
- Sign multiple PDFs with PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/BatchPadesSignatureExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/batch-pades-signature-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/batch-pades-signature-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/batch_pades_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/batch_pades_express_controller.rb)
- Sign a PDF with a server key using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PadesServerKeyExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-server-key-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-server-key-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/pades_server_key_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/pades_server_key_express_controller.rb)
- Sign a PDF with a cloud certificate (OAuth flow) using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PadesCloudOauthExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-cloud-oauth-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-cloud-oauth-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/pades_cloud_oauth_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/pades_cloud_oauth_express_controller.rb)
- Sign a PDF with a cloud certificate (password flow) using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PadesCloudPwdExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-cloud-pwd-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-cloud-pwd-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/pades_cloud_pwd_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/pades_cloud_pwd_express_controller.rb)
- Timestamp a PDF with PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/timestamp-pdf-express.js) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/timestamp_pdf_express.py)
- Sign a file with CAdES using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/CadesSignatureExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/cades-signature-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/cades-signature-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/cades_signature_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/cades_signature_express_controller.rb)
- Sign multiple files with CAdES using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/BatchCadesSignatureExpressControler.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/batch-cades-signature-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/batch-cades-signature-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/batch_cades_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/batch_cades_express_controller.rb)
- Sign a file with CAdES and a server key using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/cades-server-key-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/cades-server-key-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/cades_server_key_express.py)
- Sign a file with CAdES and a cloud certificate (OAuth flow) using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/CadesCloudOauthExpressController.java)
- Merge CMS/CAdES signatures using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/MergeCadesExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/merge-cades-express.js) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/merge_cades_express.py)
- Sign an XML document using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-signature-express.js)
- Sign an XML document with a server key using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-server-key-express.js)
- Sign an XML document with a cloud certificate (OAuth flow) using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-cloud-oauth-express.js)
- Sign a Brazilian NF-e using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-nfe-signature-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/xml-nfe-signature-express/index.php)
- Sign a COD XML using PKI Express: [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/xml-cod-signature-express/index.php)
- Validate a signed PDF using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/OpenPadesExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/open-pades-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-pades-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/open_pades_express.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/open_pades_express_controller.rb)
- Validate a CMS/CAdES signature using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/OpenCadesExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/open-cades-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-cades-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/open_cades_express.py)
- Validate a signed XML using PKI Express: [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-xml-express/index.php)
- Make a printer-friendly version of a signed PDF using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/printer-version-pades-express.js) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/printer_version_pades_express.py)
- Make a printer-friendly version of a CMS/CAdES signature using PKI Express: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/printer-version-cades-express.js)
- Authenticate with a digital certificate using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/AuthenticationExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/authentication-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/authentication-express/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/authentication_express.py)
- Authenticate with a cloud certificate (OAuth flow) using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/AuthenticationCloudExpressController.java)
- Sign a medical prescription (Receita Simples) using PKI Express: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/ReceitaSimplesExpressController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/receita-simples-express.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/receita-simples-express/index.php) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/receita_simples_express_controller.rb)
