자바에서 HTTPS 서버 생성
HTTPS(Secure Hypertext Transfer Protocol)는 인터넷을 통한 안전한 통신을 보장하는 보안 프로토콜입니다. HTTPS는 한 쌍의 개인 키와 디지털 인증서를 사용하여 수신자와 발신자를 확인합니다.
이 자습서에서는 Java로 간단한 HTTPS 서버를 만드는 방법을 보여줍니다.
자바에서 HTTPS 서버 생성
JAVA에서 HTTPS 서버를 생성하기 전에 서버가 사용할 Keystore 및 Truststore를 생성했는지 확인해야 합니다. 이를 생성하려면 아래 단계를 따르십시오.
-
관리자 권한으로 명령 프롬프트를 엽니다.
-
cmd에서 Java bin 디렉토리의 경로로 이동합니다.
-
이제 다음 명령을 실행합니다.
keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
-
이 명령은 성, 조직 단위, 조직, 도시, 주 및 2자리 국가 코드를 묻습니다. 모든 정보를 제공하십시오.
-
yes
를 입력하고 마지막 단계에서Enter
를 누릅니다.출력:
-
이는 bin 폴더에
testkey.jks
파일이 생성되었음을 의미합니다. Java 프로젝트 폴더에 복사하여 프로그램에 로드합니다.
Keystore와 Truststore가 생성되면 JAVA에서 HTTPS 서버를 생성할 수 있습니다.
예:
package delftstack;
import com.sun.net.httpserver.*;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpsExchange;
import com.sun.net.httpserver.HttpsServer;
import java.io.*;
import java.net.InetSocketAddress;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.TrustManagerFactory;
public class HTTPS_Server {
public static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange x) throws IOException {
String Response = "This is the response from delftstack";
HttpsExchange HTTPS_Exchange = (HttpsExchange) x;
x.getResponseHeaders().add("Access-Control-Allow-Origin", "*");
x.sendResponseHeaders(200, Response.getBytes().length);
OutputStream Output_Stream = x.getResponseBody();
Output_Stream.write(Response.getBytes());
Output_Stream.close();
}
}
public static void main(String[] args) throws Exception {
try {
// setup the socket address
InetSocketAddress Inet_Address = new InetSocketAddress(9000);
// initialize the HTTPS server
HttpsServer HTTPS_Server = HttpsServer.create(Inet_Address, 0);
SSLContext SSL_Context = SSLContext.getInstance("TLS");
// initialise the keystore
char[] Password = "password".toCharArray();
KeyStore Key_Store = KeyStore.getInstance("JKS");
FileInputStream Input_Stream = new FileInputStream("testkey.jks");
Key_Store.load(Input_Stream, Password);
// setup the key manager factory
KeyManagerFactory Key_Manager = KeyManagerFactory.getInstance("SunX509");
Key_Manager.init(Key_Store, Password);
// setup the trust manager factory
TrustManagerFactory Trust_Manager = TrustManagerFactory.getInstance("SunX509");
Trust_Manager.init(Key_Store);
// setup the HTTPS context and parameters
SSL_Context.init(Key_Manager.getKeyManagers(), Trust_Manager.getTrustManagers(), null);
HTTPS_Server.setHttpsConfigurator(new HttpsConfigurator(SSL_Context) {
public void configure(HttpsParameters params) {
try {
// initialise the SSL context
SSLContext SSL_Context = getSSLContext();
SSLEngine SSL_Engine = SSL_Context.createSSLEngine();
params.setNeedClientAuth(false);
params.setCipherSuites(SSL_Engine.getEnabledCipherSuites());
params.setProtocols(SSL_Engine.getEnabledProtocols());
// Set the SSL parameters
SSLParameters SSL_Parameters = SSL_Context.getSupportedSSLParameters();
params.setSSLParameters(SSL_Parameters);
System.out.println("The HTTPS server is connected");
} catch (Exception ex) {
System.out.println("Failed to create the HTTPS port");
}
}
});
HTTPS_Server.createContext("/test", new MyHandler());
HTTPS_Server.setExecutor(null); // creates a default executor
HTTPS_Server.start();
} catch (Exception exception) {
System.out.println("Failed to create HTTPS server on port " + 9000 + " of localhost");
exception.printStackTrace();
}
}
}
위의 코드는 무엇이든 사용할 수 있는 포트 번호 9000에 로컬 호스트 HTTPS 서버를 생성합니다.
출력(IDE에서):
The HTTPS server is connected
출력(브라우저에서):
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook