Análisis de eventos criptográficos
Mediante el análisis de eventos criptográficos, los administradores obtendrán información detallada sobre qué algoritmos criptográficos de las bibliotecas de seguridad de Java se están utilizando. JMS comparará los algoritmos que se utilizan con los cambios planificados y resaltará las aplicaciones que podrían verse afectadas por cambios futuros o por certificados que están a punto de caducar.
El análisis detectará si alguna de las aplicaciones Java de una instancia gestionada utiliza los algoritmos, las longitudes de clave o los valores por defecto que se cambiarán y proporcionará recomendaciones para evitar interrupciones.
Consola de OCI Cloud
- Conéctese a la consola de OCI como administrador.
- Abra el menú de navegación, haga clic en Observability & Management y, a continuación, haga clic en Fleets en Java Management.
- Seleccione su flota.
- Haga clic en Acciones y, en el menú, seleccione Análisis de eventos criptográficos.
- Haga clic en Iniciar.
- Una vez finalizada la solicitud de trabajo, haga clic en Informes de análisis criptográfico.
CLI de OCI
- Ejecute el siguiente comando:
oci jms fleet request-crypto-analyses --fleet-id $FLEET_OCID
Note:
El análisis criptográfico requiere la ejecución de aplicaciones que están produciendo eventos criptográficos relacionados, por ejemplo, establecimientos de comunicación TLS. Para ejecutar el análisis criptográfico solo en determinadas instancias gestionadas, utilice el parámetro de destinos como se muestra en el ejemplo siguiente.
Ejemplo
Demostraremos esta funcionalidad en dos aplicaciones simples de cliente/servidor de Spring Boot que se configurarán con un certificado de corta duración del algoritmo débil SHA1withRSA y con un tamaño de clave débil de 1024 bits. Por simplicidad, ambas aplicaciones se ejecutarán en una instancia gestionada.
Note:
La aplicación de ejemplo se puede recuperar de: https://github.com/jirkafm/spring-tls-example#!/usr/bin/env bash
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
# start crypto analysis on specified managed instance
WORK_REQUEST_OCID=$(oci jms fleet request-crypto-analyses \
--fleet-id "$FLEET_OCID" \
--targets "[{\"managedInstanceId\":\"$MANAGED_INSTANCE_OCID\"}]" | jq -r '."opc-work-request-id"')
echo $WORK_REQUEST_OCID
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status
Ahora ejecutaremos las aplicaciones y realizaremos pocas llamadas de API a la aplicación cliente:
$ java -jar spring-tls-client-1.1.0.jar &!
$ java -jar spring-tls-server-1.1.0.jar &!
$ BOOK_ID=$(curl -kX POST -H "Content-Type: application/json" -d "{ \"title\": \"AwesomeBook\", \"author\":\"AwesomeAuthor\" }" https://localhost:7081/client/books/ | jq -r '.id')
$ curl -k https://localhost:7081/client/books/$BOOK_ID
{"title":"AwesomeBook","author":"AwesomeAuthor","id":"d4131bd9-76f0-48cf-9c33-9089a232c865"}
Una vez finalizada la solicitud de trabajo, podemos comprobar el resultado del análisis criptográfico:
#!/usr/bin/env bash
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
WORK_REQUEST_OCID=ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaa7lxtmzmv2nt72fcnfwbo67xvffvuypnj4ca5hhky7kko2d4flvxq
ocijms crypto-analysis-result list \
--sort-by timeCreated \
--sort-order DESC \
--limit 10 \
--managed-instance-id "$MANAGED_INSTANCE_OCID" \
--fleet-id "$FLEET_OCID" | jq ".data.items[] | select(.\"work-request-id\"==\"$WORK_REQUEST_OCID\")"
{
"aggregation-mode": "MANAGED_INSTANCE",
"bucket-name": "jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
"crypto-roadmap-version": "2024-10-15",
"finding-count": 56,
"fleet-id": "ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
"host-name": "jms-demo",
"id": "ocid1.jmsreport.oc1.eu-frankfurt-1.amaaaaaalzyjypyaiaitxhgw4rwkcnjmu3tlqe67mtxdleful7znqr55bvwq",
"managed-instance-id": "ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq",
"namespace": "frmss8xk2qta",
"non-compliant-finding-count": 12,
"object-name": "JMS/ANALYSIS/CRYPTO/RESULTS/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/CryptoAnalysisResultMerged-20250714094729-ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaa7lxtmzmv2nt72fcnfwbo67xvffvuypnj4ca5hhky7kko2d4flvxq-013a1cb4-1e64-4ac9-959a-ddb057d49257.json",
"summarized-event-count": 36,
"time-created": "2025-07-14T09:47:29.430000+00:00",
"time-finished": "2025-07-14T09:39:18+00:00",
"time-first-event": "2025-07-14T09:29:52.106000+00:00",
"time-last-event": "2025-07-14T09:30:52.709000+00:00",
"time-started": "2025-07-14T09:28:29+00:00",
"total-event-count": 43,
"work-request-id": "ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaa7lxtmzmv2nt72fcnfwbo67xvffvuypnj4ca5hhky7kko2d4flvxq"
}
Por el resultado, podemos ver que hay hallazgos en la aplicación que requieren nuestra atención. Para ver más detalles, podemos ejecutar la siguiente llamada de API para descargar el informe de JSON o ver el informe en un formato más fácil de usar en la consola de JMS OCI Cloud.
# namespace, bucket-name and name parameters were taken from the report payload mentioned above
# we will filter events only for spring-tls-server-1.1.0.jar application
oci os object get \
--namespace frmss8xk2qta \
--bucket-name jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta \
--name JMS/ANALYSIS/CRYPTO/RESULTS/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/CryptoAnalysisResultMerged-20250714094729-ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaa7lxtmzmv2nt72fcnfwbo67xvffvuypnj4ca5hhky7kko2d4flvxq-013a1cb4-1e64-4ac9-959a-ddb057d49257.json --file - | jq '.applications[] | select(.applicationName == "spring-tls-server-1.1.0.jar")'
...
{
"summarizedCryptoEvent": {
"eventType": "X509CertificateEvent",
"occurrences": 1,
"timeFirstEvent": "2025-07-14T09:30:42.203961324Z",
"timeLastEvent": "2025-07-14T09:30:42.203961324Z",
"event": {
"eventType": "X509CertificateEvent",
"startTime": "2025-07-14T09:30:42.203961324Z",
"algorithm": "SHA1withRSA",
"serialNumber": "2c0fb97d",
"subject": "CN=Client, OU=Server, O=test, L=Portland, ST=OR, C=US",
"issuer": "CN=Client, OU=Server, O=test, L=Portland, ST=OR, C=US",
"keyType": "RSA",
"keyLength": 1024,
"certificateId": 3057353200,
"validFrom": "2025-07-14T08:00:55Z",
"validUntil": "2025-07-17T08:00:55Z"
}
},
"findings": [
{
"detectorName": "Certificate will expire soon",
"severity": "WARN"
},
{
"detectorName": "Removed root certificates with 1024-bit keys",
"severity": "ERROR",
"detailsLink": "https://www.java.com/en/configure_crypto.html#RemoveRootCert"
},
{
"detectorName": "SHA-1 signature",
"severity": "WARN",
"detailsLink": "https://www.java.com/en/configure_crypto.html#WarnWeakAlgorithms"
},
{
"detectorName": "RSA recommended key size",
"severity": "WARN",
"detailsLink": "https://www.java.com/en/configure_crypto.html#defKeySize"
}
]
}
...