6장. 메시지 보호
초록
이 장에서는 다음의 메시지 보호 메커니즘이 설명되어 있습니다: 도청(암호화 알고리즘 사용) 및 메시지 변조(메시지 다이제스트 알고리즘 사용)로부터 보호 보호는 다양한 수준의 세분성 및 다른 프로토콜 계층에 적용될 수 있습니다. 전송 계층에서는 메시지의 전체 콘텐츠에 보호를 적용할 수 있는 옵션이 있지만, Cryostat 계층에서 메시지의 다양한 부분(보조, 헤더 또는 첨부 파일)에 대한 보호를 적용할 수 있습니다.
6.1. 전송 계층 메시지 보호
6.1.1. 개요
전송 계층 메시지 보호는 전송 계층에서 제공하는 메시지 보호(암호화 및 서명)를 나타냅니다. 예를 들어 HTTPS는 SSL/TLS를 사용하여 암호화 및 메시지 서명 기능을 제공합니다. 실제로 WS-SecurityPolicy는 HTTPS 기능 세트에 많은 추가 기능을 추가하지 않습니다. HTTPS는 블루프린트 XML 구성을 사용하여 이미 완전히 구성할 수 있기 때문입니다( 3장. HTTPS 구성참조). 그러나 HTTPS에 대한 전송 바인딩 정책을 지정하면 WSDL 계약에 보안 요구 사항을 포함할 수 있다는 이점이 있습니다. 따라서 WSDL 계약의 사본을 가져오는 모든 클라이언트는 WSDL 계약의 엔드포인트에 대한 전송 계층 보안 요구 사항이 무엇인지 검색할 수 있습니다.
전송 계층에서 SSL/TLS 보안을 활성화하는 경우 Poodle 취약점 (CVE-2014-3566) 으로부터 보호하기 위해 SSLv3 프로토콜을 명시적으로 비활성화해야 합니다. 자세한 내용은 JBoss Fuse 6.x 및 JBoss A-MQ 6.x에서 SSLv3 비활성화 를 참조하십시오.
6.1.2. 사전 요구 사항
WS-SecurityPolicy를 사용하여 HTTPS 전송을 구성하는 경우 블루프린트 구성에서 HTTPS 보안을 적절하게 구성해야 합니다.
예 6.1. “블루프린트의 클라이언트 HTTPS 구성” HTTPS 전송 프로토콜을 사용하도록 클라이언트를 구성하는 방법을 보여줍니다. sec:keyManagers
요소는 클라이언트의 고유 인증서, alice.pfx
및 sec:trustManagers
요소는 신뢰할 수 있는 CA 목록을 지정합니다. http:conduit
요소의 name
속성은 엔드포인트 주소와 일치하도록 와일드카드를 사용하는 방법을 참조하십시오. 클라이언트 측에서 HTTPS를 구성하는 방법에 대한 자세한 내용은 3장. HTTPS 구성 을 참조하십시오.
예 6.1. 블루프린트의 클라이언트 HTTPS 구성
<beans xmlns="https://osgi.org/xmlns/blueprint/v1.0.0/" xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" ... > <http:conduit name="https://.*/UserNameOverTransport.*"> <http:tlsClientParameters disableCNCheck="true"> <sec:keyManagers keyPassword="password"> <sec:keyStore type="pkcs12" password="password" resource="certs/alice.pfx"/> </sec:keyManagers> <sec:trustManagers> <sec:keyStore type="pkcs12" password="password" resource="certs/bob.pfx"/> </sec:trustManagers> </http:tlsClientParameters> </http:conduit> ... </beans>
예 6.2. “블루프린트의 서버 HTTPS 구성” HTTPS 전송 프로토콜을 사용하도록 서버를 구성하는 방법을 보여줍니다. sec:keyManagers
요소는 서버의 고유 인증서인 bob.pfx
를 지정하고 sec:trustManagers
요소는 신뢰할 수 있는 CA 목록을 지정합니다. 서버 측에서 HTTPS를 구성하는 방법에 대한 자세한 내용은 3장. HTTPS 구성 을 참조하십시오.
예 6.2. 블루프린트의 서버 HTTPS 구성
<beans xmlns="https://osgi.org/xmlns/blueprint/v1.0.0/" xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" ... > <httpj:engine-factory id="tls-settings"> <httpj:engine port="9001"> <httpj:tlsServerParameters secureSocketProtocol="TLSv1"> <sec:keyManagers keyPassword="password"> <sec:keyStore type="pkcs12" password="password" resource="certs/bob.pfx"/> </sec:keyManagers> <sec:trustManagers> <sec:keyStore type="pkcs12" password="password" resource="certs/alice.pfx"/> </sec:trustManagers> </httpj:tlsServerParameters> </httpj:engine> </httpj:engine-factory> ... </beans>
6.1.3. 정책 제목
전송 바인딩 정책은 끝점 정책 제목에 적용해야 합니다( “끝점 정책 제목”참조). 예를 들어 ID가 있는 전송 바인딩 정책이 UserNameOverTransport_IPingService_policy
인 경우 다음과 같이 정책을 끝점 바인딩에 적용할 수 있습니다.
<wsdl:binding name="UserNameOverTransport_IPingService" type="i0:IPingService"> <wsp:PolicyReference URI="#UserNameOverTransport_IPingService_policy"/> ... </wsdl:binding>
6.1.4. 구문
TransportBinding
요소에는 다음과 같은 구문이 있습니다.
<sp:TransportBinding xmlns:sp="..." ... > <wsp:Policy xmlns:wsp="..."> <sp:TransportToken ... > <wsp:Policy> ... </wsp:Policy> ... </sp:TransportToken> <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite> <sp:Layout ... > ... </sp:Layout> ? <sp:IncludeTimestamp ... /> ? ... </wsp:Policy> ... </sp:TransportBinding>
6.1.5. 정책 샘플
예 6.3. “전송 바인딩의 예” HTTPS 전송( sp:HttpsToken
요소에 의해 지정됨) 및 256비트 알고리즘 모음( sp:Basic256
요소에서 지정)을 사용하여 기밀성 및 무결성을 필요로 하는 전송 바인딩의 예를 보여줍니다.
예 6.3. 전송 바인딩의 예
<wsp:Policy wsu:Id="UserNameOverTransport_IPingService_policy"> <wsp:ExactlyOne> <wsp:All> <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy> <sp:TransportToken> <wsp:Policy> <sp:HttpsToken RequireClientCertificate="false"/> </wsp:Policy> </sp:TransportToken> <sp:AlgorithmSuite> <wsp:Policy> <sp:Basic256/> </wsp:Policy> </sp:AlgorithmSuite> <sp:Layout> <wsp:Policy> <sp:Lax/> </wsp:Policy> </sp:Layout> <sp:IncludeTimestamp/> </wsp:Policy> </sp:TransportBinding> ... <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy> <sp:MustSupportRefKeyIdentifier/> <sp:MustSupportRefIssuerSerial/> </wsp:Policy> </sp:Wss10> </wsp:All> </wsp:ExactlyOne> </wsp:Policy>
6.1.6. sp:TransportToken
이 요소에는 두 가지 효과가 있습니다. 특정 유형의 보안 토큰이 필요하며 전송의 보안 방법을 나타냅니다. 예를 들어 sp:HttpsToken
을 지정하면 연결이 HTTPS 프로토콜에 의해 보호되고 보안 토큰이 X.509 인증서임을 나타냅니다.
6.1.7. sp:AlgorithmSuite
이 요소는 서명 및 암호화에 사용할 암호화 알고리즘 제품군을 지정합니다. 사용 가능한 알고리즘 모음에 대한 자세한 내용은 6.2.7절. “알고리즘 모음 지정” 을 참조하십시오.
6.1.8. sp:Layout
이 요소는 보안 헤더가 Cryostat 메시지에 추가되는 순서에 조건을 적용할지 여부를 지정합니다. sp:Lax
요소는 보안 헤더 순서에 조건이 적용되지 않도록 지정합니다. sp:Lax
의 대안은 sp:
Ssimplet ,sp:LaxTimestampFirst
또는 sp:LaxTimestampLast
입니다.
6.1.9. sp:IncludeTimestamp
이 요소가 정책에 포함된 경우 런타임은 wsu:Timestamp
요소를 wsse:Security
헤더에 추가합니다. 기본적으로 타임스탬프는 포함되지 않습니다.
6.1.10. sp:MustSupportRefKeyIdentifier
이 요소는 WS-Security 1.0 사양에 지정된 대로 보안 런타임에서 키 식별자 토큰 참조를 처리할 수 있어야 함을 지정합니다. 키 식별자는 서명 또는 암호화 요소 내에서 사용될 수 있는 키 토큰을 식별하는 메커니즘입니다. Apache CXF에는 이 기능이 필요합니다.
6.1.11. sp:MustSupportRefIssuerSerial
이 요소는 WS-Security 1.0 사양에 지정된 대로 보안 런타임에서 발급자 및 직렬 번호 토큰 참조를 처리할 수 있어야 함을 지정합니다. 발행자 및 일련 번호는 서명 또는 암호화 요소 내에서 사용할 수 있는 키 토큰을 식별하는 메커니즘입니다. Apache CXF에는 이 기능이 필요합니다.