본문 바로가기
IT/자바 Java

자바로 배우는 HTTPS . 보안 소켓과 SSL/TLS 개념

by SidePower 2024. 12. 1.

 

SSL/TLS 개념, HTTPS 서버 구현 예제, 인증서 설정 및 데이터 암호화에 대해 다룹니다.

자바 입문자들이 쉽게 이해할 수 있도록 예제 코드와 함께 설명하겠습니다.

 

SSL/TLS 개념 소개

SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는

인터넷에서 데이터 전송의 보안을 제공하는 프로토콜입니다.

주로 웹사이트와 클라이언트 간의 통신을 암호화하여 정보의 기밀성을 보장합니다.

HTTPS는 HTTP의 보안 버전으로, SSL/TLS를 통해 데이터를 암호화하여 전송합니다.

 

예제 코드: SSLContext 설정

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import java.security.KeyStore;

public class SSLExample {
    public static void main(String[] args) throws Exception {
        // 신뢰할 수 있는 인증서 저장소를 로드합니다.
        KeyStore keyStore = KeyStore.getInstance("JKS");
        keyStore.load(SSLExample.class.getResourceAsStream("/keystore.jks"), "password".toCharArray());

        // TrustManager를 초기화합니다.
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(keyStore);

        // SSLContext를 생성합니다.
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, tmf.getTrustManagers(), null);

        System.out.println("SSLContext가 성공적으로 초기화되었습니다.");
    }
}

 

 간단한 HTTPS 서버 구현 예제

이제 SSLContext를 설정한 후, 간단한 HTTPS 서버를 구현해 보겠습니다.

 

HTTPS 서버 코드 예제

import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpsServer;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

public class HttpsExample {
    public static void main(String[] args) throws Exception {
        // HTTPS 서버를 생성합니다.
        HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress(8000), 0);
        
        // SSLContext를 설정합니다.
        SSLContext sslContext = SSLContext.getDefault();
        httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
            public void configure(HttpsParameters params) {
                SSLParameters sslParams = sslContext.getDefaultSSLParameters();
                params.setSSLParameters(sslParams);
            }
        });
        
        // 기본 핸들러를 추가합니다.
        httpsServer.createContext("/", new HttpHandler() {
            @Override
            public void handle(HttpExchange exchange) throws IOException {
                String response = "Hello, HTTPS World!";
                exchange.sendResponseHeaders(200, response.length());
                OutputStream os = exchange.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        });
        
        // 서버 시작
        httpsServer.start();
        System.out.println("HTTPS 서버가 시작되었습니다. 포트: 8000");
    }
}

 

 

 인증서 설정 및 데이터 암호화

HTTPS를 사용하려면 SSL 인증서가 필요합니다.

인증서는 보안된 연결을 설정하고, 클라이언트가 서버의 신뢰성을 확인할 수 있도록 도와줍니다.

인증서 생성 방법 및 사용 방법에 대해서도 설명할 수 있습니다.

 

인증서 생성 예제 (OpenSSL 사용)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout myserver.key -out myserver.crt

 

자바 입문자들이 SSL과 HTTPS의 기초 개념을 이해하고,

실제로 HTTPS 서버를 구현하는 데 도움이 되기를 바랍니다!

반응형

댓글