[java] Apache HttpClient를 사용하여 웹 서버의 인증서를 검증하는 방법은?
  1. TrustManager 구현하기: TrustManager는 SSL 연결 중에 서버의 인증서를 검증하는 역할을 합니다. TrustManager를 구현하여 원하는 검증 로직을 작성해야 합니다.
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class MyTrustManager implements X509TrustManager {

    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        // 클라이언트 인증서 검증 로직 작성
    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        // 서버 인증서 검증 로직 작성
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}
  1. HttpClient에 TrustManager 설정하기: HttpClient를 생성할 때 SSL 연결에 사용할 SSLContext를 생성하고, 그 SSLContext에 TrustManager를 등록해야 합니다.
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import javax.net.ssl.SSLContext;

public class HttpClientExample {

    public static void main(String[] args) throws Exception {
        // TrustManager 생성
        MyTrustManager trustManager = new MyTrustManager();

        // SSLContext 생성 및 TrustManager 등록
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, new MyTrustManager[]{trustManager}, null);

        // HttpClient 생성 및 SSLContext 설정
        SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();

        // HttpClient를 사용하여 웹 서버와 통신하는 로직 작성
        // ...
    }
}

위의 코드에서 MyTrustManager 클래스는 X509TrustManager 인터페이스를 구현하여 서버 인증서를 검증하는 로직을 작성할 수 있습니다. checkServerTrusted 메서드에서 서버 인증서를 검증하는 로직을 작성하면 됩니다.

HttpClientExample 클래스에서는 TrustManager를 사용하여 SSL 연결을 수행하는 HttpClient를 생성하는 예제를 보여줍니다. SSLContext를 생성하고 해당 SSLContext에 TrustManager를 등록한 후, SSLConnectionSocketFactory를 생성하여 HttpClient에 설정하는 과정을 거칩니다.

이렇게 설정된 HttpClient를 사용하여 웹 서버와의 요청을 수행할 수 있습니다.