2012-08-07 13 views
5

Ho bisogno di comprimere i dati inviati tramite un canale sicuro nella mia app iOS e mi chiedevo se potevo usare TLS compression per lo stesso. Non riesco a capire se l'implementazione TLS di Apple, Secure Transport, supporta lo stesso.iOS supporta la compressione TLS?

Qualcun altro sa se la compressione TLS è supportata in iOS o no?

risposta

2

Stavo cercando di determinare se l'implementazione di Apple di SSL/TLS supportava la compressione, ma devo dire che temo che non sia così.

Inizialmente ero fiducioso che avendo un codice di errore errSSLPeerDecompressFail, ci deve essere un modo per abilitare la compressione. Ma non riuscivo a trovarlo.

Il primo ovvio motivo per cui Apple non supporta la compressione sono le varie acquisizioni di cavi che ho fatto dal mio dispositivo (6.1) aprendo socket sicuri in porte diverse. In tutti loro il pacchetto Client Hello riportava un solo metodo di compressione: null.

Poi ho guardato l'ultimo codice disponibile per libsecurity_ssl disponibile da Apple. Questa è l'implementazione da Mac OS X 10.7.5, ma qualcosa mi dice che l'iOS sarà molto simile, se non uguale, ma sicuramente non sarà più potente di quello di Mac OS X.

È possibile trovare nel file sslHandshakeHello.c, le linee 186-187 (SSLProcessServerHello):

if (*p++ != 0)  /* Compression */ 
    return unimpErr; 

Questo codice di errore suona molto come “se il server invia un'altra compressione, ma null (0), noi don' t implementalo, quindi fallisci ".

Ancora, lo stesso file, la linea 325 (SSLEncodeClientHello):

*p++ = 0; /* null compression */ 

E nient'altro muoversi (DEFLATE è il metodo 1, secondo RFC 3749).

Di seguito, le linee 469, 476 e 482-483 (SSLProcessClientHello):

compressionCount = *(charPtr++); 
... 
/* Ignore list; we're doing null */ 
... 
/* skip compression list */ 
charPtr += compressionCount; 

Penso che sia abbastanza chiaro che questa implementazione gestisce solo la compressione null: è l'unico inviato nel client Ciao , l'unico compreso nel server Hello e i metodi di compressione vengono ignorati quando viene ricevuto il client Hello (null deve essere implementato e offerto da ogni client).

Quindi penso che sia tu che io dobbiamo implementare una compressione a livello di applicazione. In bocca al lupo.

+0

Grazie per aver scavato in questo! –