Pular para o conteúdo principal

API do GeCert

A API REST do GeCert é a mesma que a aplicação web e o Gecert Connect usam. A descrição completa das rotas e dos modelos está no Swagger da sua instância, em https://endereco-do-seu-gecert/swagger.

Autenticação​

As requisições levam o header Authorization: Bearer SEU_TOKEN, com um token de acesso emitido pelo GrantID da instância para a API do GeCert (a configuração Oidc:ApiName do servidor). É o mesmo token que a aplicação web obtém ao entrar e que o Gecert Connect obtém no login. As rotas da área da organização operam na organização a que o usuário pertence, como a aplicação web.

Só as rotas de configuração do aplicativo são anônimas:

RotaResposta
GET /api/app-configuration{"hidePoweredBy": false}
GET /api/app-configuration/gecert-connectA versão mínima do Gecert Connect e se o servidor está em manutenção: {"minSupportedVersion": "1.1.0.0", "underMaintenance": false}
GET /api/app-configuration/gecert-connect/serverO endereço do servidor e os dados do GrantID para o Gecert Connect: serverUrl, grantIdAuthority, grantIdClientAppId, grantIdApiName, grantIdRedirectUri. Erro GecertConnectServerNotConfigured se a seção GecertConnect não estiver preenchida
GET /api/system/infoO nome e a versão do produto: {"productName":"Gecert","productVersion":"1.x.x"}

Rotas​

As listas (.../list) são paginadas e aceitam os parâmetros q (busca), offset, limit e order. A permissão de cada rota é verificada na organização do recurso; na área Sys Admin, na raiz.

Chaves​

RotaO que fazPermissão
GET /api/keys/listLista as chaves da organizaçãoViewKeys
GET /api/keys/available/listLista as chaves que ainda não têm certificadoViewKeys
GET /api/keys/{id}/summaryResumo da chave: nome, organização, certificado e tipo do repositórioViewKeys
GET /api/keys/{id}/detailsDetalhes: tipo, tamanho e tipo do repositório. Responde com a falha CannotRetrieveKeyFromKeyStore quando a chave não é encontrada no repositórioViewKeys
GET /api/keys/{id}/csrA CSR guardada para a chave, em PEM, com o nome do titular e o algoritmo de hashViewKeys
POST /api/keys/{id}/custom-csrEmite uma nova CSR para a chave. Corpo: {"params": "CN=...,O=...", "hashAlgorithm": "SHA256"}ManageKeys
GET /api/keys/{id}/parametersOs parâmetros da chave no repositório, em JSON. Erro KeyStoreParametersNotAccessible se o repositório não permite registro de chavesViewKeys
GET /api/keys/{id}/parameters/accessibleSe os parâmetros podem ser lidos (true ou false)ViewKeys
GET /api/keys/{id}/eventsEventos da chave, paginadosViewKeys
PUT /api/keysRegistra uma chave que já existe no repositório. Corpo: {"parameters": {"keyStore": "...", "keyName": "...", "keyStoreParameters": {...}}} (veja abaixo)ManageKeys
PUT /api/keys/{id}Renomeia a chave. Corpo: {"name": "..."}ManageKeys
DELETE /api/keys/{id}Exclui a chave (e a apaga do repositório quando a exclusão definitiva está configurada). Erro GecertKeyHasActiveCertificate se ela tem certificadoManageKeys

Certificados​

RotaO que fazPermissão
GET /api/certificates/listLista os certificados da organização, com o número de usuários autorizadosViewCertificates
GET /api/certificates/{id}Detalhes: titular, emissor, tipo, e-mail, validade, thumbprint SHA-1 e o ID da chaveViewCertificates
GET /api/certificates/{id}/eventsEventos do certificado, paginadosViewCertificates
GET /api/certificates/{id}/usageUsos da chave do certificado, paginadosViewCertificates
GET /api/certificates/{id}/authorized-usersOs usuários com acesso ao certificado, paginadosViewCertificateAccess
GET /api/certificates/{id}/public-bytesO certificado codificado (DER), em Base64Acesso ao certificado (UseKey)
GET /api/certificates/myOs certificados a que o usuário autenticado tem acessoUsuário autenticado
POST /api/certificatesAdiciona um certificado a partir de um PKCS #12 enviado antes como upload. Corpo: {"blobId": "...", "keyStoreName": "...", "password": "..."}. Falhas: CertificatePasswordIsIncorrect, CertificateAlreadyExistsOnSubscription, CertificateIsExpectedToHaveRsaKeysManageCertificates
PUT /api/certificatesRegistra um certificado (.cer) para uma chave existente. Corpo: {"blobId": "...", "keyId": "..."}. Falhas: CertificateIsNotExpectedToHavePassword, CertificateAlreadyExistsOnSubscription, KeysAreNotEquivalentManageCertificates
DELETE /api/certificates/{id}Exclui o certificado, os acessos a ele e a chaveManageCertificates

As respostas de POST e PUT /api/certificates seguem o formato {"success": true, "id": "..."} ou {"success": false, "failure": "CertificatePasswordIsIncorrect", "failureType": "NewCertificateResponseFailures"}.

Acessos a certificados​

RotaO que fazPermissão
GET /api/certificate-accessLista os acessos da organização, paginadosViewCertificateAccess
POST /api/certificate-accessConcede acesso. Corpo: {"certificateId": "...", "userId": "..."}. Falhas: CertificateAccessAlreadyExists, UserNeedsSubscriptionAccess, UserHasAccessToThisCertificateInAnotherSubscriptionManageCertificateAccess
DELETE /api/certificate-access/{id}Remove um acessoManageCertificateAccess
DELETE /api/certificate-access/certificates/{certificateId}Remove todos os acessos de um certificadoManageCertificateAccess
DELETE /api/certificate-access/users/{userId}Remove todos os acessos de um usuário na organizaçãoManageCertificateAccess
POST /api/certificate-access/certificates/{de}/to/{para}Copia todos os acessos de um certificado para outro. A resposta traz uma lista com o resultado de cada usuárioManageCertificateAccess nos dois certificados
GET /api/users/{userId}/authorized-certificatesOs certificados a que um usuário tem acessoViewCertificateAccess
GET /api/users/{userId}/subscription-access/verificationSe o usuário tem acesso à organização (true ou false)ViewCertificateAccess

Repositórios de chaves​

RotaO que fazPermissão
GET /api/key-storesOs repositórios a que a organização tem acesso: nome, tipo, se é o padrão, se aceita registro e inserção de chaves, exclusão definitiva, tamanhos de chave e padrão do nomeManageKeys
GET /api/key-stores/{type}/exampleUm exemplo dos parâmetros de registro para o tipo (Kryptus, AzureKeyVault ou Pkcs11)ManageKeys
GET /api/key-stores/listTodos os repositórios configurados na instância, paginadosRead na raiz (Sys Admin)
GET /api/key-stores/details?name=...Os detalhes de um repositório, conforme o tipo: no Azure Key Vault, o endpoint, o ID do aplicativo e se usa HSM; no Kryptus, o host, a porta e os usuários; no PKCS #11, o módulo e o número de série do tokenRead na raiz (Sys Admin)
GET /api/subscriptions/my/key-storesOs acessos a repositórios da organizaçãoManageKeys
GET /api/subscriptions/{id}/key-storesOs acessos a repositórios de uma organização, paginadosViewKeyStoreAccess na raiz
POST /api/key-store-accessConcede a uma organização acesso a um repositório. Corpo: {"subscriptionId": "...", "keyStoreName": "..."}. Falha: KeyStoreAccessAlreadyExistsManageKeyStoreAccess na raiz
DELETE /api/key-store-access/{id}Remove o acesso. As chaves que já estão no repositório continuam funcionandoManageKeyStoreAccess na raiz

Usos de chaves​

RotaO que fazPermissão
GET /api/key-usages/listOs usos das chaves da organização, paginados: data, certificado, usuário, operação (Encrypt, Decrypt, Sign ou Verify), algoritmo, hash, valor e, nas verificações, se a assinatura era válidaViewCertificates

Relatórios​

RotaO que fazPermissão
POST /api/reports/certificates/expiration-dateGera o relatório de expiração dos certificados da organização (nome, e-mail e data de expiração). Corpo: {"fileType": "Xlsx"}, "Csv" ou "Pdf"ManageCertificates
POST /api/reports/certificates/{id}/eventsGera o relatório dos eventos de um certificado (data, entidade, operação, detalhes, agente e organização)ManageCertificates
GET /api/reports/{id}?fileType=...Baixa o relatório geradoTicket de acesso devolvido na geração

A geração responde com {"success": true, "ticket": {"location": "..."}}, e location é o endereço para baixar o arquivo; ou com a falha EmptyReport, quando não há nada a incluir.

API usada pelo Gecert Connect​

Estas rotas, também em /api/keys, são as que o Gecert Connect chama em nome do Lacuna Key Storage Provider. Elas só enxergam as chaves dos certificados a que o usuário autenticado tem acesso, e cada operação com a chave privada exige a permissão UseKey e fica registrada nos usos de chaves.

RotaO que faz
GET /api/keysAs chaves do usuário: [{"id": "...", "attributes": {"enabled": true}}]
GET /api/keys/{id}A chave pública: {"id": "...", "keyType": "RSA", "keyOperations": ["Encrypt", "Decrypt", "Sign", "Verify", "WrapKey", "UnwrapKey"], "rsaModulus": "...", "rsaPublicExponent": "...", "managed": true}, com o módulo e o expoente em Base64
POST /api/keysCria uma chave RSA na organização atual. Corpo: {"keyName": "...", "keyStore": "...", "keySize": 2048, "keyType": "RSA"}. Exige ManageKeys
POST /api/keys/{id}/signatureAssina um hash. Corpo: {"algorithm": "RS256", "value": "HASH_EM_BASE64"}; algorithm pode ser RS256 (padrão) ou RS512. Resposta: a assinatura, em Base64
POST /api/keys/{id}/decryptionDecripta. Corpo: {"algorithm": "RSA1_5", "value": "DADO_EM_BASE64"}; RSA1_5 (PKCS #1 v1.5) é o único padding e o padrão. Resposta: o dado decriptado, em Base64
POST /api/keys/{id}/encryptionEncripta com a chave pública do certificado. Mesmo corpo e resposta
POST /api/keys/{id}/signature-verificationVerifica uma assinatura com a chave pública. Corpo: {"algorithm": "RS256", "value": "ASSINATURA_EM_BASE64", "digest": "HASH_EM_BASE64"}. Resposta: true ou false
GET /api/keys/stopwatch-info, GET /api/keys/{id}/stopwatch-infoAs mesmas respostas de GET /api/keys e GET /api/keys/{id}, com os tempos gastos em cada etapa (banco de dados, conexão ao repositório, leitura dos parâmetros), usados por Checar conexão com o servidor

Um algoritmo diferente dos aceitos responde com o erro OperationAlgorithmNotSupported.

Parâmetros de registro de chaves​

Para registrar uma chave que já existe no repositório (PUT /api/keys ou Registrar chave existente), informe os parâmetros que a identificam, conforme o tipo do repositório. O campo type é obrigatório, e GET /api/key-stores/{type}/example devolve um modelo. O GeCert testa os parâmetros antes de salvar: lê a chave pública e assina uma CSR com a chave; se falhar, responde com KeyStoreParametersFailedValidation.

RepositórioParâmetros
HSM Kryptus{"type": "Kryptus", "publicKeyUniqueIdentifier": "...", "privateKeyUniqueIdentifier": "..."}: os identificadores únicos KMIP da chave pública e da chave privada
Azure Key Vault{"type": "AzureKeyVault", "keyName": "..."} ou {"type": "AzureKeyVault", "kid": "https://.../keys/nome/versao"}, com os opcionais kty (RSA, RSA-HSM, EC ou EC-HSM) e curveName
Dispositivo PKCS #11{"type": "Pkcs11", "id": "...", "label": "..."}: o ID da chave (em Base64; na aplicação web, também em hexadecimal) ou o label dela. Pelo menos um dos dois

O repositório no banco de dados não aceita registro de chaves, e todo repositório pode ter o registro desabilitado na configuração (KeyRegistrationDisabled): nesse caso, o erro é KeyStoreDoesNotSupportKeyRegistration.

Códigos de erro​

Os erros têm o formato {"code": "...", "message": "..."}, com o código HTTP correspondente. Além dos códigos comuns da plataforma (SubscriptionNotFound, UserNotFound, UploadNotFound, RoleMissing e outros), o GeCert define:

CódigoQuando acontece
CertificateNotFound, GecertKeyNotFound, CertificateAccessNotFound, KeyStoreAccessNotFoundO recurso não existe ou não é da organização
SubscriptionMismatchA chave informada é de outra organização
BadKeyStoreO repositório informado não está configurado na instância
BadKeyStoreParametersOs parâmetros de registro não puderam ser lidos
KeyStoreParametersFailedValidationA chave não pôde ser usada com os parâmetros informados
KeyParametersIncompatibleWithCertificateA chave não corresponde ao certificado
KeyStoreDoesNotSupportKeyRegistrationO repositório não aceita registro de chaves existentes
KeyStoreDoesNotSupportKeyInsertionO repositório não aceita a geração nem a importação de chaves (KeyInsertionDisabled)
KeyStoreParametersNotAccessibleOs parâmetros da chave não podem ser exibidos neste repositório
PinProtectionNotSupportedO repositório não suporta partições
GecertKeyHasActiveCertificateA chave não pode ser excluída porque tem um certificado
OperationAlgorithmNotSupportedO algoritmo da operação não é RS256, RS512 nem RSA1_5
GecertConnectServerNotConfiguredA seção GecertConnect do servidor não está preenchida

Veja também​

Ver em Markdown