/* Basic TLS Client Testing Tool
 * Luke H 2025 0.2
 *
 * Update the following parameters before running:
 * httpsUrl
 * tlsVersion
 *
 * Recommended: Run with SSL Debugging Flags:
 * -Djavax.net.debug=ssl,handshake
 * -Djavax.net.debug=all
 */

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import javax.net.ssl.*;
import java.security.NoSuchAlgorithmException;
import java.security.KeyManagementException;

public class TLSClient {

    public static void main(String[] args) {
        String httpsUrl = "https://your-api-endpoint.com"; // Replace with actual URL
        String tlsVersion = "TLSv1.3"; // Example: "TLSv1.2" or "TLSv1.3"

        try {
            // Set up SSL context with specified TLS version
            SSLContext sslContext = SSLContext.getInstance(tlsVersion);
            sslContext.init(null, null, null); // Uses default trust manager and key manager

            // Build HttpClient with custom SSL context
            HttpClient client = HttpClient.newBuilder()
                    .sslContext(sslContext)
                    .build();

            // Create HTTP GET request
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(httpsUrl))
                    .header("User-Agent", "Java TLS HttpClient")
                    .GET()
                    .build();

            // Send request and print response
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            System.out.println("Response Code: " + response.statusCode());
            System.out.println("Response Body:\n" + response.body());

        } catch (NoSuchAlgorithmException e) {
            System.err.println("TLS version not supported: " + e.getMessage());
        } catch (KeyManagementException e) {
            System.err.println("Error initializing SSL context: " + e.getMessage());
        } catch (Exception e) {
            System.err.println("Connection error: " + e.getMessage());
        }
    }
}

