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)
| Operation | Implementado |
|---|---|
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:
- vCenter UI → Configure → Security → KMS Clusters → Add KMS Cluster
- Add KMS:
- Cluster name:
cv-tenant-X - Server:
cv.acme.com.br - Port:
5696
- Cluster name:
- Upload client cert (emitido pela PKI do CV) e cert do servidor CV
- Test connection → deve retornar verde
- 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 deUnique 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ório —
CV_KMIP_CLIENT_CApopulado 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