2012-05-14 3 views
18

jax-ws 클라이언트를 구현해야합니다.
XMLENC (: 여기 서명 및 암호화 정책

는 공급자 문서는이 표준은 W3C 표준에서 다른 두 가지를 사용하여 우리가 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf

에서 SOAP 메시지 보안 버전 1.0 규격을 사용

현재 보안에 대해 말하는 것입니다 http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
및 XMLDSIG (http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/)

서명의 경우, 직접 "참조"를 사용하여 "URI"와 "valueType"을 X509로 지정하는 "SecurityTokenReference"는 필수 항목입니다. 암호화의 경우 우리도 권장하지만 환경 설정에서 keyIdentifier, X509IssuerSerial 또는 keyName에 대한 참조를 지원합니다.

암호화 및 서명 된 블록은 "본문"태그 여야합니다.

서명에는 "rsa-sha1", 암호화 키에는 에는 "rsa-1_5", 본문 암호화에는 "tripledes-cbc"를 사용하는 것이 좋습니다.

그래서 (netbeans에서 생성 된) 다음 정책을 생각해 냈습니다. 그러나 ... 그것은 나에게 옳은 것처럼 보이지 않습니다. 웹 서비스에 아직 연결할 수 없지만 사양 버전이 맞는지 잘 모르겠습니다. 나는 주제에 관해 많은 것을 읽었지 만, 나는 여전히 다소 혼란 스럽다. 이 정책이 잘 보이나요?

<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy"> 
    <wsp1:ExactlyOne> 
     <wsp1:All> 
      <sp:TransportBinding> 
       <wsp1:Policy> 
        <sp:TransportToken> 
         <wsp1:Policy> 
          <sp:HttpsToken RequireClientCertificate="false"/> 
         </wsp1:Policy> 
        </sp:TransportToken> 
        <sp:Layout> 
         <wsp1:Policy> 
          <sp:Lax/> 
         </wsp1:Policy> 
        </sp:Layout> 
        <sp:AlgorithmSuite> 
         <wsp1:Policy> 
          <sp:TripleDesRsa15/> 
         </wsp1:Policy> 
        </sp:AlgorithmSuite> 
       </wsp1:Policy> 
      </sp:TransportBinding> 
      <sp:Wss10/> 
      <sp:EndorsingSupportingTokens> 
       <wsp1:Policy> 
        <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> 
         <wsp1:Policy> 
          <sp:WssX509V3Token10/> 
         </wsp1:Policy> 
        </sp:X509Token> 
       </wsp1:Policy> 
      </sp:EndorsingSupportingTokens> 

     </wsp1:All> 
    </wsp1:ExactlyOne> 
</wsp1:Policy> 
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sp1:SignedEncryptedSupportingTokens> 
       <wsp:Policy> 
        <sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
         <wsp:Policy> 
          <sp1:WssX509V3Token10/> 
         </wsp:Policy> 
        </sp1:X509Token> 
       </wsp:Policy> 
      </sp1:SignedEncryptedSupportingTokens> 
     </wsp:All> 
    </wsp:ExactlyOne> 

</wsp:Policy> 

편집 : 나는 그것이 WSIT 아직와 예상되는 메시지를 보낼 수 없었다 . 예를 들어 Netbeans 마법사를 사용하면 주소 지정을 사용하지 않고 암호화 된 헤더를 얻을 수 없습니다. 가능하니?

오래된 축 1 클래스와 wss4j로 뭔가 해킹했는데 작동하지만 추악합니다. 차라리 더 많은 미래 보장형 제품을 사용하고 싶습니다.

+0

더 큰 현상금은 도움이 될까요? – ymajoros

+0

wsit-yet를 사용하여 예상 한 메시지를 보낼 수 없습니다. 예를 들어 Netbeans 마법사를 사용하면 주소 지정을 사용하지 않고 암호화 된 헤더를 얻을 수 없습니다. 가능하니? 나는 오래된 축 1 클래스와 wss4j로 무언가를 해킹했다.하지만 작동은하지만 추한 것이고 미래 지향적 인 것을 사용하고 싶다. – ymajoros

+0

이것은 코드 리뷰 사이트에 속한 코드 리뷰 질문에 더 가깝습니다. – user1378730

답변

1

WSIT 대신 CXF를 사용해 보시겠습니까? http://cxf.apache.org/docs/ws-security.html

+0

나는 할 수 있었다. 추악한 해킹으로 내 문제를 해결했습니다. 이 서비스 제공 업체는 내년에는 보안상의 제약으로 괜찮은 wsdl을 만들 것이라고 말합니다. 그들이 원할 때 wsit을 사용할 것이고 작동 할 것입니다. 그동안 내 추한 해킹이 작동합니다. – ymajoros

+0

추악한 해킹에 CXF를 사용하셨습니까? – adosaiguas

+0

아니요, metro/wss4j에서 작동하는 구성을 가지고 있기 때문에 일부 wss4j와 metro 1 클래스를 metro와 함께 사용하도록 수정했습니다. 기본적으로 메트로 클래스를 복사하고 변경 했으므로 메트로에 대한 의존성은 없습니다. 나는 여전히 지하철이 올바른 선택이라고 믿는다. wss4j를 자세히 살펴야했기 때문에 지옥처럼 더러워졌습니다. – ymajoros

1

실은 혼란스러워합니다. 일반적으로 단일 정책이 있어야합니다. 어떤 경우에는 전송 바인딩 (https)을 정의하는 정책이 있고 다른 하나는 그렇지 않은 경우 보안되지 않은 웹 서비스 호출을받을 위험이 있습니다.

또한 전송 바인딩이 있으므로 전송 본문 (https)으로 전체 본문이 암호화됩니다. 본문 암호화를 명시 적으로 지정할 필요는 없습니다. 실제로이 바인딩은 http 헤더를 제외한 모든 것을 암호화합니다.

전송 바인딩은 실제로 보안 웹 서비스를 얻는 가장 쉬운 방법입니다. 완전한 제어가 필요한 경우 필요에 따라 고유 한 대칭 또는 비대칭 바인딩을 작성해야합니다. 비대칭 (asymetric)은 양면에 인증서가 필요하기 때문에 비대칭 형은 더 복잡하며, 비대칭 형 (asymetric)은 서버 인증서 만 필요로합니다 (익명 클라이언트를 수락 함). 비대칭 및 대칭 바인딩에는주의가 필요합니다. 이들은 매우 유연하게 설계되어 특정 공격에 취약한 경우에도 모든 정책을 설계 할 수 있습니다.

전송 바인딩을 사용하지 않을 때는 본문을 암호화해야한다고 지정해야합니다.사양에 명시된 바와 같이 :

sp:EncryptedParts/sp:Body 

또는 XML로 변환 :

<sp:SignedParts> 
    <sp:Body/> 
</sp:SignedParts> 

이 서명을 지정하는 더 많은 옵션이 있습니다 : 당신은 몸이 서명 할 경우,

<sp:EncryptedParts> 
    <sp:Body/> 
</sp:EncryptedParts> 

유사/암호화 순서, 서명을 암호화할지 여부 등을 지정합니다.

이름에서 알 수 있듯이 policie sp : EndorsingSupportingToken은 지원 토큰에 적용됩니다. 필자가 익숙한 유형은 웹 서비스 요청에 포함 할 수있는 사용자 이름 토큰입니다.

WS-SecurityPolicy specification은 정책을 이해하기 위해 읽은 가장 유용한 문서입니다. 이것을 완전히 읽으려면 시간이 필요합니다. 그것은 아주 잘 상세하고 유용한 예제를 포함하고 있습니다. 일부 버전은 최신 버전에서 더 잘 문서화 될 것이므로 다른 버전의 문서를 읽는 것이 좋습니다. 참고 v1.3을 연결했습니다.

웹 서비스 클라이언트와 서버를 설정하고 간단한 테스트를 작성하십시오. 특히 웹 서비스가 처음이라면.

정책을 신속하게 공식화하는 데 도움이되는 도구는 SoapUI입니다. 그것은 내가 필요한 것을 정확히 지원하지는 않았지만, 그것은 내가 두 가지 것을 배우는 것을 도왔습니다. 그것은 훌륭한 UI를 가지고 있으며 사용하기가 그리 어렵지 않습니다.

일부 예제를 구하거나 일부 빌드 한 다음 스펙을 사용하여 해체하십시오.

정책이 매우 복잡하다는 사실을 발견했습니다. 많은 개념을 흡수 할 준비를하십시오!

+0

글쎄, 나는 선택의 여지가 없었어요. 저는 클라이언트이고 다른 클라이언트가 사용하는 서버에 관해서는 말할 것도 없습니다. 나는 보안상의 제약없이 wsdl을 가졌다. 이것은 협상 할 수 없었다. – ymajoros

+0

파트너는 매우 협조 적이 지 않습니다. 아마도 그들은 당신이 그들의 서비스를 부르는 데 관심이있는 것이 전부가 아닙니까? 그들이 클라이언트 인증을하면 적절한 클라이언트 인증서 없이는 서비스를 호출 할 수 없습니다. 사용자 이름 + 암호 토큰이 필요한 경우 서비스를 호출 할 수도 없습니다. 어쩌면 그들은 https를 통해 익명의 클라이언트를 받아 들일 수 있습니까? 그것을 밖으로 시험하십시오. https 보안을 사용하여 간단한 웹 서비스를 코딩하십시오 (즉, 단일 안녕하세요 세계 함수). 그런 다음 해당 클라이언트를 코딩하십시오. 일단 그것이 작동하면, 손가락을 통과하고 '진짜'서비스로 시도하십시오. –

+0

'내 파트너'는 실제로 내 고객의 파트너이고, 어쨌든 우리는 독점권을 가지고 있으므로 선택의 여지가 없으며 언제든지 바뀌지 않을 상태에 머물러 있기 때문에 웹 서비스에 전화해야합니다. 곧.그들은 세계를 통치하고, 그들이하는 일 (기술이 아닌 사업)에 놀랄 것입니다. 어쨌든, 나는 몇 달 동안 프로덕션에서 작동하는 위에 언급 된 추악한 해킹을 가지고 있습니다. – ymajoros

관련 문제