Algunos endpoints de Akua pueden requerir mTLS (mutual Transport Layer Security) como capa adicional de seguridad. El mTLS es una extensión del protocolo TLS estándar que proporciona autenticación bidireccional, es decir, no solo el cliente verifica la identidad del servidor, sino que el servidor también verifica la identidad del cliente.
1. Generación del par de llaves y CSR
Genere una llave privada RSA:
openssl genrsa -out entity_private.key 2048
Cree un Certificate Signing Request (CSR) con la llave privada:
openssl req -new -key entity_private.key -out entity.csr
Durante este proceso, se abrirá un menú interactivo. Complete la información solicitada de la siguiente manera:
Country Name (2 letter code) [XX]: # Código de país (ej. CO para Colombia)
State or Province Name []: # Estado o provincia
Locality Name []: # Ciudad
Organization Name []: # Nombre de su organización
Organizational Unit Name []: # Unidad o departamento
Common Name []: # Nombre común, generalmente su dominio
Email Address []: # Email de contacto técnico
Please enter the following 'extra' attributes
A challenge password []: [Dejar en blanco]
An optional company name []: [Dejar en blanco]
Importante: El valor del "Common Name" debe ser un identificador único para su entidad. Puede ser el nombre de su API o el dominio desde donde se realizarán las solicitudes.
Pasos siguientes:
- Almacene la llave privada de forma segura en su infraestructura (AWS Secrets Manager, HashiCorp Vault o similar).
- Envíe el archivo CSR (
entity.csr
) a [email protected] para su firma. - El equipo de Akua firmará su CSR con nuestra Autoridad Certificadora de Cloudflare y le enviará de vuelta un certificado firmado (
entity_signed.pem
).
2. Consumo de endpoints con mTLS
Para consumir los endpoints protegidos con mTLS de Akua, utilice los archivos .pem
(certificado) y .key
(llave privada) en sus solicitudes HTTP.
Ejemplo con curl:
curl --cert entity_signed.pem \
--key entity_private.key \
https://api.akua.la/mtls/ping
Respuesta esperada:
Pong
En caso de error:
En caso de usar un certificado no autorizado o incorrecto, recibirá un mensaje de error:
Forbidden - Missing or wrong certificate
3. Integración en su aplicación
Integre los certificados en su aplicación según el lenguaje de programación y framework que utilice. Asegúrese de:
- Proteger adecuadamente la llave privada
- Validar el certificado del servidor de Akua
- Establecer un mecanismo para rotar los certificados cuando expiren
Notas importantes
Validez del certificado El certificado tendrá un periodo de validez de 2 años
Alertas de renovación Configure alertas para renovar el certificado antes de su vencimiento
Seguridad de la llave privada Nunca comparta su llave privada
Compromiso de seguridad Notifique inmediatamente al equipo de Akua si sospecha que la llave privada ha sido comprometida
Soporte: Para cualquier duda adicional sobre la implementación, contacte al equipo técnico de Akua.
Certificados y Llaves de Prueba
entity_signed.pem
-----BEGIN CERTIFICATE-----
MIIElDCCA3ygAwIBAgIUTVDP91BBeQ3p8ALhF62CvHbUxGowDQYJKoZIhvcNAQEL
BQAwgagxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZGZsYXJlLCBJbmMuMRswGQYD
VQQLExJ3d3cuY2xvdWRmbGFyZS5jb20xNDAyBgNVBAMTK01hbmFnZWQgQ0EgNTIw
YTdhYzZmODEyNDY4ZmFiNDllYWE0M2E4ZjY0MDAwHhcNMjUwNTA1MjE1MTAwWhcN
MjYwNTA1MjE1MTAwWjCBoDELMAkGA1UEBhMCQVIxFTATBgNVBAgTDEJ1ZW5vcyBB
aXJlczENMAsGA1UEBxMEQ0FCQTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ
dHkgTHRkMQ0wCwYDVQQLEwRUZWNoMRQwEgYDVQQDEwtleGFtcGxlLmNvbTEjMCEG
CSqGSIb3DQEJAQwUc2VjdXJpdHlAZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCmYpfSfUF4j10jCWdjI26ZX01q/4yynPWeW4HfmhK1
gxviIFDTNBu3WDE/W+EuG7XRlFS9GCMYebG01rPyM9MV2wMb466UX0LaW6gV8W4O
fHv+/9qr7e5w/xlEmKk50EzjuJY2/gaBhSpuM+Ay8efiQteHtuCBniz+7N+5ipOd
Xh03uCxXBir6JYpDEHVSBHf7x/0lWXZll2O/6oY9m9PaWPiXfV93HrOPX0MS2k11
GU7fPRxIbmE5aZ6T9auEPMk1NKfY+nOce1PhP/d8N/UuKmv2DPJzIS4jrQIJ4N9q
l5DdDGq3++OJtYYB2TXIztVUFfMptPFjCfqIZ71tFVaZAgMBAAGjgbswgbgwEwYD
VR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUqUdOQ6MR
yAb7aA57gWugh03elOgwHwYDVR0jBBgwFoAUGTaBNv1gPEUJEUQ4y7Q1hMKhXuUw
UwYDVR0fBEwwSjBIoEagRIZCaHR0cDovL2NybC5jbG91ZGZsYXJlLmNvbS9iNWRl
NTY1YS00NGI4LTRlMzMtOWNhYS1hODQzYTgwY2QyNTkuY3JsMA0GCSqGSIb3DQEB
CwUAA4IBAQAE268WPDnY5FeGZif9m7P5SpKUsKAn0Tw/zVadwogolIbDBTEtpSQG
gGUcpREnt5ZPSalSZduxJgn9Lcf2xx2nZFdRG7XrR+FxiSRW2WWTnggX+SkPCdMj
s79d6unpzmbCmR/mnQz01raRmZotlZbbjuHaObCbIPjFFUMIygiCIhQEXbDzNiAZ
hpTgTmuDC+NU5aa4vtYD20ct6VGNnibrgoAQnp1yL4k6BVEzSxP1RlLYO0Cg2/Tm
cdJfS5qNVg48JEXDQCL6TIMFWN6LqZhdqLmFn26rffwKC6a9OkxtTdPu5CbO1Dih
qKnslfrFQXr7aH5foGd6psSeXgTO3ytC
-----END CERTIFICATE-----
entity_private.key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmYpfSfUF4j10j
CWdjI26ZX01q/4yynPWeW4HfmhK1gxviIFDTNBu3WDE/W+EuG7XRlFS9GCMYebG0
1rPyM9MV2wMb466UX0LaW6gV8W4OfHv+/9qr7e5w/xlEmKk50EzjuJY2/gaBhSpu
M+Ay8efiQteHtuCBniz+7N+5ipOdXh03uCxXBir6JYpDEHVSBHf7x/0lWXZll2O/
6oY9m9PaWPiXfV93HrOPX0MS2k11GU7fPRxIbmE5aZ6T9auEPMk1NKfY+nOce1Ph
P/d8N/UuKmv2DPJzIS4jrQIJ4N9ql5DdDGq3++OJtYYB2TXIztVUFfMptPFjCfqI
Z71tFVaZAgMBAAECggEANC26MAwQ4qaPDkRONHRxpE6TYElJDeCUVHedCIrwcBTw
Qx9gSYPPZ1WUiCqfuQ5+m/2Y/34Yz32mgbBNWVjwSyvWU0I5RxWCySiyU0NWANwA
JM2G/aENxEjz2yPG+jb9TfLexNswHiEtV8cT+dYMItRUdB6hVHTO5plRZgXz2gce
a2uR51kMDrwEMckroSQnFGt+ZlJYGzS3nIfnGjGVR7i0m3DyQpTqeDWhm+Yq9ch5
uimV3mpIGN88iEExHRHjuKqdt/iS6mKHtUx0BIjXzMcAP+4hWQzpxwg0P0hYQgl7
7YWyRaWWBpMz94v3LUMjCoFz2rkT350xHohnkrr+OwKBgQDfB0oW97u/pbnkSW9l
Mis1Y1dbrn76HodHH9ZNSTu4GJXvrvdMB4x1Ja4LaHukFzvVMAHLbKa7plyS11gx
MLPxyaIT/TzmlJdAY0ECjboEkFxJ0UF8nmypx+zSdKi3tQvFR8dT/Y8qwm7o/jGx
MSCwRkFYNfcKy+TmkhLUH9j4vwKBgQC++5YBwVTtT1M6u3NxvMohM0WtxEuGETsP
4tR75DSRsrPtjAzomYB7JXOJvkofoT8EdDr8QgwV6Y2V9C8zfH7pFpTrs9pc4g6J
g5Ysepdrp4RegYME/Zahl9T/B6m/CZVDHbkH6fO0TGueixHQWLMEd7StIrOPputf
gr8vDZdupwKBgBDBv3NSUazoirr4OYJk7pIoUJv21Ft+h7N0VOmhovcGAd3sS3BO
8OKsXhNFWmTNyhUOclQSacSXj0UJIPsxKZP1DlRqJnU8nNCdpHjIpT1Ki2SQcFco
oAlxl/2H/lUvKR89cWCCIIuZ6DNhReKGSmp0HNy/0TvibeRU/U0qx2aJAoGBAKnj
7eYz0FOmXBiEBccotPphvNs+IhzqGQshsflf4O+2814eVqFXY7aocyYWM6P9cayJ
pKsgKdYYRA4gARkg51h78Q/XlylHIr1rY9y/VRG8HAFh3mZDG4s2IJCZhYPeh3wD
5cRHdrZtwNJxTfBz5xPTVNMramYgi4MUMPQveAVDAoGAc4qcr53U8s9XOwQt4sVV
AHeKg4gKSZ6tIvtIyDzm7xsrScv4bzefRdnEA8ojma3+fqdpApXjAJWT+N8Ss7TY
mjmB7RVHaD2s9iBOSeP2slCet/bFY/BUvk8+vVMuEDRmPPTV4nLV9Nfny5avUgRX
6K1xcjB6aP9y10QG79yD/tQ=
-----END PRIVATE KEY-----