simple hit counter
31 March 2009

Visualizzare messaggi SOAP protetti da SSL

Durante la mia sessione alla conferenza Basta!Italia ho fatto vedere come analizzare il traffico SOAP tra due servizi protetti da SSL presenti sulla stessa macchina di sviluppo (scenario molto comune quando si programma :-). L’obiettivo era quello di visualizzare il Security Token di tipo Username & Password definito da WS-Security all’interno dell’header SOAP. Nel caso specifico, poichè le Windows Web Services API (WWSAPI) non sono in grado di garantire la sicurezza a livello di messaggio, l’obiettivo era quello di visualizzare il Token creato dalle WWSAPI anche se usavamo SSL per il trasporto !!

Anche in questo caso, come in quello precedente, le impostazioni che faremo sono da considerarsi solo per le macchine degli sviluppatori e non in produzione !! Userò ancora il tag <WARNING> per evidenziare le configurazioni pericolose per la produzione.

In questo scenario ho fatto le seguenti configurazioni:
<WARNING>.

  1. Nel file hosts ho configurato : 127.0.0.1 BastaConferenceWebServices.com
  2. Certificati:
    1. Verificare che il nostro Reverse-Proxy (Charles, ma si può utilizzare anche Fiddler) abbia installato il proprio certificato in Current User->Trusted Root Certification Authorities.
    2. Creare il certificato SSL via makecert.exe (o via CA) con il parametro : -n "BastaConferenceWebServices.com" (Maggiori info qui)
    3. Installare il certificato appena creato in Local Computer ->Trusted Root Certification Authorities e in Local Computer –>Personal .
    4. Associare il certificato appena creato con la porta 127.0.0.1:8444 via netsh.exe (Maggiori info qui)
    5. Impostare l’URL reservation (con l’utility : netsh http add urlacl – maggiori info sempre qui ) dato che sicuramente il Web Service NON lo faremo girare con le credenziai di amministratore, nemmeno durante lo sviluppo… vero??? ;-)
  3. Configurare Charles come Reverse Proxy

    image 
  4. Dare OK e lanciare il Web Service e il client.

</WARNING>.

Alla fine della configurazione dovremo avere uno scenario di questo tipo:

image

dove il client parla sulla 2051 pensando di parlare con il nostro Web Service. Sulla 2051 c’è il Reverse Proxy che crea la connessione SSL con il client, accetta il messaggio SOAP, lo logga e diventa il client SSL per il Web Service (vero) sulla 8444.

Vi sembra familiare?? Ebbene si. Questo è il tipico esempio di attacco Man-in-the-Middle, ma usato a fin di bene :-). Prima che venga il dubbio che quindi SSL non è sicuro ricordo che nessun protocollo è veramente sicuro se sono amministratore di tutto l’ambiente !!! 

Infatti in questo modo possiamo visualizzare il messaggio del client:

    1 <s:Envelope … TRONCATO…>

    2   <s:Header>

    3     <a:Action s:mustUnderstand="1">http://Example.org/ICalculator/Add</a:Action>

    4     <a:MessageID>urn:uuid:1bcbe628-18e6-484b-8ed4-363d59ad0fae</a:MessageID>

    5     <a:To s:mustUnderstand="1">https://BastaConferenceWebServices.com:2051/example</a:To>

    6     <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

    7       <Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

    8         <Created>2009-03-26T15:21:04.786Z</Created>

    9         <Expires>2009-03-26T15:26:04.786Z</Expires>

   10       </Timestamp>

   11       <o:UsernameToken>

   12         <o:Username>usr1</o:Username>

   13         <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">

   14           pwd1

   15         </o:Password>

   16       </o:UsernameToken>

   17     </o:Security>

   18   </s:Header>

   19   <s:Body>

   20     <Add xmlns="http://Example.org">

   21       <a>1</a>

   22       <b>2</b>

   23     </Add>

   24   </s:Body>

   25 </s:Envelope>

 

Con relativa risposta :

    1 <s:Envelope … TRONCATO…>

    2   <s:Header>

    3     <a:Action s:mustUnderstand="1">http://Example.org/ICalculator/AddResponse</a:Action>

    4     <a:RelatesTo>urn:uuid:1bcbe628-18e6-484b-8ed4-363d59ad0fae</a:RelatesTo>

    5     <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

    6       <Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

    7         <Created>2009-03-26T15:21:05.921Z</Created>

    8         <Expires>2009-03-26T15:26:05.921Z</Expires>

    9       </Timestamp>

   10     </o:Security>

   11   </s:Header>

   12   <s:Body>

   13     <AddResponse xmlns="http://Example.org">

   14       <result>

   15         3

   16       </result>

   17     </AddResponse>

   18   </s:Body>

   19 </s:Envelope>

 

--Mario

Filed under: ,
 

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# WWSAPI RC per Windows XP, Vista, Windows Server 2003 e Windows Server 2008 | Coded Style said:

PingBack from http://www.codedstyle.com/wwsapi-rc-per-windows-xp-vista-windows-server-2003-e-windows-server-2008-2/

21 May 09 at 3:57 AM

Leave a Comment

Comment Policy: No HTML allowed. URIs and line breaks are converted automatically. Your e–mail address will not show up on any public page.

(required) 
(optional)
(required) 

  
Enter Code Here: Required
Page view tracker