6.2. Cryostat 메시지 보호

6.2.1. Cryostat 메시지 보호 소개

6.2.1.1. 개요

전송 계층 대신 Cryostat 인코딩 계층에서 메시지 보호를 적용하면 보다 유연한 보호 정책에 액세스할 수 있습니다. 특히 Cryostat 계층은 메시지 구조를 인식하기 때문에 실제로 보호가 필요한 헤더를 암호화하고 서명하여 세분화된 수준에서 보호를 적용할 수 있습니다. 이 기능을 사용하면 보다 정교한 다중 계층 아키텍처를 지원할 수 있습니다. 예를 들어 하나의 일반 텍스트 헤더는 중간 계층(보안 인트라넷 내에 위치)을 대상으로 할 수 있지만 암호화된 헤더는 최종 대상(비보안 공용 네트워크를 통해 연결됨)을 대상으로 할 수 있습니다.

6.2.1.2. 보안 바인딩

WS-SecurityPolicy 사양에 설명된 대로 다음 바인딩 유형 중 하나를 사용하여 Cryostat 메시지를 보호할 수 있습니다.

  • SP:TransportBinding- 전송 바인딩 은 전송 수준에서 제공되는 메시지 보호(예: HTTPS를 통해)를 나타냅니다. 이 바인딩은 ESP뿐만 아니라 모든 메시지 유형을 보호하는 데 사용할 수 있으며 이전 섹션인 6.1절. “전송 계층 메시지 보호” 에 자세히 설명되어 있습니다.
  • SP :AsymmetricBinding-AsymmetricBinding은 asymmetric 암호화(공개 키 암호화라고도 함)를 사용하여 보호 기능이 구현되는 Cryostat 메시지 인코딩 계층에서 제공되는 메시지 보호를 나타냅니다.
  • SP:SymmetricBinding- 대칭 바인딩 은 대칭 암호화를 사용하여 보호 기능이 구현되는 Cryostat 메시지 인코딩 계층에서 제공되는 메시지 보호를 나타냅니다. 대칭 암호화의 예는 WS-SecureConversation 및 Kerberos 토큰에서 제공하는 토큰입니다.

6.2.1.3. 메시지 보호

다음과 같은 보호 특성을 메시지의 일부 또는 전체에 적용할 수 있습니다.

  • 암호화.
  • 서명.
  • signing+암호화(암호화 전에 서명).
  • 암호화+ 서명(서 서명하기 전에 암호화).

이러한 보호 특성은 단일 메시지에서 임의로 결합될 수 있습니다. 따라서 메시지의 일부만 암호화할 수 있지만 메시지의 다른 부분은 서명만 되고 메시지의 다른 부분은 서명하고 암호화할 수 있습니다. 또한 메시지의 일부를 보호되지 않은 상태로 둘 수도 있습니다.

메시지 보호를 적용하기 위한 가장 유연한 옵션은 Cryostat 계층(sp:AsymmetricBinding 또는 sp:SymmetricBinding)에서 사용할 수 있습니다. 전송 계층(sp:TransportBinding)은 전체 메시지에 대한 보호를 적용하는 옵션만 제공합니다.

6.2.1.4. 보호할 메시지의 일부를 지정

현재 Apache CXF를 사용하면 ESP 메시지의 다음 부분에 서명하거나 암호화할 수 있습니다.

  • body-point 메시지에서 soap:BODY 요소 전체에 서명 및/또는 암호화합니다.
  • header(s)-sign 및/또는 하나 이상의 Cryostat 메시지 헤더를 암호화합니다. 각 헤더에 대한 보호 품질을 개별적으로 지정할 수 있습니다.
  • 첨부 파일- Loki 메시지의 모든 첨부 파일을 서명 및/또는 암호화합니다.
  • elements-chunk 메시지의 특정 XML 요소를 서명 및/또는 암호화합니다.

6.2.1.5. 구성의 역할

메시지 보호에 필요한 모든 세부 정보가 정책을 사용하여 지정되는 것은 아닙니다. 정책은 주로 서비스에 필요한 보호의 품질을 지정하는 방법을 제공하기 위한 것입니다. 보안 토큰, 암호 등과 같은 지원 세부 정보는 별도의 제품별 메커니즘을 사용하여 제공해야 합니다. 실제로 Apache CXF에서는 블루프린트 XML 구성 파일에 일부 지원 구성 세부 정보를 제공해야 합니다. 자세한 내용은 6.2.6절. “암호화 키 및 서명 키 제공”의 내용을 참조하십시오.

6.2.2. 기본 서명 및 암호화 시나리오

6.2.2.1. 개요

여기에 설명된 시나리오는 클라이언트-서버 애플리케이션입니다. 이 애플리케이션에서는 비대칭 바인딩 정책이 클라이언트와 서버 간에 전달되는 메시지의#159 본문을 암호화하고 서명하도록 설정되어 있습니다.

6.2.2.2. 시나리오 예

그림 6.1. “기본 서명 및 암호화 시나리오” 비대칭 바인딩 정책을 WSDL 계약의 끝점과 연결하여 지정하는 기본 서명 및 암호화 시나리오에 대한 개요를 보여줍니다.

그림 6.1. 기본 서명 및 암호화 시나리오

메시지 보호 01

6.2.2.3. 시나리오 단계

그림 6.1. “기본 서명 및 암호화 시나리오” 의 클라이언트가 수신자의 끝점에서 동기 작업을 호출하면 요청 및 응답 메시지가 다음과 같이 처리됩니다.

  1. 발신 요청 메시지가 WS-SecurityPolicy 핸들러를 통과할 때 처리기는 클라이언트의 비대칭 바인딩 정책에 지정된 정책에 따라 메시지를 처리합니다. 이 예에서 처리기는 다음 처리를 수행합니다.

    1. Cryostat 공개 키를 사용하여 메시지의 Cryostat 본문을 암호화합니다.
    2. Alice의 개인 키를 사용하여 암호화된 Cryostat 본문에 서명합니다.
  2. 들어오는 요청 메시지가 서버의 WS-SecurityPolicy 처리기를 통과할 때 처리기는 서버의 비대칭 바인딩 정책에 지정된 정책에 따라 메시지를 처리합니다. 이 예에서 처리기는 다음 처리를 수행합니다.

    1. Alice의 공개 키를 사용하여 서명을 확인합니다.
    2. Cryostat의 개인 키를 사용하여 Cryostat 본문의 암호를 해독합니다.
  3. 발신 응답 메시지가 서버의 WS-SecurityPolicy 처리기를 통해 다시 전달될 때 처리기는 다음 처리를 수행합니다.

    1. Alice의 공개 키를 사용하여 메시지의 Cryostat 본문을 암호화합니다.
    2. Cryostat의 개인 키를 사용하여 암호화된 Cryostat 본문에 서명합니다.
  4. 들어오는 응답 메시지가 클라이언트의 WS-SecurityPolicy 처리기를 통해 다시 전달될 때 처리기는 다음 처리를 수행합니다.

    1. Cryostat 공개 키를 사용하여 서명을 확인합니다.
    2. Alice의 개인 키를 사용하여 Cryostat 본문의 암호를 해독합니다.

6.2.3. AsymmetricBinding 정책 지정

6.2.3.1. 개요

비대칭 바인딩 정책은 비대칭 키 알고리즘(공용/개인 키 조합)을 사용하여 Cryostat 메시지 보호를 구현하며 Loki 계층에서 이를 수행합니다. 비대칭 바인딩에서 사용하는 암호화 및 서명 알고리즘은 SSL/TLS에서 사용하는 암호화 및 서명 알고리즘과 유사합니다. 그러나 중요한 차이점은 Cryostat 메시지 보호를 통해 메시지의 특정 부분을 선택하여 보호 할 수 있다는 것입니다 (예: 개별 헤더, 본문 또는 첨부 파일) 반면 전송 계층 보안은 전체 메시지에서만 작동할 수 있다는 것입니다.

6.2.3.2. 정책 제목

비대칭 바인딩 정책은 끝점 정책 제목에 적용해야 합니다( “끝점 정책 제목”참조). 예를 들어 ID가 있는 비대칭 바인딩 정책이 경우 MutualCertificate10SignEncrypt_IPingService_policy 에서는 다음과 같이 정책을 끝점 바인딩에 적용할 수 있습니다.

<wsdl:binding name="MutualCertificate10SignEncrypt_IPingService" type="i0:IPingService">
  <wsp:PolicyReference URI="#MutualCertificate10SignEncrypt_IPingService_policy"/>
  ...
</wsdl:binding>

6.2.3.3. 구문

AsymmetricBinding 요소에는 다음과 같은 구문이 있습니다.

<sp:AsymmetricBinding xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
  (
   <sp:InitiatorToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorToken>
  ) | (
   <sp:InitiatorSignatureToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorSignatureToken>
   <sp:InitiatorEncryptionToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorEncryptionToken>
  )
  (
   <sp:RecipientToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientToken>
  ) | (
   <sp:RecipientSignatureToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientSignatureToken>
   <sp:RecipientEncryptionToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientEncryptionToken>
  )
   <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite>
   <sp:Layout ... > ... </sp:Layout> ?
   <sp:IncludeTimestamp ... /> ?
   <sp:EncryptBeforeSigning ... /> ?
   <sp:EncryptSignature ... /> ?
   <sp:ProtectTokens ... /> ?
   <sp:OnlySignEntireHeadersAndBody ... /> ?
   ...
  </wsp:Policy>
  ...
</sp:AsymmetricBinding>

6.2.3.4. 정책 샘플

예 6.4. “Asymmetric Binding의 예” 서명 및 암호화를 사용한 메시지 보호를 지원하는 비대칭 바인딩의 예를 보여줍니다. 여기서 서명 및 암호화는 공개/개인 키(즉, 비대칭 암호화 사용) 쌍을 사용하여 수행됩니다. 그러나 이 예제에서는 서명하고 암호화해야 하는 메시지의 부분을 지정하지 않습니다. 이를 수행하는 방법에 대한 자세한 내용은 6.2.5절. “암호화 및 서명할 메시지의 일부 지정” 을 참조하십시오.

예 6.4. Asymmetric Binding의 예

<wsp:Policy wsu:Id="MutualCertificate10SignEncrypt_IPingService_policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:AsymmetricBinding
          xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:InitiatorToken>
            <wsp:Policy>
              <sp:X509Token
                  sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                <wsp:Policy>
                  <sp:WssX509V3Token10/>
                </wsp:Policy>
              </sp:X509Token>
            </wsp:Policy>
          </sp:InitiatorToken>
          <sp:RecipientToken>
            <wsp:Policy>
              <sp:X509Token
                  sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                <wsp:Policy>
                  <sp:WssX509V3Token10/>
                </wsp:Policy>
              </sp:X509Token>
            </wsp:Policy>
          </sp:RecipientToken>
          <sp:AlgorithmSuite>
            <wsp:Policy>
              <sp:Basic256/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          <sp:Layout>
            <wsp:Policy>
              <sp:Lax/>
            </wsp:Policy>
          </sp:Layout>
          <sp:IncludeTimestamp/>
          <sp:EncryptSignature/>
          <sp:OnlySignEntireHeadersAndBody/>
        </wsp:Policy>
      </sp:AsymmetricBinding>
      <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.2.3.5. sp:InitiatorToken

이니시에이터 토큰은 이니시에이터 가 소유한 공개/개인 키 쌍을 나타냅니다. 이 토큰은 다음과 같이 사용됩니다.

  • 토큰의 개인 키는 이니시에이터에서 수신자로 전송된 메시지에 서명합니다.
  • 토큰의 공개 키는 수신자가 수신한 서명을 확인합니다.
  • 토큰의 공개 키는 수신자에서 이니시에이터로 전송된 메시지를 암호화합니다.
  • 토큰의 개인 키는 이니시에이터가 수신한 메시지를 해독합니다.

혼동적으로 이 토큰은 이니시에이터 수신자가 모두 사용합니다. 그러나 초기자만 개인 키에 액세스할 수 있으므로 이러한 경우 토큰은 이니시에이터에 속한다고 할 수 있습니다. 6.2.2절. “기본 서명 및 암호화 시나리오” 에서 이니시에이터 토큰은 인증서인 Alice입니다.

이 요소에는 표시된 대로 중첩된 wsp:Policy 요소 및 sp:X509Token 요소가 포함되어야 합니다. sp:IncludeToken 속성은 AlwaysToRecipient 로 설정되어 있으며, 이는 수신자에게 전송되는 모든 메시지와 함께 Alice의 공개 키를 포함하도록 런타임에 지시합니다. 이 옵션은 수신자가 이니시에이터의 인증서를 사용하여 인증을 수행하려는 경우 유용합니다. 가장 깊이 중첩된 요소인 WssX509V3Token10 은 선택 사항입니다. X.509 인증서가 준수해야 하는 사양 버전을 지정합니다. 여기에서는 다음 대안(또는 none)을 지정할 수 있습니다.

sp:WssX509V3Token10
이 선택적 요소는 X509 버전 3 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509Pkcs7Token10
이 선택적 요소는 X509 PKCS7 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509PkiPathV1Token10
이 선택적 요소는 X509 PKI 경로 버전 1 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509V1Token11
이 선택적 요소는 X509 버전 1 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509V3Token11
이 선택적 요소는 X509 버전 3 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509Pkcs7Token11
이 선택적 요소는 X509 PKCS7 토큰을 사용해야 함을 나타내는 정책 어설션입니다.
sp:WssX509PkiPathV1Token11
이 선택적 요소는 X509 PKI 경로 버전 1 토큰을 사용해야 함을 나타내는 정책 어설션입니다.

6.2.3.6. sp:RecipientToken

수신자 토큰은 수신자 가 소유한 공개/개인 키 쌍을 나타냅니다. 이 토큰은 다음과 같이 사용됩니다.

  • 토큰의 공개 키는 이니시에이터에서 수신자로 전송된 메시지를 암호화합니다.
  • 토큰의 개인 키는 수신자가 수신한 메시지를 해독합니다.
  • 토큰의 개인 키는 수신자에서 이니시에이터로 전송된 메시지에 서명합니다.
  • 토큰의 공개 키는 이니시에이터에서 수신한 서명을 확인합니다.

혼동적으로 이 토큰은 수신자 이니시에이터에서 모두 사용됩니다. 그러나 수신자만 개인 키에 액세스할 수 있으므로 이러한 경우 토큰은 수신자에 속한다고 할 수 있습니다. 6.2.2절. “기본 서명 및 암호화 시나리오” 에서 수신자 토큰은 인증서인 Cryostat입니다.

이 요소에는 표시된 대로 중첩된 wsp:Policy 요소 및 sp:X509Token 요소가 포함되어야 합니다. sp:IncludeToken 속성은 응답 메시지에 Cryostat의 공개 키를 포함할 필요가 없기 때문에 Never 로 설정됩니다.

참고

Apache CXF에서는 Cryostat의 인증서와 Alice의 인증서가 모두 연결 종료 시 제공되기 때문에 message에 Cryostat 또는 Alice의 토큰을 보낼 필요가 없습니다. 6.2.6절. “암호화 키 및 서명 키 제공” 참조.

6.2.3.7. sp:AlgorithmSuite

이 요소는 서명 및 암호화에 사용할 암호화 알고리즘 제품군을 지정합니다. 사용 가능한 알고리즘 모음에 대한 자세한 내용은 6.2.7절. “알고리즘 모음 지정” 을 참조하십시오.

6.2.3.8. sp:Layout

이 요소는 보안 헤더가 Cryostat 메시지에 추가되는 순서에 조건을 적용할지 여부를 지정합니다. sp:Lax 요소는 보안 헤더 순서에 조건이 적용되지 않도록 지정합니다. sp:Lax 의 대안은 sp: Ssimplet ,sp:LaxTimestampFirst 또는 sp:LaxTimestampLast 입니다.

6.2.3.9. sp:IncludeTimestamp

이 요소가 정책에 포함된 경우 런타임은 wsu:Timestamp 요소를 wsse:Security 헤더에 추가합니다. 기본적으로 타임스탬프는 포함되지 않습니다.

6.2.3.10. sp:EncryptBeforeSigning

메시지 부분에 암호화 및 서명이 모두 적용되는 경우 이러한 작업이 수행되는 순서를 지정해야 합니다. 기본 순서는 암호화하기 전에 서명하는 것입니다. 그러나 이 요소를 비대칭 정책에 포함하는 경우 서명 전에 암호화하도록 순서가 변경됩니다.

참고

암시적으로 이 요소는 암호 해독 및 서명 확인 작업의 순서에도 영향을 미칩니다. 예를 들어, 암호화하기 전에 메시지 발신자가 서명하는 경우 메시지의 수신자는 서명을 확인하기 전에 암호를 해독해야 합니다.

6.2.3.11. sp:EncryptSignature

이 요소는 메시지 서명이 6.2.6절. “암호화 키 및 서명 키 제공”에 설명된 대로 지정된 암호화 토큰에 의해 암호화되도록 지정합니다. 기본값은 false입니다.

참고

메시지 서명 은 메시지 본문, 메시지 헤더 또는 개별 요소와 같은 메시지의 다양한 부분에 서명하여 직접 얻은 서명입니다( 6.2.5절. “암호화 및 서명할 메시지의 일부 지정”참조). WS-SecurityPolicy 사양은 기본 서명에 서명 하는 데 사용되는 지원 토큰의 개념도 지원하므로 메시지 서명을 기본 서명이라고 합니다. 따라서 sp:EndorsingTokens 요소가 끝점에 적용되는 경우 메시지 자체에 서명하는 기본 서명과 기본 서명에 서명하는 보조 서명이라는 서명 체인이 있을 수 있습니다.

다양한 종류의 지원 토큰에 대한 자세한 내용은 “SupportingTokens 어설션” 을 참조하십시오.

6.2.3.12. sp:ProtectTokens

이 요소는 서명이 해당 서명을 생성하는 데 사용되는 토큰을 포함해야 함을 지정합니다. 기본값은 false입니다.

6.2.3.13. sp:OnlySignEntireHeadersAndBody

이 요소는 서명이 전체 본문 또는 전체 헤더에 적용할 수 있고 본문의 하위 요소 또는 헤더의 하위 요소에만 적용할 수 있도록 지정합니다. 이 옵션을 활성화하면 sp:Signed Cryostats 어설션을 효과적으로 사용할 수 없습니다( 6.2.5절. “암호화 및 서명할 메시지의 일부 지정”참조).

6.2.4. SymmetricBinding 정책 지정

6.2.4.1. 개요

대칭 바인딩 정책은 대칭 키 알고리즘(공유 비밀 키)을 사용하여 Cryostat 메시지 보호를 구현하며 Loki 계층에서 이를 수행합니다. 대칭 바인딩의 예로는 Kerberos 프로토콜 및 WS-SecureConversation 프로토콜이 있습니다.

참고

현재 Apache CXF는 대칭 바인딩에서 WS-SecureConversation 토큰 지원합니다.

6.2.4.2. 정책 제목

대칭 바인딩 정책은 끝점 정책 주체에 적용해야 합니다( “끝점 정책 제목”참조). 예를 들어 ID가 있는 대칭 바인딩 정책이 SecureConversation_MutualCertificate10SignEncrypt_IPingService_policy 인 경우 다음과 같이 정책을 엔드포인트 바인딩에 적용할 수 있습니다.

<wsdl:binding name="SecureConversation_MutualCertificate10SignEncrypt_IPingService" type="i0:IPingService">
  <wsp:PolicyReference URI="#SecureConversation_MutualCertificate10SignEncrypt_IPingService_policy"/>
  ...
</wsdl:binding>

6.2.4.3. 구문

SymmetricBinding 요소에는 다음과 같은 구문이 있습니다.

<sp:SymmetricBinding xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
  (
   <sp:EncryptionToken ... >
     <wsp:Policy> ... </wsp:Policy>
   </sp:EncryptionToken>
   <sp:SignatureToken ... >
     <wsp:Policy> ... </wsp:Policy>
   </sp:SignatureToken>
  ) | (
   <sp:ProtectionToken ... >
     <wsp:Policy> ... </wsp:Policy>
   </sp:ProtectionToken>
  )
   <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite>
   <sp:Layout ... > ... </sp:Layout> ?
   <sp:IncludeTimestamp ... /> ?
   <sp:EncryptBeforeSigning ... /> ?
   <sp:EncryptSignature ... /> ?
   <sp:ProtectTokens ... /> ?
   <sp:OnlySignEntireHeadersAndBody ... /> ?
   ...
  </wsp:Policy>
  ...
</sp:SymmetricBinding>

6.2.4.4. 정책 샘플

예 6.5. “Symmetric Binding의 예” 서명 및 암호화를 사용한 메시지 보호를 지원하는 대칭 바인딩의 예를 보여줍니다. 여기서 서명 및 암호화는 단일 대칭 키(즉, 대칭 암호화 사용)를 사용하여 수행됩니다. 그러나 이 예제에서는 서명하고 암호화해야 하는 메시지의 부분을 지정하지 않습니다. 이를 수행하는 방법에 대한 자세한 내용은 6.2.5절. “암호화 및 서명할 메시지의 일부 지정” 을 참조하십시오.

예 6.5. Symmetric Binding의 예

<wsp:Policy wsu:Id="SecureConversation_MutualCertificate10SignEncrypt_IPingService_policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:ProtectionToken>
            <wsp:Policy>
              <sp:SecureConversationToken>
                ...
              </sp:SecureConversationToken>
            </wsp:Policy>
          </sp:ProtectionToken>
          <sp:AlgorithmSuite>
            <wsp:Policy>
              <sp:Basic256/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          <sp:Layout>
            <wsp:Policy>
              <sp:Lax/>
            </wsp:Policy>
          </sp:Layout>
          <sp:IncludeTimestamp/>
          <sp:EncryptSignature/>
          <sp:OnlySignEntireHeadersAndBody/>
        </wsp:Policy>
      </sp:SymmetricBinding>
      <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.2.4.5. sp:ProtectionToken

이 요소는 메시지에 서명하고 암호화하는 데 사용할 대칭 토큰을 지정합니다. 예를 들어 여기에 WS-SecureConversation 토큰을 지정할 수 있습니다.

작업에 서명 및 암호화에 고유 토큰을 사용하려면 이 요소 대신 sp:SignatureToken 요소와 sp:EncryptionToken 요소를 사용합니다.

6.2.4.6. sp:SignatureToken

이 요소는 메시지 서명에 사용할 대칭 토큰을 지정합니다. sp:EncryptionToken 요소와 함께 사용해야 합니다.

6.2.4.7. sp:EncryptionToken

이 요소는 메시지를 암호화하는 데 사용할 대칭 토큰을 지정합니다. sp:SignatureToken 요소와 함께 사용해야 합니다.

6.2.4.8. sp:AlgorithmSuite

이 요소는 서명 및 암호화에 사용할 암호화 알고리즘 제품군을 지정합니다. 사용 가능한 알고리즘 모음에 대한 자세한 내용은 6.2.7절. “알고리즘 모음 지정” 을 참조하십시오.

6.2.4.9. sp:Layout

이 요소는 보안 헤더가 Cryostat 메시지에 추가되는 순서에 조건을 적용할지 여부를 지정합니다. sp:Lax 요소는 보안 헤더 순서에 조건이 적용되지 않도록 지정합니다. sp:Lax 의 대안은 sp: Ssimplet ,sp:LaxTimestampFirst 또는 sp:LaxTimestampLast 입니다.

6.2.4.10. sp:IncludeTimestamp

이 요소가 정책에 포함된 경우 런타임은 wsu:Timestamp 요소를 wsse:Security 헤더에 추가합니다. 기본적으로 타임스탬프는 포함되지 않습니다.

6.2.4.11. sp:EncryptBeforeSigning

메시지 부분에 암호화 및 서명이 모두 적용되면 이러한 작업이 수행되는 순서를 지정해야 합니다. 기본 순서는 암호화하기 전에 서명하는 것입니다. 그러나 대칭 정책에 이 요소를 포함하는 경우 서명 전에 암호화하도록 순서가 변경됩니다.

참고

암시적으로 이 요소는 암호 해독 및 서명 확인 작업의 순서에도 영향을 미칩니다. 예를 들어, 암호화하기 전에 메시지 발신자가 서명하는 경우 메시지의 수신자는 서명을 확인하기 전에 암호를 해독해야 합니다.

6.2.4.12. sp:EncryptSignature

이 요소는 메시지 서명이 암호화되어야 함을 지정합니다. 기본값은 false입니다.

6.2.4.13. sp:ProtectTokens

이 요소는 서명이 해당 서명을 생성하는 데 사용되는 토큰을 포함해야 함을 지정합니다. 기본값은 false입니다.

6.2.4.14. sp:OnlySignEntireHeadersAndBody

이 요소는 서명이 전체 본문 또는 전체 헤더에 적용할 수 있고 본문의 하위 요소 또는 헤더의 하위 요소에만 적용할 수 있도록 지정합니다. 이 옵션을 활성화하면 sp:Signed Cryostats 어설션을 효과적으로 사용할 수 없습니다( 6.2.5절. “암호화 및 서명할 메시지의 일부 지정”참조).

6.2.5. 암호화 및 서명할 메시지의 일부 지정

6.2.5.1. 개요

암호화 및 서명은 각각 기밀성과 무결성이라는 두 가지 종류의 보호를 제공합니다. WS-SecurityPolicy 보호 어설션은 보호 대상 메시지의 일부를 지정하는 데 사용됩니다. 보호 메커니즘에 대한 자세한 내용은 관련 바인딩 정책에 별도로 지정됩니다(x6.2.3절. “AsymmetricBinding 정책 지정”, 6.2.4절. “SymmetricBinding 정책 지정”, 6.1절. “전송 계층 메시지 보호”참조).

여기에 설명된 보호 어설션은 Cryostat 메시지의 기능에 적용되기 때문에 issuer security와 함께 사용하기 위한 것입니다. 물론 이러한 정책은 특정 부분이 아닌 전체 메시지에 보호를 적용하는 전송 바인딩(예: HTTPS)에 의해 충족될 수 있습니다.

6.2.5.2. 정책 제목

보호 어설션은 메시지 정책 주체에 적용해야 합니다( “메시지 정책 제목”참조). 즉, WSDL 바인딩의 wsdl:input,wsdl:output 또는 wsdl:fault 요소 내에 배치해야 합니다. 예를 들어 ID가 있는 보호 정책인 MutualCertificate10SignEncrypt_IPingService_header_Input_policy 인 경우 다음과 같이 정책을 wsdl:input 메시지 부분에 적용할 수 있습니다.

<wsdl:operation name="header">
  <soap:operation soapAction="http://InteropBaseAddress/interop/header" style="document"/>
  <wsdl:input name="headerRequest">
    <wsp:PolicyReference
        URI="#MutualCertificate10SignEncrypt_IPingService_header_Input_policy"/>
      <soap:header message="i0:headerRequest_Headers" part="CustomHeader" use="literal"/>
      <soap:body use="literal"/>
    </wsdl:input>
    ...
</wsdl:operation>

6.2.5.3. 보호 어설션

다음 WS-SecurityPolicy 보호 어설션은 Apache CXF에서 지원합니다.

  • SignedParts
  • EncryptedParts
  • SignedElements
  • EncryptedElements
  • ContentEncryptedElements
  • RequiredElements
  • RequiredParts

6.2.5.4. 구문

SignedParts 요소에는 다음과 같은 구문이 있습니다.

<sp:SignedParts xmlns:sp="..." ... >
  <sp:Body />?
  <sp:Header Name="xs:NCName"? Namespace="xs:anyURI" ... />*
  <sp:Attachments />?
  ...
</sp:SignedParts>

EncryptedParts 요소에는 다음과 같은 구문이 있습니다.

<sp:EncryptedParts xmlns:sp="..." ... >
  <sp:Body/>?
  <sp:Header Name="xs:NCName"? Namespace="xs:anyURI" ... />*
  <sp:Attachments />?
  ...
</sp:EncryptedParts>

6.2.5.5. 정책 샘플

예 6.6. “무결성 및 암호화 정책 지원” 두 가지 보호 어설션, 즉 서명된 부분 어설션 및 암호화된 부분 어설션을 결합하는 정책을 표시합니다. 이 정책이 메시지 부분에 적용되면 영향을 받는 메시지 본문이 서명되고 암호화됩니다. 또한 CustomHeader 라는 메시지 헤더가 서명됩니다.

예 6.6. 무결성 및 암호화 정책 지원

<wsp:Policy wsu:Id="MutualCertificate10SignEncrypt_IPingService_header_Input_policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <sp:Body/>
                <sp:Header Name="CustomHeader" Namespace="http://InteropBaseAddress/interop"/>
            </sp:SignedParts>
            <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <sp:Body/>
            </sp:EncryptedParts>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

6.2.5.6. sp:Body

이 요소는 보호(암호화 또는 서명)가 메시지의 본문에 적용되도록 지정합니다. 보호는 전체 메시지 본문(즉, soap:Body 요소, 해당 특성 및 해당 콘텐츠)에 적용됩니다.

6.2.5.7. sp:Header

이 요소는 Name 특성 및 Namespace 특성을 사용하여 헤더의 로컬 이름으로 지정된 Cryostat 헤더에 보호가 적용되도록 지정합니다. 보호는 특성 및 해당 콘텐츠를 포함하여 전체 메시지 헤더에 적용됩니다.

6.2.5.8. SP:Attachments

이 요소는 Attachments(SwA) 첨부 파일이 있는 모든 #159가 보호되도록 지정합니다.

6.2.6. 암호화 키 및 서명 키 제공

6.2.6.1. 개요

표준 WS-SecurityPolicy 정책은 보안 요구 사항을 일부 세부적으로 지정하도록 설계되었습니다(예: 보안 프로토콜, 보안 알고리즘, 토큰 유형, 인증 요구 사항 등)은 모두 설명되어 있습니다. 그러나 표준 정책 어설션은 키 및 자격 증명과 같은 관련 보안 데이터를 지정하기 위한 메커니즘을 제공하지 않습니다. WS-SecurityPolicy는 독점 메커니즘을 통해 필요한 보안 데이터를 제공할 것으로 예상합니다. Apache CXF에서는 블루프린트 XML 구성을 통해 관련 보안 데이터가 제공됩니다.

6.2.6.2. 암호화 키 및 서명 키 구성

클라이언트의 요청 컨텍스트 또는 끝점 컨텍스트에서 속성을 설정하여 애플리케이션의 암호화 키 및 서명 키를 지정할 수 있습니다( “블루프린트 구성에 암호화 및 서명 속성 추가”참조). 설정할 수 있는 속성은 표 6.1. “암호화 및 서명 속성” 에 표시됩니다.

표 6.1. 암호화 및 서명 속성

속성설명

security.signature.properties

WSS4J 속성 파일/오브젝트에 서명 키 저장소를 구성하기 위한 WSS4J 속성 파일/오브젝트(암호 해독에도 사용됨) 및 Crypto 오브젝트입니다.

security.signature.username

(선택 사항) 사용할 서명 키 저장소에 있는 키의 사용자 이름 또는 별칭입니다. 지정하지 않으면 속성 파일에 설정된 별칭이 사용됩니다. 또한 설정되지 않고 키 저장소에 단일 키만 포함된 경우 해당 키가 사용됩니다.

security.encryption.properties

WSS4J 속성 파일/오브젝트에 암호화 키 저장소를 구성하기 위한 WSS4J 속성(서명 확인에도 사용됨) 및 Crypto 오브젝트입니다.

security.encryption.username

(선택 사항) 사용할 암호화 키 저장소에 있는 키의 사용자 이름 또는 별칭입니다. 지정하지 않으면 속성 파일에 설정된 별칭이 사용됩니다. 또한 설정되지 않고 키 저장소에 단일 키만 포함된 경우 해당 키가 사용됩니다.

이전 속성의 이름은 사용되는 내용을 정확하게 반영하지 않기 때문에 잘 선택되지 않습니다. security.signature.properties 로 지정된 키는 서명 암호 해독에 실제로 사용됩니다. security.encryption.properties 로 지정된 키는 실제로 서명 암호화 검증에 사용됩니다.

6.2.6.3. 블루프린트 구성에 암호화 및 서명 속성 추가

Apache CXF 애플리케이션에서 WS-Policy 정책을 사용하려면 먼저 기본 CXF 버스에 정책 기능을 추가해야 합니다. 다음 블루프린트 구성 조각에 표시된 것처럼 p:policies 요소를 CXF 버스에 추가합니다.

<beans xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xmlns:cxf="http://cxf.apache.org/core"
       xmlns:p="http://cxf.apache.org/policy" ... >

    <cxf:bus>
        <cxf:features>
            <p:policies/>
            <cxf:logging/>
        </cxf:features>
    </cxf:bus>
    ...
</beans>

다음 예제에서는 지정된 서비스 유형의 프록시에 서명 및 암호화 속성을 추가하는 방법을 보여줍니다( jaxws:client 요소의 name 속성으로 서비스 이름이 지정됨). 속성은 WSS4J 속성 파일에 저장됩니다. 여기서 alice.properties 에는 서명 키의 속성이 포함되어 있으며 bob.properties 에는 암호화 키의 속성이 포함되어 있습니다.

<beans ... >
    <jaxws:client name="{http://InteropBaseAddress/interop}MutualCertificate10SignEncrypt_IPingService"
                  createdFromAPI="true">
        <jaxws:properties>
            <entry key="ws-security.signature.properties" value="etc/alice.properties"/>
            <entry key="ws-security.encryption.properties" value="etc/bob.properties"/>
        </jaxws:properties>
    </jaxws:client>
    ...
</beans>

실제로 속성 이름에서는 명확하지 않지만 이러한 각 키는 클라이언트 측의 두 가지 용도로 사용됩니다.

  • Alice.properties (즉, security.signature.properties에 의해 지정된 키)는 다음과 같이 클라이언트 측에서 사용됩니다.

    • 발신 메시지에 서명하는 경우.
    • 들어오는 메시지의 암호를 해독합니다.
  • Cryostat.properties (즉, security.encryption.properties에 의해 지정된 키)는 다음과 같이 클라이언트 측에서 사용됩니다.

    • 발신 메시지를 암호화하는 데 사용됩니다.
    • 수신되는 메시지에 대한 서명을 확인하는 데 사용됩니다.

이러한 혼동이 있는 경우 자세한 설명은 6.2.2절. “기본 서명 및 암호화 시나리오” 에서 참조하십시오.

다음 예제에서는 signature-WS 엔드포인트에 서명 및 암호화 속성을 추가하는 방법을 보여줍니다. 속성 파일 bob.properties 에는 서명 키 및 속성 파일의 속성이 포함되어 있습니다. alice.properties 에는 암호화 키의 속성이 포함되어 있습니다(클라이언트 구성의 역임).

<beans ... >
    <jaxws:endpoint
       name="{http://InteropBaseAddress/interop}MutualCertificate10SignEncrypt_IPingService"
       id="MutualCertificate10SignEncrypt"
       address="http://localhost:9002/MutualCertificate10SignEncrypt"
       serviceName="interop:PingService10"
       endpointName="interop:MutualCertificate10SignEncrypt_IPingService"
       implementor="interop.server.MutualCertificate10SignEncrypt">

        <jaxws:properties>
            <entry key="security.signature.properties" value="etc/bob.properties"/>
            <entry key="security.encryption.properties" value="etc/alice.properties"/>
        </jaxws:properties>

    </jaxws:endpoint>
    ...
</beans>

이러한 각 키는 서버 측의 두 가지 용도로 사용됩니다.

  • Cryostat.properties (즉, security.signature.properties에 의해 지정된 키)는 다음과 같이 서버 측에서 사용됩니다.

    • 발신 메시지에 서명하는 경우.
    • 들어오는 메시지의 암호를 해독합니다.
  • Alice.properties (즉, security.encryption.properties에 의해 지정된 키)는 다음과 같이 서버 측에서 사용됩니다.

    • 발신 메시지를 암호화하는 데 사용됩니다.
    • 수신되는 메시지에 대한 서명을 확인하는 데 사용됩니다.

6.2.6.4. WSS4J 속성 파일 정의

Apache CXF는 WSS4J 속성 파일을 사용하여 암호화 및 서명에 필요한 공개 키와 개인 키를 로드합니다. 표 6.2. “WSS4J 키 저장소 속성” 이러한 파일에서 설정할 수 있는 속성에 대해 설명합니다.

표 6.2. WSS4J 키 저장소 속성

속성설명

org.apache.ws.security.crypto.provider

Crypto 인터페이스 구현을 지정합니다( “WSS4J Crypto 인터페이스”참조). 일반적으로 Crypto,org.apache.ws.security.components.crypto.Merlin 의 기본 WSS4J 구현을 지정합니다.

이 표의 나머지 속성은 Crypto인터페이스의 Merlin 구현에 고유합니다.

org.apache.ws.security.crypto.merlin.keystore.provider

(선택 사항) 사용할 JSSE 키 저장소 공급자의 이름입니다. 기본 키 저장소 공급자는 Bouncy Castle 입니다. 이 속성을 SunJSSE 로 설정하여 공급자를 Sun's JSSE 키 저장소 공급자로 전환할 수 있습니다.

org.apache.ws.security.crypto.merlin.keystore.type

Bouncy Castle 키 저장소 공급자는 JKSPKCS12 키 저장소를 지원합니다. 또한 Bouncy Castle은 BKS 및 UBER와 같은 독점 키 저장소 유형을 지원합니다.

org.apache.ws.security.crypto.merlin.keystore.file

로드할 키 저장소 파일의 위치를 지정합니다. 여기서 위치는 Classpath에 상대적으로 지정됩니다.

org.apache.ws.security.crypto.merlin.keystore.alias

(선택 사항) 키 저장소 유형이 JKS (Java 키 저장소)인 경우 별칭을 지정하여 키 저장소에서 특정 키를 선택할 수 있습니다. 키 저장소에 하나의 키만 포함된 경우 별칭을 지정할 필요가 없습니다.

org.apache.ws.security.crypto.merlin.keystore.password

이 속성에서 지정하는 암호는 두 가지 용도로 사용됩니다. 키 저장소(키 저장소 암호)를 해제하고 키 저장소에 저장된 개인 키의 암호를 해독하는 데 사용됩니다(개인 키 암호). 따라서 키 저장소 암호는 개인 키 암호와 동일해야 합니다.

예를 들어 etc/alice.properties 파일에는 다음과 같이 PKCS#12 파일 certs/alice.pfx 를 로드하는 속성 설정이 포함되어 있습니다.

org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin

org.apache.ws.security.crypto.merlin.keystore.type=PKCS12
org.apache.ws.security.crypto.merlin.keystore.password=password
org.apache.ws.security.crypto.merlin.keystore.file=certs/alice.pfx

etc/bob.properties 파일에는 다음과 같이 PKCS#12 파일 certs/bob.pfx 를 로드하는 속성 설정이 포함되어 있습니다.

org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin

org.apache.ws.security.crypto.merlin.keystore.password=password

# for some reason, bouncycastle has issues with bob.pfx
org.apache.ws.security.crypto.merlin.keystore.provider=SunJSSE
org.apache.ws.security.crypto.merlin.keystore.type=PKCS12
org.apache.ws.security.crypto.merlin.keystore.file=certs/bob.pfx

6.2.6.5. 암호화 키 및 서명 키 프로그래밍

암호화 키와 서명 키를 로드하는 다른 방법은 표 6.3. “Crypto 오브젝트 지정을 위한 속성” 에 표시된 속성을 사용하여 관련 키를 로드하는 Crypto 오브젝트를 지정하는 것입니다. 이를 위해서는 WSS4J Crypto 인터페이스 org.apache.ws.security.components.crypto.Crypto 의 자체 구현을 제공해야 합니다.

표 6.3. Crypto 오브젝트 지정을 위한 속성

속성설명

security.signature.crypto

메시지에 서명하고 암호를 해독하기 위한 키를 로드하는 Crypto 오브젝트의 인스턴스를 지정합니다.

security.encryption.crypto

메시지를 암호화하고 서명을 확인하는 데 필요한 키를 로드하는 Crypto 오브젝트의 인스턴스를 지정합니다.

6.2.6.6. WSS4J Crypto 인터페이스

예 6.7. “WSS4J Crypto 인터페이스” 프로그래밍을 통해 암호화 키와 서명 키를 제공하려는 경우 구현할 수 있는 Crypto 인터페이스의 정의를 표시합니다. 자세한 내용은 WSS4J 홈 페이지를 참조하십시오.

예 6.7. WSS4J Crypto 인터페이스

// Java
package org.apache.ws.security.components.crypto;

import org.apache.ws.security.WSSecurityException;

import java.io.InputStream;
import java.math.BigInteger;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

public interface Crypto {
    X509Certificate loadCertificate(InputStream in)
    throws WSSecurityException;

    X509Certificate[] getX509Certificates(byte[] data, boolean reverse)
    throws WSSecurityException;

    byte[] getCertificateData(boolean reverse, X509Certificate[] certs)
    throws WSSecurityException;

    public PrivateKey getPrivateKey(String alias, String password)
    throws Exception;

    public X509Certificate[] getCertificates(String alias)
    throws WSSecurityException;

    public String getAliasForX509Cert(Certificate cert)
    throws WSSecurityException;

    public String getAliasForX509Cert(String issuer)
    throws WSSecurityException;

    public String getAliasForX509Cert(String issuer, BigInteger serialNumber)
    throws WSSecurityException;

    public String getAliasForX509Cert(byte[] skiBytes)
    throws WSSecurityException;

    public String getDefaultX509Alias();

    public byte[] getSKIBytesFromCert(X509Certificate cert)
    throws WSSecurityException;

    public String getAliasForX509CertThumb(byte[] thumb)
    throws WSSecurityException;

    public KeyStore getKeyStore();

    public CertificateFactory getCertificateFactory()
    throws WSSecurityException;

    public boolean validateCertPath(X509Certificate[] certs)
    throws WSSecurityException;

    public String[] getAliasesForDN(String subjectDN)
    throws WSSecurityException;
}

6.2.7. 알고리즘 모음 지정

6.2.7.1. 개요

알고리즘 모음은 서명, 암호화, 메시지 다이제스트 생성 등과 같은 작업을 수행하기 위한 일관된 암호화 알고리즘 컬렉션입니다.

참조용으로 이 섹션에서는 WS-SecurityPolicy 사양에 정의된 알고리즘 모음에 대해 설명합니다. 그러나 특정 알고리즘 모음을 사용할 수 있는지 여부는 기본 보안 공급자에 따라 다릅니다. Apache CXF 보안은 JCE(Pluggable Java Cryptography Extension) 및 JSSE(Java Secure Socket Extension) 계층을 기반으로 합니다. 기본적으로 Apache CXF는 Sun의 JSSE 공급자로 구성되며, Sun의 JSSE 참조 가이드부록 A 에 설명된 암호화 제품군을 지원합니다.

6.2.7.2. 구문

AlgorithmSuite 요소에는 다음과 같은 구문이 있습니다.

<sp:AlgorithmSuite xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
   (<sp:Basic256 ... /> |
    <sp:Basic192 ... /> |
    <sp:Basic128 ... /> |
    <sp:TripleDes ... /> |
    <sp:Basic256Rsa15 ... /> |
    <sp:Basic192Rsa15 ... /> |
    <sp:Basic128Rsa15 ... /> |
    <sp:TripleDesRsa15 ... /> |
    <sp:Basic256Sha256 ... /> |
    <sp:Basic192Sha256 ... /> |
    <sp:Basic128Sha256 ... /> |
    <sp:TripleDesSha256 ... /> |
    <sp:Basic256Sha256Rsa15 ... /> |
    <sp:Basic192Sha256Rsa15 ... /> |
    <sp:Basic128Sha256Rsa15 ... /> |
    <sp:TripleDesSha256Rsa15 ... /> |
    ...)
    <sp:InclusiveC14N ... /> ?
    <sp:SOAPNormalization10 ... /> ?
    <sp:STRTransform10 ... /> ?
   (<sp:XPath10 ... /> |
    <sp:XPathFilter20 ... /> |
    <sp:AbsXPath ... /> |
    ...)?
    ...
  </wsp:Policy>
  ...
</sp:AlgorithmSuite>

알고리즘 제품군 어설션은 많은 대체 알고리즘(예: Basic256)을 지원합니다. 알고리즘 모음 대안에 대한 자세한 설명은 표 6.4. “알고리즘 모음” 을 참조하십시오.

6.2.7.3. 알고리즘 모음

표 6.4. “알고리즘 모음” WS-SecurityPolicy에서 지원하는 알고리즘 모음에 대한 요약을 제공합니다. 열 제목은 다음과 같이 다양한 유형의 암호화 알고리즘을 나타냅니다. \[Dig]는 다이제스트 알고리즘입니다. \[Enc]는 암호화 알고리즘입니다. \[Sym KW]는 대칭 키 래핑 알고리즘입니다. \[Enc KW]는 비대칭 키 래핑 알고리즘입니다. \[Enc KD]는 암호화 키 파생 알고리즘입니다. \[Enc KD] is the symmetric key-wrap algorithm; \[Sym KW] is the symmetric key-wrap algorithm; \[Enc KD]

표 6.4. 알고리즘 모음

알고리즘 모음\[Dig]\[Enc]\[Sym KW]\[Asym KW]\[Enc KD]\[Sig KD]

Basic256

Sha1

Aes256

KwAes256

KwRsaOaep

PSha1L256

PSha1L192

Basic192

Sha1

Aes192

KwAes192

KwRsaOaep

PSha1L192

PSha1L192

Basic128

Sha1

Aes128

KwAes128

KwRsaOaep

PSha1L128

PSha1L128

TripleDes

Sha1

TripleDes

KwTripleDes

KwRsaOaep

PSha1L192

PSha1L192

Basic256Rsa15

Sha1

Aes256

KwAes256

KwRsa15

PSha1L256

PSha1L192

Basic192Rsa15

Sha1

Aes192

KwAes192

KwRsa15

PSha1L192

PSha1L192

Basic128Rsa15

Sha1

Aes128

KwAes128

KwRsa15

PSha1L128

PSha1L128

TripleDesRsa15

Sha1

TripleDes

KwTripleDes

KwRsa15

PSha1L192

PSha1L192

Basic256Sha256

Sha256

Aes256

KwAes256

KwRsaOaep

PSha1L256

PSha1L192

Basic192Sha256

Sha256

Aes192

KwAes192

KwRsaOaep

PSha1L192

PSha1L192

Basic128Sha256

Sha256

Aes128

KwAes128

KwRsaOaep

PSha1L128

PSha1L128

TripleDesSha256

Sha256

TripleDes

KwTripleDes

KwRsaOaep

PSha1L192

PSha1L192

Basic256Sha256Rsa15

Sha256

Aes256

KwAes256

KwRsa15

PSha1L256

PSha1L192

Basic192Sha256Rsa15

Sha256

Aes192

KwAes192

KwRsa15

PSha1L192

PSha1L192

Basic128Sha256Rsa15

Sha256

Aes128

KwAes128

KwRsa15

PSha1L128

PSha1L128

TripleDesSha256Rsa15

Sha256

TripleDes

KwTripleDes

KwRsa15

PSha1L192

PSha1L192

6.2.7.4. 암호화 알고리즘 유형

WS-SecurityPolicy에서 지원하는 암호화 알고리즘 유형은 다음과 같습니다.

6.2.7.5. 대칭 키 서명

대칭 키 서명 속성 [Sym Sig]은 대칭 키를 사용하여 서명을 생성하는 알고리즘을 지정합니다. WS-SecurityPolicy는 HmacSha1 알고리즘이 항상 사용되도록 지정합니다.

HmacSha1 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2000/09/xmldsig#hmac-sha1

6.2.7.6. 비대칭 키 서명

비대칭 키 서명 속성 [Asym Sig]은 비대칭 키를 사용하여 서명을 생성하는 알고리즘을 지정합니다. WS-SecurityPolicy는 RsaSha1 알고리즘이 항상 사용되도록 지정합니다.

RsaSha1 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2000/09/xmldsig#rsa-sha1

6.2.7.7. 다이제스트

다이제스트 속성인 [Dig]는 메시지 다이제스트 값을 생성하는 데 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 sha 1 및 Sha 256 이라는 두 가지 대체 다이제스트 알고리즘을 지원합니다.

Sha1 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2000/09/xmldsig#sha1

Sha256 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#sha256

6.2.7.8. 암호화

암호화 속성인 [Enc]는 데이터를 암호화하는 데 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 다음과 같은 암호화 알고리즘을 지원합니다. Aes256,Aes192,Aes128,TripleDes.

Aes256 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#aes256-cbc

Aes192 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#aes192-cbc

Aes128 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#aes128-cbc

TripleDes 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#tripledes-cbc

6.2.7.9. 대칭 키 래핑

대칭 키 래핑 속성인 [Sym KW]는 대칭 키 서명 및 암호화에 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 다음과 같은 대칭 키 래핑 알고리즘을 지원합니다. KwAes256,KwAes192,KwAes128,KwTripleDes.

KwAes256 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#kw-aes256

KwAes192 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#kw-aes192

KwAes128 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#kw-aes128

KwTripleDes 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#tripledes-cbc

6.2.7.10. 비대칭 키 래핑

비대칭 키 래핑 속성인 [Asym KW]는 비대칭 키를 서명하고 암호화하는 데 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 다음과 같은 비대칭 키 래핑 알고리즘을 지원합니다. KwRsaOaep,KwRsa15.

KwRsaOaep 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p

KwRsa15 알고리즘은 다음 URI로 식별됩니다.

http://www.w3.org/2001/04/xmlenc#rsa-1_5

6.2.7.11. 계산된 키

계산된 키 속성 [Comp Key]는 파생 키를 계산하는 데 사용되는 알고리즘을 지정합니다. 보안 당사자가 공유 비밀 키의 지원과 통신할 때(예: WS-SecureConversation 사용 시), 적대적인 타사의 분석을 위해 너무 많은 데이터를 노출하지 않으려면 원래 공유 키 대신 파생 키를 사용하는 것이 좋습니다. WS-SecurityPolicy는 PSha1 알고리즘이 항상 사용되도록 지정합니다.

PSha1 알고리즘은 다음 URI로 식별됩니다.

http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/dk/p_sha1

6.2.7.12. 암호화 키 파생

암호화 키 파생 속성인 [Enc KD]는 파생 암호화 키를 계산하는 데 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 다음과 같은 암호화 키 파생 알고리즘을 지원합니다. PSha1L256,PSha1L192,PSha1L128.

PSha1 알고리즘은 다음 URI로 식별됩니다( PSha1L256,PSha1L192PSha1L128 에 동일한 알고리즘이 사용됩니다. 키 길이는 다릅니다).

http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/dk/p_sha1

6.2.7.13. 서명 키 파생

서명 키 파생 속성인 [Sig KD]는 파생된 서명 키를 계산하는 데 사용되는 알고리즘을 지정합니다. WS-SecurityPolicy는 다음과 같은 서명 키 파생 알고리즘을 지원합니다. PSha1L192,PSha1L128.

6.2.7.14. 키 길이 속성

표 6.5. “키 길이 속성” WS-SecurityPolicy에서 지원되는 최소 및 최대 키 길이를 표시합니다.

표 6.5. 키 길이 속성

속성키 길이

최소 대칭 키 길이 [Min SKL]

128, 192, 256

최대 대칭 키 길이 [Max SKL]

256

최소 비대칭 키 길이 [Min AKL]

1024

최대 비대칭 키 길이 [최대 AKL]

4096

최소 대칭 키 길이인 [Min SKL] 값은 선택한 알고리즘 모음에 따라 다릅니다.