Question

Idéalement, je ne ai besoin d'un simple SSLSocketChannel.

Je possède déjà un composant qui lit et écrit un message sur ordinaire SocketChannel, mais pour certaines de ces connexions, je dois utiliser SSL sur le fil; les opérations sur ces connexions, cependant, sont les mêmes.

Quelqu'un connaît une implémentation libre SSLEngine (avec le sélecteur approprié) ou quelque chose de similaire? Je l'ai trouvé cette , mais le sélecteur ne l'accepte pas car son vendeur n'est pas SUN.

Je découpler la reading_from / writing_to logique net de l'insertion et la récupération des données du réseau via un objet simple, afin d'utiliser un sans devenir fou <=>, mais il est vraiment difficile à mettre en œuvre correctement que, compte tenu du fait que je ne connais pas le fonctionnement interne du protocole SSL ...

Était-ce utile?

La solution

Consultez la mise en œuvre de Restlet il peut faire ce que vous avez besoin, et il est tout au sujet NIO.

Restlet moteur Javadoc

Plus précisément la HttpClientCall. SetProtocol (HTTPS) - getResponseEntityChannel renvoie un ReadableByteChannel (getEntityChannel renvoie un WriteableByteChannel)

Autres conseils

Jetty a une implémentation SSL NIO pour leur serveur: SslSelectorChannelConnector . Vous pouvez jeter un regard à elle pour plus de détails sur ce que son fait.

Il y a aussi un vieux (mais décent) article O'Reilly qui explique les détails sur NIO + SSL avec le code exemple.

TLS canal est une bibliothèque simple qui fait exactement cela: un emballage SSLContext (ou SSLEngine ) et l'exposition d'une interface ByteChannel, faisant intérieurement le levage de charges lourdes.

(Disclaimer: Je suis l'auteur principal de la bibliothèque).

Je ne sais pas si c'est ce que vous cherchez, mais peut aider ... Pour créer SSL / TLS sockets serveur activé, je suis actuellement en utilisant le code comme les (keystore.jks suivants contient une auto-signé privé / public paire de clés utilisée pour sécuriser la confirmation) - les clients ont un magasin de confiance similaire qui contient le certificat signé avec la clé publique de cette paire.

Un peu de googler autour d'obtenir que configuré devrait vous démarrer.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top