2009-05-01 4 views
0

Ich mache etwas in Java SE, das erfordert, dass ich SSL auf ungewöhnliche Weise verwende.
Die erforderlichen Schritte wäre so etwas wie:Java-SSL-Neuverhandlung (von SSL zum Löschen des Kanals)

  • eine SSL-Sitzung einzurichten;
  • Tauschen Sie einige private Informationen aus;
  • Die Verbindungsparameter erneut aushandeln, um die Verwendung kryptographischer Operationen zu beenden.

Ich habe nicht in der Java-API einen Weg zu diesem gefunden. Ich glaube, dass die Problemlösung irgendwie durch die Neuverhandlung der Sitzung behandelt werden würde, aber mit einer Verschlüsselungssuite ohne kryptographische Operationen, aber es gibt keine solche Option; oder um auf den Underling-Socket zuzugreifen und kryptografische Operationen zu umgehen.

Sind diese Optionen möglich? Glauben Sie, dass solche Funktionen in anderen Sprachen und Frameworks (C, PHP, Ruby, .NET, Perl, Python usw.) verfügbar sind?

Danke für die Hilfe,
Luís M. Costa

Antwort

3

Sie so etwas wie dies in Java tun könnte, aber es ist definitiv nicht Standard. Ich kann nicht dafür bürgen, dass andere Plattformen die notwendige Unterstützung dafür haben.

Die JSSE bietet Unterstützung für transportunabhängige SSL mit der SSLEngine. Sie können dies verwenden, um einen Socket vorübergehend mit SSL zu "dekorieren", dann schalten Sie ihn aus, wenn Sie fertig sind, und verwenden Sie direkt das Raw-Socket-IO.

Ich kann nicht erraten, warum Sie SSL deaktivieren möchten, sobald Sie die Kosten für die Verhandlung der SSL-Sitzung überschritten haben. Wenn es aus Gründen der Leistung ist, können Sie die Verschlüsselungssuite neu verhandeln, um "NULL" Vertraulichkeits- und Integritätsprotokolle zu verwenden, solange beide Parteien dies zulassen. In der SSL-Datensatzschicht würden Sie immer noch etwas Aufwand haben. Der Overhead von SSL, nachdem die Sitzungsparameter ausgehandelt wurden, ist jedoch extrem niedrig. Wenn Ihre Anwendung für diesen Overhead empfindlich ist, sollten Sie dedizierte SSL-Hardware in Betracht ziehen.

+0

Ich muss zustimmen und betonen, dass der reale Overhead von SSL alle in der Verhandlung ist; Es benötigt sehr wenig Arbeit, um die symmetrische Verschlüsselung/Entschlüsselung für die tatsächlichen Daten durchzuführen, die über die Verbindung bewegt werden. –

1

Warum nicht einfach die Verbindung trennen und erneut verbinden? Beim Aufbau einer TCP-Verbindung, die SSL neu aushandeln würde, wäre der Aufwand geringer.

2

Ein Grund, SSL auf dem vorhandenen Socket zu deaktivieren, ist die Implementierung des Befehls FTP-Clear-Control-Channel (CCC) (FTP über TLS). Dadurch wird der Steuerkanal wieder in Klartext zurückversetzt, sodass Firewalls die dynamische Portanfrage sehen können.

+0

Ich hatte noch nie davon gehört; Danke, dass du dieses Beispiel aufgezeigt hast. – erickson

0

Um die transparente Chiffre zu renotitiate Ich denke, Sie müssen mindestens aktivieren, da es nicht standardmäßig aktiviert ist. Aber ich denke, es gibt keine gute Null-Chiffre dafür und es wäre besser, die SSL-Sockets vom darunterliegenden Socket zu trennen.

SSLEngine#setEnabledCipherSuites(new String(){"SSL_RSA_WITH_NULL_SHA"}); 
SSLEngine#beginHandshake(); 
Verwandte Themen