Cada comunicación cliente/servidor debe estar asegurada a través de un protocolo con Secure Socket Layer/Transport Layer Security. El predecesor de Transport Layer Security (TLS) es Secure Socket Layer (SSL), la razón de la existencia de TLS se debe a la vulnerabilidad de SSL frente a un ataque y SSL difiere de TLS en los estándares criptográficos sobre la comunicación entre aplicaciones.
Una comunicación segura entre aplicaciones se basa en un certificado (cert) distribuido por una autoridad de certificación (CA) que es mutuamente acordada por el cliente y el servidor. CA es una entidad que emite certificados digitales que tienen el estándar x.509 (utiliza criptografía de clave pública) y algunos de los principales proveedores de CA son Comodo, GoDaddy, Global Sign y Symantec.
Este artículo se centrará en cómo instalar certificados en la imagen de la ventana acoplable que tiene una API RESTful. Podemos categorizar el artículo en tres secciones que explican conceptos clave sobre seguridad y cómo lograrlo.
La mayoría de los formatos de certificados tienen el sufijo -.pem, .cer, .crt, .key. Los clientes que se comunican (navegadores/sistemas de clientes) con el servidor tendrán *.pem (correo de privacidad mejorada) o .cer (extensión de archivo de un certificado SSL) para establecer una conexión segura.
Formato común de *.pem, *.cer, *.crt
El algoritmo RSA (Rivest-Shamir-Adleman) se utiliza para cifrar y descifrar mensajes en comunicaciones donde una clave se mantiene pública y la otra como privada, lo que define el concepto de criptografía de clave pública, también conocido como cifrado asimétrico. Los ataques más comunes como MITMA (Man In The Middle Attack) se pueden prevenir mediante el uso de TLS. La Autoridad de registro (RA) ayuda a autenticar el certificado de la Infraestructura de clave pública (PKI) disponible y actúa como intermediario para CA.
En resumen, a continuación se resume la comunicación general para realizar una conexión segura entre dos recursos a través de la autenticación unidireccional.
Funcionaría de la misma manera para la autenticación mutua donde el cliente y el servidor proporcionan sus claves públicas y descifran sus mensajes con sus propias claves privadas disponibles en su extremo.
Podemos ver una demostración de cómo lograr la autenticación unidireccional en un contenedor docker que tiene la API RESTful de Golang. Consulte el artículo Golang y Docker: microservicios (API RESTful) para el modelo empresarial que ilustra los pasos para crear la API Restful y envolverla en una imagen de Docker.
Una imagen acoplable se compone de múltiples recursos que harán que un contenedor sirva una solicitud por sí solo en la nube y es responsabilidad del administrador instalar los certificados relevantes en el directorio raíz dentro de la imagen para asegurarla. Indique también en su código que considere los certificados desde la raíz al realizar llamadas a otras API seguras.
Imagen con certificados instalados
En alpine tenemos una utilidad de paquete llamada ca-certificates que viene con sus certificados preinstalados para el navegador Mozilla. También debe actualizar el paquete con sus certificados de terceros necesarios para TLS y esto se puede hacer especificando un comando de certificado de actualización como se muestra a continuación en Dockerfile.
DE alpino: más reciente
EJECUTAR actualización de apk && apk agregar certificados CA && rm -rf /var/cache/apk/*
COPIAR ./mycert.crt /usr/local/share/ca-certificates/mycert.crt
EJECUTAR actualizar-ca-certificados
Agregue los siguientes comandos a su archivo Docker que explica los pasos a continuación.
Los pasos anteriores agregarán su certificado de terceros a su imagen acoplable, una vez que la imagen esté construida y el contenedor esté activo, la biblioteca de Golang detectará el certificado (estándar x.509) y proporcionará la clave pública adecuada para establecer una conexión segura con las API de llamadas.