151.18. 고급 사용


HTTP 생산자를 더 많이 제어해야 하는 경우 다양한 클래스를 설정하여 사용자 지정 동작을 제공할 수 있습니다.

151.18.1. HTTP Client를 위한 SSL 설정

JSSE 구성 유틸리티 사용

Camel 2.8부터 HTTP4 구성 요소는 Camel JSSE 구성 유틸리티를 통한 SSL/TLS 구성 을 지원합니다. 이 유틸리티는 작성해야 하는 구성 요소 특정 코드의 양을 크게 줄이고 끝점 및 구성 요소 수준에서 구성할 수 있습니다. 다음 예제에서는 HTTP4 구성 요소에서 유틸리티를 사용하는 방법을 보여줍니다.

구성 요소의 프로그래밍 방식 구성

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

HttpComponent httpComponent = getContext().getComponent("https4", HttpComponent.class);
httpComponent.setSslContextParameters(scp);

끝점의 Spring DSL 기반 구성

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
...
  <to uri="https4://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>...

직접 Apache HTTP 클라이언트 구성

기본적으로 camel-http4 구성 요소는 Apache CryostatClient 위에 빌드됩니다. 자세한 내용은 SSL/TLS 사용자 지정을 참조하거나 org.apache.camel.component.http4.HttpsServerTestSupport 단위 테스트 기본 클래스를 살펴보십시오.
사용자 지정 org.apache.camel.component.http4.HttpClientConfigurer 를 구현하여 전체 제어가 필요한 경우 http 클라이언트에서 일부 구성을 수행할 수도 있습니다.

그러나 키 저장소 및 신뢰 저장소를 지정하려는 경우 Apache HTTP#159 ClientConfigurer 를 사용하여 이 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.

KeyStore keystore = ...;
KeyStore truststore = ...;

SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));

그런 다음 Cryostat ClientConfigurer 를 구현하는 클래스를 만들고 위의 예제당 키 저장소 또는 신뢰 저장소를 제공하는 https 프로토콜을 등록해야합니다. 그런 다음 camel 경로 빌더 클래스에서 다음과 같이 연결할 수 있습니다.

HttpComponent httpComponent = getContext().getComponent("http4", HttpComponent.class);
httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());

Spring DSL을 사용하여 이 작업을 수행하는 경우 URI를 사용하여 Cryostat ClientConfigurer 를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

<bean id="myHttpClientConfigurer"
 class="my.https.HttpClientConfigurer">
</bean>

<to uri="https4://myhostname.com:443/myURL?httpClientConfigurer=myHttpClientConfigurer"/>

위에서 설명한 대로 EnglishClientConfigurer를 구현하고 키 저장소 및 신뢰 저장소를 구성하면 제대로 작동합니다.

HTTPS를 사용하여 gotchas 인증

최종 사용자는 HTTPS로 인증하는 데 문제가 있다고 보고했습니다. 이 문제는 사용자 지정 구성된 org.apache.http.protocol.HttpContext 를 제공하여 결국 해결되었습니다.

  • 1. CryostatContexts에 대한 (Spring) 팩토리를 생성합니다.
public class HttpContextFactory {

  private String httpHost = "localhost";
  private String httpPort = 9001;

  private BasicHttpContext httpContext = new BasicHttpContext();
  private BasicAuthCache authCache = new BasicAuthCache();
  private BasicScheme basicAuth = new BasicScheme();

  public HttpContext getObject() {
    authCache.put(new HttpHost(httpHost, httpPort), basicAuth);

    httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache);

    return httpContext;
  }

  // getter and setter
}
  • 2. Spring 애플리케이션 컨텍스트 파일에서 CryostatContext를 선언합니다.
<bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
  • 3. http4 URL에서 컨텍스트를 참조합니다.
<to uri="https4://myhostname.com:443/myURL?httpContext=myHttpContext"/>

다른 SSLContextParameter 사용

HTTP4 구성 요소는 구성 요소당 org.apache.camel.util.jsse.SSLContextParameters 인스턴스 하나만 지원합니다. 2개 이상의 다른 인스턴스를 사용해야 하는 경우 아래에 표시된 대로 여러 HTTP4 구성 요소를 설정해야 합니다. 두 개의 구성 요소가 있는 경우 각각 sslContextParameters 속성의 자체 인스턴스를 사용합니다.

<bean id="http4-foo" class="org.apache.camel.component.http4.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams1"/>
   <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
</bean>

<bean id="http4-bar" class="org.apache.camel.component.http4.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams2"/>
   <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
</bean>
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.