Frage

Im Idealfall, ich brauche nur ein einfaches SSLSocketChannel.

Ich habe bereits eine Komponente, die liest und schreibt Nachricht über gewöhnliche SocketChannel, aber für einige dieser Verbindungen, ich habe SSL über den Draht zu verwenden; die Operationen über diese Verbindungen sind jedoch die gleichen.

Hat jemand eine kostenlose SSLSocketChannel Implementierung (mit dem entsprechenden Selektor) kennt oder etwas ähnliches? Ich habe dieser , aber hat der Wähler nicht akzeptieren, da seine Verkäufer nicht SUN ist.

Ich bin Entkoppeln der reading_from / writing_to Netto-Logik aus dem Einfügen und Abrufen von Netzwerkdaten über ein einfaches Objekt, um eine SSLEngine ohne wütend zu verwenden, aber es ist wirklich schwierig, dass korrekt umzusetzen, angesichts der Tatsache, dass ich weiß nicht, die Interna von SSL-Protokoll ...

War es hilfreich?

Lösung

Schauen Sie sich die Umsetzung des Restlet es kann tun, was man braucht, und es ist alles über NIO.

Restlet Motor Javadoc

Insbesondere die HttpClientCall. SetProtocol (HTTPS) - getResponseEntityChannel gibt einen ReadableByteChannel (getEntityChannel gibt eine WriteableByteChannel)

Andere Tipps

Jetty hat eine NIO SSL-Implementierung für ihre Server: SslSelectorChannelConnector . Vielleicht haben Sie es wollen, um Informationen über was sein Tun spähen.

Es gibt auch einen alten (aber anständig) Artikel von O'Reilly , die die Details über NIO + SSL zusammen mit Beispielcode erläutert.

TLS-Kanal eine einfache Bibliothek ist, die genau das tut: Wickeln eines SSL-Kontext (oder SSLEngine ) und eine ByteChannel Schnittstelle aussetzt, intern die schwere Arbeit zu tun.

(Disclaimer: Ich bin der Hauptautor der Bibliothek).

Nicht sicher, ob dies ist, was Sie suchen, kann aber helfen ... Um die SSL / TLS-fähigen Server-Sockets zu erstellen, verwende ich Code derzeit wie folgt aus (keystore.jks enthält eine Selbst privat / öffentlich unterzeichnet Schlüsselpaar zur Sicherung Bestätigung) verwendet - Kunden ein ähnliches Trust Store haben, die das signierte Zertifikat mit dem öffentlichen Schlüssel des Paares enthält.

Ein bisschen googeln um, dass konfiguriert bekommen sollten Sie begonnen erhalten.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top