2013-07-13 17 views
6

Ci si sente come ho cercato già l'intero web, ma tutto quello che ho trovato sono suggerimenti su come accettare un certificato non valido o autofirmato automaticamente. (Utilizzo personalizzato HttpClient e SSLSocketFactory - Ho già funzionato.)comportamento browser come su certificati non validi/autofirmati

Ma quello che voglio per la mia app è che l'utente ottiene una finestra di dialogo simile a un browser che chiede qualcosa come "Vuoi davvero fidarti di questo server? dare un'occhiata al suo certificato. " (Ma solo se il certificato non è considerato attendibile dai controlli predefiniti.)

Quindi il certificato deve essere inserito nell'archivio certificati dell'app, quindi la volta successiva viene accettato automaticamente.

Così che cosa ho bisogno di sapere è:

  • Come scaricare il certificato (catena) per una combinazione host/porta specifica (per essere in grado di mostrare all'utente)?
  • Come conservare il certificato in un modo che possa essere caricato in un KeyStore in seguito?

Questo è il mio flusso di lavoro pianificato in app:

  1. inviare una richiesta al server con mia abitudine HttpClient. Forse il certificato è attendibile dal sistema o già nel mio negozio (se sì, vai al 4).
  2. Se la richiesta non è riuscita a causa di problemi SSL, mostrare all'utente il certificato e chiedere se fidarsi di questa connessione.
  3. Se l'utente ha scelto di fidarsi, archiviare il certificato nel mio negozio e andare a 1.
  4. Urrà, la connessione è pronta per l'uso.

Quindi qualcuno sa come fare?

+0

Wow, hai davvero ragione sul fatto che tutto ciò che puoi trovare su Google è come disabilitare i controlli CA .. –

risposta

0

Non disabilitare i controlli CA e rilevare l'eccezione quando si tenta di connettersi a un certificato non CA. Quando rilevi un'eccezione, avvia la pagina affinché l'utente accetti/rifiuta. Se accetta, avvia una nuova connessione con i controlli CA disabilitati.

+0

Grazie per la tua risposta. In questo momento, non sto più lavorando a questo progetto. Tornerò alla tua risposta una volta che ho ripreso a lavorare. – fero