Programming/Java

SSL/TLS handshake 테스트

Lawmin 2025. 2. 24. 16:19

$ javac SSL.java

$ java SSL

 

아래 코드를 SSL.java 로 저장 후, 위와 같이 테스트합니다.

(JDK/JRE 등에서 정상 연결 여부를 보고 싶을 때 사용 가능)

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Arrays;

public class SSL {
    public static void main(String[] args) {
        String host = "lawmin.tistory.com";
        int port = 443; // HTTPS 기본 포트

        try {
            SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket socket = (SSLSocket) factory.createSocket(host, port);

            // 지원되는 프로토콜 및 암호화 스위트 출력
            System.out.println("Enabled Protocols: " + Arrays.toString(socket.getEnabledProtocols()));
            System.out.println("Enabled Cipher Suites: " + Arrays.toString(socket.getEnabledCipherSuites()));

            // SSL Handshake 수행
            socket.startHandshake();
            System.out.println("SSL Handshake 성공!");

            // 간단한 HTTP 요청 보내기
            OutputStream out = socket.getOutputStream();
            out.write("GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n".getBytes());
            out.flush();

            // 응답 출력
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }

            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}