Generación de certificados

JustC2 incluye un script para generar certificados autofirmados rápidamente:

cd dist/
bash ssl_gen.sh

El script ejecuta:

openssl req -x509 -nodes -newkey rsa:2048 \
  -keyout server.rsa.key \
  -out server.rsa.crt \
  -days 3650

Esto genera un certificado RSA de 2048 bits válido por 10 años.

Certificados ECDSA (alternativa)

Para mayor seguridad, puedes generar certificados ECDSA:

openssl req -x509 -nodes \
  -newkey ec:secp384r1 \
  -keyout server.ecdsa.key \
  -out server.ecdsa.crt \
  -days 3650

Actualiza profile.yaml para usar los nuevos certificados:

Teamserver:
  cert: "server.ecdsa.crt"
  key: "server.ecdsa.key"

Certificados personalizados

Si tienes tu propio certificado (por ejemplo, de Let’s Encrypt), simplemente apunta a los archivos:

Teamserver:
  cert: "/ruta/al/fullchain.pem"
  key: "/ruta/al/privkey.pem"

Configuración TLS en profile.yaml

La sección tls dentro de HttpServer controla los parámetros del protocolo TLS:

HttpServer:
  tls:
    min_version: "TLS1.2"
    max_version: "TLS1.3"
    prefer_server_cipher_suites: false
    cipher_suites:
      - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
      - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
      - "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
      - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
      - "TLS_RSA_WITH_AES_128_GCM_SHA256"
      - "TLS_RSA_WITH_AES_256_GCM_SHA384"

Parámetros TLS

CampoDescripciónValores
min_versionVersión mínima de TLS aceptada"TLS1.0", "TLS1.1", "TLS1.2", "TLS1.3"
max_versionVersión máxima de TLS"TLS1.2", "TLS1.3"
prefer_server_cipher_suitesPriorizar las cipher suites del servidor sobre las del clientetrue, false
cipher_suitesLista de cipher suites permitidasVer tabla abajo

Cipher suites soportadas

Cipher SuiteTipoRecomendado
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256ECDHE + RSA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384ECDHE + RSA
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256ECDHE + ECDSA
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ECDHE + ECDSA
TLS_RSA_WITH_AES_128_GCM_SHA256RSAAceptable
TLS_RSA_WITH_AES_256_GCM_SHA384RSAAceptable

Configuración recomendada

Usa min_version: "TLS1.2" y max_version: "TLS1.3" con las cipher suites ECDHE para máxima seguridad. TLS 1.3 negocia automáticamente las cipher suites más seguras.

Perfiles de seguridad

Perfil estricto (máxima seguridad)

HttpServer:
  tls:
    min_version: "TLS1.3"
    max_version: "TLS1.3"

TLS 1.3 solo permite cipher suites seguras por diseño, por lo que no es necesario configurar cipher_suites.

Perfil compatible (mayor compatibilidad)

HttpServer:
  tls:
    min_version: "TLS1.2"
    max_version: "TLS1.3"
    prefer_server_cipher_suites: true
    cipher_suites:
      - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
      - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
      - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
      - "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"

Perfil OPSEC (mimetización)

Para que el servidor TLS se parezca a un servidor web legítimo, usa las mismas cipher suites que usa nginx o Apache por defecto:

HttpServer:
  error:
    headers:
      Server: "nginx/1.26.2"
  tls:
    min_version: "TLS1.2"
    max_version: "TLS1.3"
    cipher_suites:
      - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
      - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
      - "TLS_RSA_WITH_AES_128_GCM_SHA256"
      - "TLS_RSA_WITH_AES_256_GCM_SHA384"

Verificación

Después de iniciar el servidor, verifica la configuración TLS:

# Verificar certificado y cipher suites
openssl s_client -connect localhost:4321 -tls1_2

# Verificar TLS 1.3
openssl s_client -connect localhost:4321 -tls1_3

# Ver detalles del certificado
openssl s_client -connect localhost:4321 2>/dev/null | openssl x509 -text -noout