Pular para o conteúdo principal

KMIP 1.4 server (MVP)

A partir da v4.5, o CipherVault expõe um servidor KMIP 1.4 (Key Management Interoperability Protocol) na porta 5696 TLS. Permite clientes legados que falam KMIP (Java KeyStore, IBM Spectrum Scale, Oracle TDE, VMware vCenter) usar o CipherVault como KMS sem código próprio.

Operations suportadas (MVP)

OperationImplementado
Create
Get
GetAttributes
Activate
Revoke
Destroy

Operations pendentes (roadmap): Register, Locate, Encrypt/Decrypt, Sign/Verify, MAC, RNG-Retrieve.

Configuração

Backend

CV_KMIP_ENABLED=true
CV_KMIP_PORT=5696
CV_KMIP_TLS_CERT=/etc/cv/kmip-cert.pem
CV_KMIP_TLS_KEY=/etc/cv/kmip-key.pem
CV_KMIP_CLIENT_CA=/etc/cv/clients-ca.pem # opcional, exige mTLS

Cert + key servidor são gerados pelo CV ou fornecidos pelo operador. Recomendado: usar PKI as a Service interna do CV para emitir.

Tabelas

kmip_objects -- chaves armazenadas
kmip_object_versions -- histórico
kmip_audit -- ops registradas (também em audit_logs)

Exemplo — cliente PyKMIP

from kmip.pie import client
from kmip.core.enums import ObjectType, CryptographicAlgorithm

with client.ProxyKmipClient(
hostname="cv.acme.com.br",
port=5696,
cert="/etc/cv/kmip-client.pem",
key="/etc/cv/kmip-client.key",
ca="/etc/cv/kmip-server-ca.pem",
config_file=None,
) as c:
# Criar chave AES-256
uid = c.create(
CryptographicAlgorithm.AES,
256,
name="billing-tde-key",
)

# Ativar
c.activate(uid)

# Buscar
key = c.get(uid)
print(key.value.hex())

# Atributos
attrs = c.get_attribute_list(uid)
print(attrs)

Exemplo — VMware vCenter TDE

vCenter aceita KMS KMIP-compliant para Tanzu / vSAN encryption:

  1. vCenter UI → Configure → Security → KMS Clusters → Add KMS Cluster
  2. Add KMS:
    • Cluster name: cv-tenant-X
    • Server: cv.acme.com.br
    • Port: 5696
  3. Upload client cert (emitido pela PKI do CV) e cert do servidor CV
  4. Test connection → deve retornar verde
  5. Marcar como default KMS para o cluster

TTLV codec

Implementação do TTLV (Tag-Type-Length-Value) binary format do KMIP via codec próprio no lib/kmip/ttlv.js. Versão KMIP 1.4 apenas (1.0-1.3 não suportados; 2.x não suportado).

Limitações MVP

  • 6 operations apenas — Encrypt/Decrypt em roadmap; clientes que precisam de crypto-as-a-service podem usar EaaS REST por enquanto
  • Sem Locate — clientes precisam de Unique Identifier (UID); não há query por atributo
  • Sem multi-tenant na porta única — cliente é identificado pelo cert mTLS, mapeado para tenant via tabela kmip_client_tenants
  • Apenas chaves simétricas (AES, 3DES) — chaves assimétricas (RSA, EC) em roadmap

Observability

cv_kmip_requests_total{operation, result}
cv_kmip_request_duration_seconds{operation}
cv_kmip_connections_active gauge
cv_kmip_tls_handshake_errors_total

Auditoria padrão em audit_logs também: cada op KMIP gera evento com source: "kmip".

Boas práticas

  • mTLS obrigatórioCV_KMIP_CLIENT_CA populado em produção
  • TLS 1.2+ apenas — KMIP 1.4 não exige TLS 1.3 mas é recomendado
  • Audit alertas em kmip_destroy — destroy é irrecuperável
  • Não exponha porta 5696 a internet — KMIP foi desenhado para redes internas; use VPN/PrivateLink/peering para clientes remotos
  • Backup das chaves — KMIP destroy literal apaga; sem backup, dados cifrados por essa chave ficam inacessíveis