TLS mit SNI in Java-clients
Gibt es eine anhaltende Diskussion über die Sicherheit und Vertrauen Arbeitsgruppe für NHIN Direkte über die IP-zu-domain-mapping-problem, das erstellt wird, mit traditionellen SSL. Wenn ein HISP (definiert durch NHIN Direct) will host Tausende von NHIN Direkte "Gesundheits-Domains" für die Anbieter, dann wird es ein "künstlich überhöhten Kosten" zu kaufen, eine IP für alle domains.
Da Apache und OpenSSL haben kürzlich ein TLS-Unterstützung für die SNI-Erweiterung, ist es möglich mit SNI als eine Lösung für dieses problem auf der server-Seite. Allerdings, wenn wir entscheiden, dass wir ermöglichen - server-Implementierungen der NHINDirect transport layer zur Unterstützung von TLS+SNI, dann müssen wir erfordern, dass alle clients unterstützen SNI zu. OpenSSL-clients sollte diese standardmäßig und man konnte immer wir stunnel zur Implementierung eines TLS+SNI-fähigen client zum proxy, wenn Ihre jeweiligen Programmiersprache SSL-Implementierung nicht unterstützt SNI. Es scheint, dass die native Java-Anwendungen mit OpenJDK noch nicht unterstützen SNI, aber ich kann nicht bekommen eine klare Antwort aus diesem Projekt. Ich weiß, dass es OpenSSL Java-Bibliotheken zur Verfügung, aber ich habe keine Ahnung, ob das wäre, als brauchbar betrachtet werden.
Können Sie mir ein "state of the art" Zusammenfassung TLS+SNI-Unterstützung für Java-clients? Ich brauche ein Java-Implementierer Perspektive auf dieses.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin am selben Projekt arbeiten wie ftrotter.
Hinweis die Anforderung der Unterstützung für Tausende von domains. Ich glaube nicht, dass SANs gehen zu schneiden den Senf aus zwei Gründen. Erstens, die Größe des Zertifikats erhalten die enormen, das wird wahrscheinlich dazu führen, dass performance-Probleme auf ein minimum. Zweitens, diese domains werden kommen und gehen Häufig, besonders in den frühen Tagen des NHIN Direkt. Die operative Belastung zu haben, um update das Zertifikat jedes mal, wenn eine domain kommt oder geht, wird nicht akzeptabel, IMHO.
In ftrotter die Anfrage, ich habe einige googeln um das Thema java, TLS und SNI und anderen Möglichkeiten, das umzusetzen, was beläuft sich auf ein namens-basiertes virtual hosting situation, mit einem Zertifikat, pro virtuellen host. Hier ist, was ich mir ausgedacht habe:
JSSE (Java Secure Socket Extension) unterstützt TLS und hat "teilweise Unterstützung" für TLS+SNI. Ich habe keine Ahnung, was teilweise Unterstützung bedeutet in diesem Zusammenhang. Der Kommentar, ich bin zu sehen, zeigt an, dass die Unterstützung, die existiert, ist nicht ausreichend tut für namens-basierte virtuelle hosts, das ist im Grunde das, was wir brauchen.
Habe ich gefunden, einen Artikel, der behauptet, die JDK7-version von JSSE wird TLS-Unterstützung+SNI (datiert 11/20/2008), und ich habe eine gefunden, die behauptet, es wird nicht (vom 2/27/2009). Weder ist besonders MAßGEBEND.
Einige der Leute arbeiten, die auf OpenJDK 7 diskutiert die Themen rund um das hinzufügen von SNI-Unterstützung JSSE wieder im Feb-Mär 2009, einschließlich der Entsendung einen Quelltext-patch. (thread beginnt hier:
http://www.mail-archive.com/[email protected]/msg00612.html). OpenJDK7 wird nicht veröffentlicht jeder Zeit vor etwa September 2010. Ich habe keine Ahnung, Wann die Java-7-Plattform veröffentlicht werden.
Es gibt nichts materielles auf java.sun.com an alle, also ich weiß wirklich nicht, was Sonne, die Pläne sind an alle.
Es ist offenbar eine andere Art und Weise zu erreichen name-based virtual hosts, die offenbar weitgehend kompatibel, mit einem einzigen Zertifikat pro hosting-server enthält mehrere Allgemeine Namen und mehreren subject alt names. Sehen http://wiki.cacert.org/VhostTaskForce und Dazu dienen unterschiedliche certs zur selben Tomcat-Anwendungen über Stecker?
Diesem Ansatz schaffen würde, die wirklich großen Zertifikate (aufgrund all jene ZNS und SANs), wenn man viele virtuelle hosts. Einer der Leute bei NHIN Direct und letzten face-to-face-treffen reden, unterstützen wollen Tausende von virtuellen hosts. Meine Vermutung ist, dass diese brechen eine Menge von Implementierungen. Darüber hinaus, die zum aktualisieren des Zertifikats jedes mal, wenn Sie hinzufügen oder entfernen eines virtuellen host-klingt wie eine lächerliche operative Belastung.
In der Zusammenfassung, die aktuelle Java-state of the art " name-based virtual hosting mit separaten Zertifikaten, die pro virtuellen host, erscheint "no can do". Darüber hinaus ist es nicht klar, Wann oder ob es wird, Hinzugefügt werden.
Hat jemand Zustimmen oder nicht? Weiß jemand, ob das OpenJDK-Projekt hat die Absicht "Zurückportieren" SNI-support für Java 6?
JavaSE 7 hat SNI-Unterstützung in JSSE.
http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html
Hinweis, es scheint ein problem mit ihm, wie Sie hier Lesen können:
SSL-handshake alert: unrecognized_name Fehler seit dem upgrade auf Java 1.7.0
es ist auch möglich, den patch mit ein paar Zeilen der orig Sun JDK (bootclasspath), um Server SNI arbeiten.
Klasse: Sonne.Sicherheit.ssl.ServerHandshaker
Feld Hinzufügen
Patch-Methode clientHello (fügen Sie diese Zeilen)
Patch-Methode setupPrivateKeyAndChain (ändern)
Hinzufügen, um die Klasse sun.Sicherheit.ssl.ServerNameExtension