SSLProtocolException: handshake alert: unrecognized_name: client-side code workaround?
In einem benutzerdefinierten HTTP-client abrufen von XML-Daten, ich bin immer die unrecognized_name Fehler. Die Antworten zu ähnlichen Fragen leider nicht für mich arbeiten:
- Kann ich nicht ausschalten SNI-Unterstützung über die system-property, da mein code läuft innerhalb einer application server, über die ich keine Kontrolle haben
- Ich nicht lösen können, die web-service-server-Konfiguration (hinzufügen ServerName)
Recht jetzt mein code-commons-httpclient-3.1, aber ich bin offen für alternativen. Hier der gekürzte code, den ich verwende jetzt:
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(getEndpointUrl());
NameValuePair[] data = {
new NameValuePair("username", getUsername()),
new NameValuePair("password", getPassword()),
new NameValuePair("email", email)
};
method.setRequestBody(data);
client.executeMethod(method);
return method.getResponseBodyAsStream();
Habe ich mir angeschaut HttpClient, und es scheint, dass ich kann eine Problemumgehung implementieren, ähnlich dem erwähnten https://stackoverflow.com/a/14884941/3676401, aber scheint eine Menge von potentiell sicherheitsrelevanten code.
Bin ich eher ungern dump eine große Menge von code in einer ansonsten einfachen client. Irgendwelche anderen Vorschläge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist eine Verbindung zu einem server hat missconfigured SNI. Wenn Sie keine Kontrolle über diesen server und kann es nicht fixen, dann müssen Sie deaktivieren SNI.
1), Wenn Sie erwarten, dass der server behoben werden, an einem gewissen Punkt, verwenden Sie die runtime-flag zu deaktivieren, SNI, vorübergehend, bis der server behoben. Auf diese Weise können Sie einfach entfernen Sie dieses flag später sogar ohne erneutes kompilieren, sobald der server ist behoben.
2) Wenn Sie nicht erwarten, dass der server jemals behoben werden, implementieren Sie einen dauerhaften workaround wie das deaktivieren von SNI in Ihrer Anwendung:
Den workaround die Antwort, die Sie link erwähnt letztlich deaktiviert SNI sowieso in einer viel umständlicher Weg, also, wenn Sie brauchen, SNI irgendwo anders in deiner Anwendung würde ich nur fahren mit einer der oben genannten Optionen.
So, hier ist mein Versuch an diesem code. Ich habe es verborgen hinter einer Konfiguration Eigenschaft, die wir anpassen können, zum Zeitpunkt der Bereitstellung, so dass hoffentlich können wir loszuwerden, diese Warze, sobald der web service-server-Konfiguration behoben.
Ich habe nicht geprüft, alle Auswirkungen auf die Sicherheit dieser code hat. Ich habe nur getestet, mit meiner Anwendung, und es funktioniert möglicherweise nicht für Sie. Andere JVM-Versionen möglicherweise anders Verhalten. Nicht halten mich dafür verantwortlich, wenn Sie sich entschieden, um diesen code zu verwenden!
Update 2014-09-01: Leider, diese Problemumgehung funktioniert nur, wenn Sie versuchen eine Verbindung zu der Zieladresse durch einen HTTPS-proxy. Wenn Sie die Verbindung direkt ist, erhalten Sie die etwas unscheinbare Fehler.
Da unser Ziel-server gehabt hat, es ist-Konfiguration fest, ich brauche nicht den workaround nicht mehr. Hinzufügen eines arbeiten stub createSocket () - Methode ist viel komplizierter, weil es getan werden muss, um in HTTPClients' SSLSocketFactory.