Sto provando a scrivere un client (un middleware in effetti, che è un client per un'entità, ma che funge anche da server per gli altri). Nella sua capacità di client dovrebbe parlare con un altro server (VirtualCenter di VMware) e chiedergli di fare cose per suo conto.Forzare il socket client SSL per inviare il certificato
Per offrire più contesto, VirtualCenter consente a un'applicazione di registrarsi come un'estensione. Tale domanda potrebbe registrare il suo certificato al momento della registrazione (setCertificate). Successivamente, l'applicazione può accedere a VirtualCenter utilizzando il suo certificato (metodo loginExtensionByCertificate()) e quindi non è necessario memorizzare nome utente e password. Tuttavia, affinché funzioni, il client (la mia app) deve inviare un certificato come parte della sua connessione SSL, anche se il server (VirtualCenter) non lo richiede in particolare.
Sto scrivendo la mia app con Java. Ho creato il mio gestore di chiavi, l'ho collegato al mio keystore e specificato l'alias da usare. Quindi inizializzato il mio contesto ssl per usare quel gestore di chiavi. Nei socket creati, vedo che il loro SSLContext ha il mio key manager in loro. Tuttavia, non vedo che il gestore di chiavi sia mai stato chiamato per ottenere il certificato. Per qualche motivo, il socket non ritiene necessario inviare un certificato.
Capisco che il server possa chiedere al cliente di presentare il suo certificato. In questo caso, non succede. Quello che mi chiedo se ci sia un modo per forzare il socket creato a presentare un certificato indipendentemente dal fatto che il server lo richieda.
Suggerisco di eseguire il debug dell'handshake utilizzando '-Djavax.net.debug = ssl' o almeno' Djavax.net.debug = ssl: handshake' per vedere se si ottiene un 'CertificateRequest' e controllare l'elenco' certificate_authorities' contiene. – Bruno