Domanda

Idealmente, ho solo bisogno di un semplice SSLSocketChannel.

Ho già un componente che legge e scrive un messaggio su ordinario SocketChannel, ma per alcuni di questi collegamenti, devo utilizzare SSL sopra il filo; le operazioni sopra queste connessioni, tuttavia, sono gli stessi.

Qualcuno conosce un'implementazione libera SSLEngine (con il selettore appropriato) o qualcosa di simile? Ho trovato questo , ma il selettore non lo accetta sin dal suo fornitore non è SOLE.

sto disaccoppiare la reading_from / writing_to logica netto dall'inserimento e il recupero dei dati di rete tramite un semplice oggetto, al fine di utilizzare un <=> senza ottenere pazza, ma è molto difficile da implementare che correttamente, dato il fatto che io non conosco i meccanismi interni di protocollo SSL ...

È stato utile?

Soluzione

Controlla la realizzazione di Restlet può fare quello che ti serve, ed è tutta una questione NIO.

Restlet motore Javadoc

In particolare la HttpClientCall. SetProtocol (HTTPS) - getResponseEntityChannel restituisce una ReadableByteChannel (getEntityChannel restituisce un WriteableByteChannel)

Altri suggerimenti

Jetty ha un'implementazione NIO SSL per i loro server: SslSelectorChannelConnector . Si potrebbe desiderare di sbirciare per i dettagli su ciò che il suo fare.

C'è anche un vecchio (ma decente) articolo di O'Reilly che spiega i dettagli su NIO + SSL insieme al codice di esempio.

TLS Canale è una semplice libreria che fa esattamente questo: avvolgere uno SSLContext (o SSLEngine ) ed esponendo un'interfaccia ByteChannel, facendo il lavoro pesante internamente.

(Disclaimer: io sono l'autore principale della biblioteca).

Non so se questo è quello che stai cercando, ma può aiutare ... Per creare socket server abilitato SSL / TLS, Attualmente sto usando il codice come il seguente (keystore.jks contiene un self firmato pubblico / privato coppia di chiavi utilizzata per il fissaggio di conferma) - i clienti hanno un negozio di fiducia simile che contiene il certificato firmato con la chiave pubblica di quella coppia.

Un po 'di googling intorno a ottenere che configurato dovrebbe farti in corso.

String keyStorePath = "keystore.jks";
String keyStorePassword = "password";

KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore keyStore = new KeyStore();
keyStore.load(new FileInputStream(keyStorePath), keyStorePassword);
keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());

sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());

SSLContext sslContext = getServerSSLContext(namespace.getUuid());
SSLServerSocketFactory serverSocketFactory = sslContext.getServerSocketFactory();

// Create sockets as necessary
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top