173.9. SSL 지원(HTTPS)


JSSE 구성 유틸리티 사용

Camel 2.8부터 Jetty 구성 요소는 Camel JSSE 구성 유틸리티를 통해 SSL/TLS 구성을 지원합니다.  이 유틸리티는 작성하는 데 필요한 구성 요소별 코드의 양을 크게 줄이고 엔드포인트 및 구성 요소 수준에서 구성할 수 있습니다.  다음 예제에서는 Jetty 구성 요소와 함께 유틸리티를 사용하는 방법을 보여줍니다.

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

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);

JettyComponent jettyComponent = getContext().getComponent("jetty", JettyComponent.class);
jettyComponent.setSslContextParameters(scp);
Copy to Clipboard Toggle word wrap

끝점의 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="jetty:https://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>
...
Copy to Clipboard Toggle word wrap

Jetty 직접 구성

Jetty는 박스에서 SSL 지원을 제공합니다. Jetty가 SSL 모드에서 실행되도록 하려면 https:// 접두사---로 URI를 포맷합니다. 예를 들면 다음과 같습니다.

<from uri="jetty:https://0.0.0.0/myapp/myservice/"/>
Copy to Clipboard Toggle word wrap

Jetty는 또한 올바른 SSL 인증서를 로드하기 위해 사용할 암호와 키 저장소에서 키 저장소를 로드할 위치를 알아야 합니다. 다음 JVM 시스템 속성을 설정합니다.

Camel 2.2

  • Jetty.ssl.keystore 는 키 항목에 Jetty 서버의 자체 X.509 인증서가 포함된 Java 키 저장소 파일의 위치를 지정합니다. 키 항목은 X.509 인증서(effectively, 공개 키) 및 관련 개인 키를 저장합니다.
  • Jetty.ssl.password 저장소 암호(키 저장소 파일의 액세스에 필요한 암호)는 키 저장소 명령의 -store pass 옵션에 제공된 암호와 같습니다.
  • Je tty.ssl.keypassword 키 암호(키 저장소에서 인증서의 키 항목에 액세스하는 데 사용되는 키 암호) (이는 키 저장소 명령의 -key pass 옵션에 제공된 암호와 동일합니다).

Camel 2.3 이후

  • org.eclipse.jetty.ssl.keystore 는 키 항목에 Jetty 서버의 자체 X.509 인증서가 포함된 Java 키 저장소 파일의 위치를 지정합니다. 키 항목은 X.509 인증서(effectively, 공개 키) 및 관련 개인 키를 저장합니다.
  • org.eclipse.jetty.ssl.password 저장소 암호를 저장합니다(키 저장소 명령의 - store pass 옵션에 제공된 암호와 동일).
  • org.eclipse.jetty.ssl.keypassword 키 암호(키 저장소에서 인증서의 키 항목에 액세스하는 데 사용되는 키 암호) (이는 키 저장소 명령의 -key pass 옵션에 제공된 암호와 동일합니다).

Jetty 끝점에서 SSL을 구성하는 방법에 대한 자세한 내용은 Jetty 사이트에서 다음 문서를 참조하십시오. http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

일부 SSL 속성은 Camel에 의해 직접 노출되지 않지만 Camel은 기본 SslSocketConnector를 노출하지 않으므로 클라이언트 인증서가 필요하거나 클라이언트가 인증서가 필요하지 않은 상호 인증에 대해ClientAuth와 같은 속성을 설정할 수 있습니다. 다양한 Camel 버전에는 약간의 차이가 있습니다.

최대 Camel 2.2

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.mortbay.jetty.security.SslSocketConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>
Copy to Clipboard Toggle word wrap

Camel 2.3, 2.4

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.eclipse.jetty.server.ssl.SslSocketConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>
Copy to Clipboard Toggle word wrap

* Camel 2.5에서 SslSelectChannelConnector *를 사용하도록 전환했습니다.

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectors">
        <map>
            <entry key="8043">
                <bean class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
                    <property name="password"value="..."/>
                    <property name="keyPassword"value="..."/>
                    <property name="keystore"value="..."/>
                    <property name="needClientAuth"value="..."/>
                    <property name="truststore"value="..."/>
                </bean>
            </entry>
        </map>
    </property>
</bean>
Copy to Clipboard Toggle word wrap

위의 맵에서 키로 사용하는 값은 수신 대기하도록 Jetty를 구성하는 포트입니다.

173.9.1. IBM Java에서 TLS 보안을 사용하여 camel-jetty9 구성

camel-jetty9 구성 요소의 기본 TLS 보안 설정은 IBM Java VM과 호환되지 않습니다. IBM Java의 모든 암호는 SSL_* 접두사로 시작하며, TLS 프로토콜의 암호도 SSL_* 로 시작합니다. Camel-jetty9 는 RFC Cipher Suite 이름만 지원하며 모든 SSL_* 암호 는 안전하지 않으며 제외됩니다. Jetty는 모든 SSL_* 암호를 제외하므로 TLS 1.2에서 사용할 수 있는 암호화가 제공되지 않으며 연결이 실패합니다. Jetty의 ssl 컨텍스트의 동작을 변경할 수있는 방법이 없기 때문에 해결방법은 Jetty9 구성 요소에서 기본 TLS 보안 구성을 재정의하는 것입니다. 이를 위해 Application.java 파일의 메서드 "sslContextParameters()"의 끝에 다음 코드를 추가합니다.

FilterParameters fp = new FilterParameters();
    fp.getInclude().add(".*");

    // Exclude weak / insecure ciphers
    fp.getExclude().add("^.*_(MD5|SHA|SHA1)$");
    // Exclude ciphers that don't support forward secrecy
    fp.getExclude().add("^TLS_RSA_.*$");
    // The following exclusions are present to cleanup known bad cipher
    // suites that may be accidentally included via include patterns.
    // The default enabled cipher list in Java will not include these
    // (but they are available in the supported list).
    /* SSL_ ciphers are not excluded
    fp.getExclude().add("^SSL_.*$"); */
    fp.getExclude().add("^.NULL.$");
    fp.getExclude().add("^.anon.$");

    p.setCipherSuitesFilter(fp);
Copy to Clipboard Toggle word wrap

이 코드는 모든 SSL_* 암호 제외를 제거하여 Jetty에 정의된 제외 암호를 재정의합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동