5장. Camel CXF 구성 요소 보안
초록
이 장에서는 Camel CXF 프록시 데모를 시작점으로 사용하여 Camel CXF 엔드포인트에서 SSL/TLS 보안을 활성화하는 방법을 설명합니다. Camel CXF 구성 요소를 사용하면 Apache CXF 엔드포인트를 Apache Camel 경로에 추가할 수 있습니다. 이를 통해 Apache Camel에서 웹 서비스를 시뮬레이션하거나 WS 클라이언트와 웹 서비스 간에 경로를 인터푸핑하여 추가 처리(여기에 고려됨)를 수행할 수 있습니다.
5.1. Camel CXF 프록시 데모
5.1.1. 개요
OSGi에서 Camel CXF 엔드포인트를 보호하는 방법을 설명하기 위해 이 튜토리얼은 Camel CXF 프록시 인 Apache Camel의 독립 실행형 배포에서 제공되는 예를 기반으로 합니다. 그림 5.1. “Camel CXF 프록시 개요” 이 데모의 작동 방식에 대한 개요 제공
그림 5.1. Camel CXF 프록시 개요
RealWebServiceBean
에 의해 구현되는 보고서 사고는 사고(예: 트래픽 사고)의 세부 정보를 수신하고 클라이언트에 추적 코드를 반환합니다. 그러나 WS 클라이언트는 요청을 실제 웹 서비스로 직접 전송하는 대신 WS 클라이언트와 실제 웹 서비스 간에 서로 배치되는 Camel CXF 엔드포인트에 연결합니다. Apache Camel 경로는 실제 웹 서비스로 전달하기 전에 WSDL 메시지에서 일부 처리를 수행합니다.
SSL/TLS 보안을 활성화하는 경우 Poodle 취약점(CVE-2014-3566) 으로부터 보호하기 위해 SSLv3 프로토콜을 명시적으로 비활성화해야 합니다. 자세한 내용은 JBoss Fuse 6.x 및 JBoss A-MQ 6.x에서 SSLv3 비활성화 를 참조하십시오.
5.1.2. 수정
OSGi 컨텍스트에서 Camel CXF 엔드포인트에서 SSL/TLS를 활성화하는 방법을 설명하기 위해 이 장에서는 다음과 같이 기본 데모를 수정하는 방법에 대한 지침을 설명합니다.
- WS 클라이언트와 Camel CXF 끝점 간의 연결 시 SSL/TLS 보안이 활성화됩니다.
-
Apache Camel 경로와
RealWebServiceBean
Quarkus는 모두 OSGi 컨테이너에 배포됩니다.
5.1.3. 데모 코드 가져오기
Camel CXF 프록시 데모는 InstallDir/extras
디렉터리에 포함된 Apache Camel의 독립 실행형 배포에서만 사용할 수 있습니다. 표준 아카이브 유틸리티를 사용하여 Camel 아카이브 파일을 확장하고 파일 시스템의 편리한 위치로 콘텐츠를 추출합니다.
CamelInstallDir 에 Apache Camel을 설치했다고 가정하면 다음 디렉터리에서 Camel CXF 프록시 데모를 찾을 수 있습니다.
CamelInstallDir/examples/camel-example-cxf-proxy
5.1.4. 샘플 인증서 가져오기
이 데모에는 X.509 인증서가 필요합니다. 실제 배포에서는 개인 인증 기관을 사용하여 이러한 인증서를 직접 생성해야 합니다. 그러나 이 데모에서는 Apache CXF wsdl_first_http
예제의 일부 샘플 인증서를 사용합니다. 이 데모는 InstallDir/extras
디렉터리에 포함된 Apache CXF의 독립 실행형 배포에서 사용할 수 있습니다. 표준 아카이브 유틸리티를 사용하여 CXF 아카이브 파일을 확장하고 파일 시스템의 편리한 위치로 콘텐츠를 추출합니다.
CXFInstallDir 에 Apache CXF를 설치했다고 가정하면 다음 디렉터리에서 wsdl_first_http
데모를 찾을 수 있습니다.
CXFInstallDir/samples/wsdl_first_http
5.1.5. WSDL 계약의 물리적 부분
WSDL 계약의 물리적 부분은 wsdl:service
및 wsdl:port
요소를 나타냅니다. 이러한 요소는 특정 웹 서비스 끝점에 연결하는 데 필요한 전송 세부 정보를 지정합니다. 이 데모의 목적을 위해 이는 계약의 가장 흥미로운 부분이며 예 5.1. “ReportIncidentEndpointService WSDL Service” 에 표시됩니다.
예 5.1. ReportIncidentEndpointService WSDL Service
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
...
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://reportincident.example.camel.apache.org">
...
<!-- Service definition -->
<wsdl:service name="ReportIncidentEndpointService">
<wsdl:port name="ReportIncidentEndpoint" binding="tns:ReportIncidentBinding">
<soap:address location="http://localhost:9080/camel-example-cxf-proxy/webservices/incident"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
애플리케이션 코드가 주소 URL의 기본값을 재정의하므로 WSDL 계약( soap:address
요소의 위치
특성 값)에 나타나는 주소 URL은 중요하지 않습니다.
5.1.6. 자세한 내용은 WSDL 주소 지정
WS 클라이언트에는 WSDL 서비스 이름, WSDL 포트 이름 및 웹 서비스 의 주소 URL 이라는 세 가지 정보가 필요합니다. 다음 주소 지정 세부 사항은 프록시 웹 서비스 및 실제 웹 서비스에 연결하는 데 사용됩니다.
- WSDL 서비스 이름
WSDL 서비스의 전체 QName은 다음과 같습니다.
{http://reportincident.example.camel.apache.org}ReportIncidentEndpointService
- WSDL 포트 이름
WSDL 포트의 전체 QName은 다음과 같습니다.
{http://reportincident.example.camel.apache.org}ReportIncidentEndpoint
- 주소 URL
프록시 웹 서비스 끝점의 주소 URL(HTTPS 프로토콜 사용)은 다음과 같습니다.
https://localhost:9080/camel-example-cxf-proxy/webservices/incident
참고이전 주소는 번들의 Spring 구성 파일의
cxf:cxfEndpoint
요소,src/main/resources/META-INF/spring/camel-config.xml
을 사용하여reportIncident
scaling을 생성할 때 지정됩니다.실제 웹 서비스 끝점의 주소 URL(HTTP 프로토콜 사용)은 다음과 같습니다.
http://localhost:9081/real-webservice
참고이전 주소는 번들의 Spring 구성 파일인
src/main/resources/META-INF/spring/camel-config.xml
에realWebService
RAM이 생성될 때 지정됩니다.