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);
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 ClipboardCopied!Toggle word wrapToggle overflow
일부 SSL 속성은 Camel에 의해 직접 노출되지 않지만 Camel은 기본 SslSocketConnector를 노출하지 않으므로 클라이언트 인증서가 필요하거나 클라이언트가 인증서가 필요하지 않은 상호 인증에 대해ClientAuth와 같은 속성을 설정할 수 있습니다. 다양한 Camel 버전에는 약간의 차이가 있습니다.
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);
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 ClipboardCopied!Toggle word wrapToggle overflow
이 코드는 모든 SSL_* 암호 제외를 제거하여 Jetty에 정의된 제외 암호를 재정의합니다.