Pular para o conteúdo principal

Códigos de retorno do PKI Express

As operações do PKI Express apresentam um conjunto de códigos de retorno que podem ser vistos a seguir, bem como o significado de cada código.

Códigos de retornoSignificado
00 - OkSucesso na execução da operação
01 - BadSyntaxParâmetros passados não seguem o formato esperado
02 - UnknownErrorErro desconhecido
03 - FileNotFoundArquivo não encontrado
04 - BadCertificateFalha na decodificação do certificado
05 - BadThumbprintThumbprint inválido
06 - BadHashTo Sign Hash inválido ou algoritmo de hash não reconhecido
07 - BadDataTo Sign Data inválido
08 - BadSignatureAssinatura inválida
09 - BadAlgorithmAlgoritmo inválido
10 - BadPolicyPolítica inválida
11 - BadVisualRepFalha no parser do arquivo de representação visual
12 - UndefinedFileReferenceReferência indefinida a arquivo
13 - CertNotFoundCertificado não encontrado
14 - ValidationFailedFalha na validação
15 - IOErrorErro na leitura de arquivos
16 - NoCertsWithKeyArquivo PFX não contém certificado com chave privada
17 - NotActivatedPKI Express não ativado
18 - ActivationErrorFalha na ativação do PKI Express
19 - BadLicenseBase-64 inválida (da licença de ativação)
20 - LicenseNeededNenhum arquivo de licença fornecido
21 - InvalidLicenseLicença inválida
22 - AccessDeniedFalta permissão para modificar a configuração do PKI Express
23 - CertThumbNeededNenhum thumbprint fornecido
24 - BadPdfChangesFalha na execução das alterações no PDF
25 - UpdateNeededOperação necessita de versão mais recente do PKI Express
26 - DataFileNeededNenhum Data File fornecido
27 - NoEncapsulatedContentConteúdo encapsulado faltando
28 - NonceNotFoundNonce não encontrado
29 - DirectoryNotFoundDiretório não encontrado
30 - TimestampAuthorityNotAvailableFalha na requisição do carimbo de tempo
31 - PolicyRequiresNetworkPolítica escolhida precisa de acesso a internet (modo offline não suportado)
32 - TimestampOptionsRequiredNenhum endereço URL de autoridade carimbadora fornecido
33 - CultureNotFoundCultura não encontrada
34 - TimeZoneNotFoundFuso horário não encontrado
35 - InvalidUtcOffsetFormato inválido (de Offset UTC)
36 - KeySizeNotSupportedTamanho de chave não suportado
37 - BadKeyFormatFormato não reconhecido (de chave)
38 - BadKeyChave inválida
39 - InvalidTimeoutValueValor de timeout inválido
40 - CertificateMismatchCertificado não corresponde a chave armazenada
41 - KeyNotFoundChave não encontrada
42 - NoCertificateFileNenhum certificado fornecido
43 - BadCertificationLevelNível de certificação inválido

Códigos de retorno nas bibliotecas cliente​

As bibliotecas cliente executam o PKI Express a cada operação e transformam qualquer código de retorno diferente de 00 - Ok num erro. A forma de ler o código depende da linguagem:

LinguagemUma operação que falha lançaComo ler o código de retorno
JavaRuntimeException, cuja mensagem traz a saída do PKI ExpressA exceção não traz o código
Node.jsA promise é rejeitada com ValidationError para 14 - ValidationFailed ou, nos demais casos, com um erro chamado CommandErrorerr.code; compare-o com os ErrorCodes exportados, como ErrorCodes.VALIDATION_FAILED
PHPCommandException, com a mensagem "The command failed with code N: saída"$e->returnCode
PythonException, com a mensagem "PKI Express returned non-success code N: saída"Apenas na mensagem
RubyPkiExpress::CommandError, cuja mensagem traz a saída do PKI Expresse.code é o Process::Status do processo do PKI Express: leia o número com e.code.exitstatus

Quando a biblioteca não encontra o PKI Express, ela lança InstallationNotFoundException (Java, PHP) ou InstallationNotFoundError (Node.js, Python, Ruby); veja configurações da biblioteca cliente. Quando uma operação exige uma versão do PKI Express mais nova que a instalada, o código é 01 - BadSyntax; as bibliotecas de Java, Node.js, PHP e Python terminam então a mensagem com uma dica que informa a versão necessária (no PHP, a exceção passa a ser uma Exception simples). Em Node.js e Ruby, ValidationError e InstallationNotFoundError são subclasses de CommandError; assim, em Ruby um único rescue trata todas elas, e nelas o code é um número:

begin
signer.sign
rescue PkiExpress::CommandError => e
code = e.code.respond_to?(:exitstatus) ? e.code.exitstatus : e.code
# code 14 (ValidationFailed): e.message has the validation results
end

Em PHP, trate a CommandException (namespace Lacuna\PkiExpress) e leia o código na propriedade pública returnCode; trate a InstallationNotFoundException à parte e, por último, a Exception simples, da qual as duas classes de exceção herdam:

use Lacuna\PkiExpress\CommandException;
use Lacuna\PkiExpress\InstallationNotFoundException;

try {
$signer->sign();
} catch (CommandException $e) {
switch ($e->returnCode) {
case 32: // TimestampOptionsRequired: set $signer->timestampAuthority
break;
case 14: // ValidationFailed: $e->getMessage() has the validation results
break;
default: // $e->getMessage(): "The command failed with code N: <PKI Express output>"
throw $e;
}
} catch (InstallationNotFoundException $e) {
// PKI Express was not found: see the client library settings
} catch (Exception $e) {
// Other errors, such as the tip asking for a newer PKI Express
}

A CommandException também tem uma propriedade pública cmd, com a linha de comando completa que a biblioteca executou. Ela inclui os argumentos, como a senha de um arquivo PKCS #12 ou uma chave; por isso, não a grave em logs.

Erros de validação​

Erros de validação ocorrem durante assinaturas, autenticações ou inspeções com validação.

Erros de ValidaçãoSignificado
SuccessValidação bem sucedida
CertificateNotYetValidNa data de referência, o certificado ainda não é válido
CertificateExpiredNa data de referência, o certificado está expirado
CertificateRevokedNa data de referência, o certificado estava revogado
CertificateIssuerNotFoundEmissor do certificado não foi encontrado
CertificateRevocationStatusUnknownEstado de revogação do certificado não pode ser verificado. Provavelmente, o PKI Express não conseguiu acessar os certificados CRLs (veja LAPP)
CertificateChainRootNotTrustedA raiz da cadeia de certificado não é confiável
InvalidCertificateSignatureAssinatura não é válida, baseado na chave pública fornecida para o certificado
DecodeErrorNão foi possível decodificar parte do objeto sendo validado
RequiredSignedAttributeMissingAssinatura não contém todos os atributos assinados que são requeridos
ForbiddenSignedAttributePresentAssinatura contém um ou mais atributos assinados que são proibidos
RequiredUnsignedAttributeMissingAssinatura não contém todos os atributos não assinados que são requeridos
ForbiddenUnsignedAttributePresentAssinatura contém um ou mais atributos não assinados que são proibidos
ContentTypeMismatchAtributo content-type especifica um tipo de conteúdo diferente do CMS
MessageDigestMismatchAtributo message digest especifica um digest diferente do digest do dado assinado
SigningCertificateDigestMismatchAtributo signing certificate especifica um digest diferente do digest do certificado do assinante
SignatureAlgorithmValidationFailedValidação do algoritmo da assinatura falhou
RevocationDataIssuedBeforeGracePeriodDados de revogação emitidos antes do fim do período de carência
UncertifiedDateReferenceA referência de tempo utilizada na validação da assinatura não é certificada
SignaturePolicyMismatchNa validação a política de assinatura difere da política fornecida
SigningTimeOutOfCertificateValidityAssinatura realizada fora do período de validade do certificado
UnknownSignedAttributesPresentAssinatura contém um ou mais atributos assinados não reconhecidos
UnknownUnsignedAttributesPresentAssinatura contém um ou mais atributos não assinados não reconhecidos
TimestampWithMoreThanOneSignerCarimbo de tempo contém mais de um assinante
TimestampMessageImprintMismatchMessage-imprint do timestamp não é igual a computada
CompleteReferencesMismatchReferências completas de certificados não são válidas
InvalidSignatureTimestampCarimbo de tempo da assinatura não é válido
InvalidReferencesTimestampCarimbo de tempo de referenência não é válido
InvalidSigAndRefsTimestampCarimbo de tempo da assinatura e de referência são inválidos
InvalidArchiveTimestampCarimbo de tempo do arquivo não é válido
InvalidKeyUsageCertificado assinante não tem permissão para realizar esse tipo de operação
InvalidOcspResponseResposta OCSP não é válida
UnauthorizedIssuerEmissor do certificado não é uma AC
UnknownRootTrustStatusEstado de confiança da raiz não conhecido
InvalidTslTSL não é válido
InvalidCrlCertificado LCR não é válido
CertificateIssuerValidEmissor do certificado é confiável
CertificateIssuerInvalidEmissor do certificado não é confiável
CertificateValidationFailedValidação do certificado falhou
SignatureVulnerableToSignerSubstitutionAssinatura é vulnerável a ataques de substituição de signatário
InvalidXmlSignatureSchemaValidação do schema da assinatura (XSD)falhou
XmlDSigCoreValidationFailedValidação primária (core validation) da assinatura falhou (o digest ou assinatura estão incorretos)
SignatureTimestampIgnoredUm carimbo de tempo de assinatura foi ignorado
InvalidCertificationPathLenCaminho de certificação das ACs é inválido
SigningCertificateNotFoundCertificado do signatário não foi encontrado
UnauthorizedACIssuerEmissor do certificado é uma AC, portanto não pode ser usado como emissor de certificados de atributo
AlgorithmNotAllowedAlgoritmo não é permitido
UnacceptableSignaturePolicyPolítica de assinatura não permitida
TslNotAvailableTSL não disponível
Ver em Markdown