es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir la solicitud Curl en una llamada de Rest Template en Java.

Tengo que realizar una llamada de verificación de certificado OCSP con el certificado emitido por algún sistema. El equipo OCSP compartió la siguiente URL de curl como muestra:

curl --cert <XYZ>.pem.txt --key <XYZprivatekey>.key.pem --cacert ABCASDStaging.cer.txt https://osd.staging.sd.sd.sg --data-binary @request.der --header "Content-Type:application/ocsp-requests" --header "Host:ocsp.staging.xvc.sdf.sg" --output asdasd-ocsp-resp.der --insecure -v >> STG CDNS.txt2>&1

Estoy intentando codificar la solicitud curl anterior en una solicitud java rest template, pero no puedo continuar. ¿Puedes ayudarme a convertir esta solicitud en una plantilla de descanso de java?

He creado el encabezado:

HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, "ocsp-requests");
headers.add("Host", "ocsp.staging.xvc.sdf.sg");

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir la solicitud de curl dada en una solicitud RestTemplate de Java, puedes utilizar el siguiente código:

    RestTemplate restTemplate = new RestTemplate();
    
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_TYPE, "application/ocsp-requests");
    headers.add("Host", "ocsp.staging.xvc.sdf.sg");
    
    byte[] payload = Files.readAllBytes(Paths.get("request.der")); // suponiendo que el archivo request.der está en el directorio actual
    
    HttpEntity<byte[]> requestEntity = new HttpEntity<byte[]>(payload, headers);
    
    String url = "https://osd.staging.sd.sd.sg";
    
    // suponiendo que el certificado, la clave privada y el certificado de la CA están en el mismo directorio
    String certPath = "XYZ.pem.txt";
    String keyPath = "XYZprivatekey.key.pem";
    String caCertPath = "ABCASDStaging.cer.txt";
    
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    
    keyStore.load(null, null); // inicializa un almacén de claves vacío
    keyStore.setCertificateEntry("cert", getCertificate(certPath));
    keyStore.setKeyEntry("key", getPrivateKey(keyPath), null, new Certificate[] { getCertificate(certPath) });
    
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    keyManagerFactory.init(keyStore, null);
    
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(getCACertificates(caCertPath));
    
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
    
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
    
    ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class);
    
    byte[] responsePayload = responseEntity.getBody();
    
    // escribe la carga útil de la respuesta en un archivo
    Files.write(Paths.get("asdasd-ocsp-resp.der"), responsePayload);
    

    Este código utiliza un RestTemplate para enviar una solicitud HTTP POST con la carga útil y las cabeceras de la solicitud OCSP a la URL dada. También configura SSL/TLS con el certificado, la clave privada y el certificado de la CA dados, para que el cliente pueda autenticarse en el servidor y confiar en el certificado del servidor.

    Los métodos getCertificate, getPrivateKey y getCACertificates son métodos auxiliares para cargar el certificado, la clave privada y los certificados de la CA desde los archivos dados en memoria como objetos X509Certificate y PrivateKey. Estos métodos se pueden implementar utilizando un KeyStore, un CertificateFactory y operaciones de entrada y salida de archivos.</byte[]></byte[]></byte[]>

Comments are closed.