목차
자바에서 사용자에게 입력 받기 관련 예제 이전 포스팅
우선 오늘 포스팅에서 다룰 HTTPS 암호화 통신 예제도 기존 HTTP 일반 통신과 많이 다르지 않습니다. 본 예제에서도 외부(사용자)로부터 URL을 입력받아 요청을 하고 응답을 받아올 것입니다. 따라서 자바에서 외부입력을 받는 방법을 예습해주세요.
2023.08.10 - [Java] - [Java] InputStreamReader 사용자에게 문자열 입력받아 치환 예제(readLine, replace)
자바 HTTP 클라이언트 요청 관련 예제 이전 포스팅
또한, HTTP 커넥션을 어떻게 생성하는지 미리 학습하면 좋습니다. 물론 오늘 예제에서도 거의 동일하게 URL 객체를 생성하여 커넥션을 생성합니다. 같이 봐도되지만, HTTP 통신과 HTTPS 통신 차이의 설명을 잘 이해하기 위해서는 앞서 통신 포스팅을 확인해주면 좋을 것 같습니다.
2023.08.10 - [Java] - [Java] HTTP 클라이언트 GET 통신 예제(HttpURLConnection)
HTTPS 요청 및 응답 출력 예제
아래는 HTTPS URL을 입력하여 서버에 GET 요청을 보내고 응답을 받아와 화면에 출력하는 예제입니다. 여기서 눈치를 채셨나요? 맞습니다. 기존 예제와 코드가 동일합니다.
HttpURLConnection 객체는 받는 URL에 따라 HTTPS 요청도 지원합니다. 내부적으로 HTTP 통신 뿐만아니라 암호화통신도 같이 지원함으로써 결과를 수신할 수 있습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Enter URL: ");
String urlStr = reader.readLine();
// URL 객체 생성
URL url = new URL(urlStr);
// HTTP 연결 객체 생성
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// GET 요청 설정
connection.setRequestMethod("GET");
// 응답 코드 가져오기
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 응답 내용 읽기
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 응답 내용 출력
System.out.println("Response Content:\n" + response.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
기존 HTTP 요청 HTTPS 암호화 통신과 차이점
패킷 스니핑 도구로 HTTP 사이트에 요청하였을 때 서버와 주고받는 패킷을 확인해보면 아래와 같이 평문의 내용을 주고받습니다. 따라서 중간에서 패킷을 훔쳐보면 어떤 내용의 메세지를 주고받고있는지 알 수 있으므로 보안에 취약합니다.
하지만 HTTPS 스키마를 지원하는 서버에 요청하여 응답을 출력하면 아래와 같이 중간에서 알 수 없도록 암호화 패킷을 주고 받고 있습니다. 따라서 중간에 메세지가 유출될 위험이 없고 보안성이 우수합니다. 따라서 서버를 구성할 때는 HTTPS 서버를 구성하는 것이 권고됩니다.