Domanda

Questo è un cross-post del Mozilla Crypto Dev ML. Sperando che qualcuno abbia qualche esperienza usando org.mozilla.jss. Link: JSS - MDN

Sto cercando di effettuare due richieste HTTPS separate a un host remoto utilizzando due prese client e due diversi certificati client rispettivamente (Client Cert A e B). Il mio programma di test è una versione modificata di Ssltest.java

Dal mio host, sono in grado di stabilire due connessioni su due diverse prese all'host remoto. Sono in grado di ricevere un 200 OK indietro dal server Web remoto per entrambe le singole connessioni.

Il mio problema è che il certificato del client "A" viene utilizzato per entrambe le connessioni "A" e "B".

Ho usato questo costruttore:

public SSLSocket(java.lang.String host,int port, 
java.net.InetAddress localAddr, 
int localPort, 
SSLCertificateApprovalCallback certApprovalCallback, 
SSLClientCertificateSelectionCallback clientCertSelectionCallback)

Ho anche implementato l'interfaccia SSLClientCertificateSelectionCallback (fonte) per utilizzare il costruttore sopra e passare il certificato client corretto. Inoltre, ho messo una linea nel mio implementato SSLClientCertificateSelectionCallback select() funzione da registrare quando viene eseguito il richiamata.

Esecuzione della mia app e controllando il registro, il metodo Select () viene chiamato sempre una volta durante la creazione del primo SSLSocket (selezionando Client Cert 'A') e mai su istanziazioni SSLSocket future quando viene specificato il soprannome del Client CART B. In effetti, devo riavviare la mia app per select() essere eseguito di nuovo.

C'è un modo per l'esecuzione del codice di callback nativo select() Quando un certificato è richiesto dal server remoto?

Grazie,

Pr

È stato utile?

Soluzione

Sembra che potrebbe esserci qualche cache di sessione in corso. Hai detto di usare SSLSocket. Hai provato a impostare la memorizzazione nella cache della sessione su False? Per impostazione predefinita, SSLSocket abilita la memorizzazione nella cache della sessione.

Ad esempio nella classe SSLSocket, c'è il metodo public void useCache(boolean b) Se si imposta, passalo un parametro di false Dopo aver creato la presa, si spera che ciò impedisca al server di memorizzare nella cache la tua prima sessione (suppongo che tu stia chiamando entrambe le connessioni client da un programma). In questo modo, dovrebbe richiedere un'altra richiesta di certificato dalla seconda connessione come desideri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top