Rückmeldung bei: SSLException: Unrecognized SSL message...

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

In meiner Appli lässt sich ein integrierter Web-Server via .properties-Datei konfigurieren. Man gibt einfach den Listener Port ein (bspw. 8080) und ob SSL verwendet werden soll oder nicht.

Bspw.:
webserver.port = 8080
;1 = use ssl (https), else http-connection
webserver.ssl = 1

in diesem Fall, kann eine Webseite https://localhost:8080 aufgerufen werden
oder
webserver.port = 12345
;1 = use ssl (https), else http-connection
webserver.ssl = 0

Webseite: http://localhost:12345

So, das funktioniert sehr schön!

Wenn der admin nun ssl konfiguriert aber der Benutzer einfach nur http:// eingibt, erhält der Benutzer eine Seite mit Hieroglyphen (Zudem wird eine eben die Exception: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?) geschmissen.

Wie kann ich dies nun abfangen? ich möchte, dass dem Benutzer trotzdem eine Webseite angezeigt wird, dass er eben https:// verwenden muss! Ich habe versucht in den OutputStream des Sockets zu schreiben, aber eben, das t auch nicht!

Ideen?

cheerioh & thx
SiS
 
Code:
private void call(URL url) throws AnwendungsException {
try {
   // mach was 
} catch (SSLException e) {
   if (url.toString().startsWith("http://") {
     call(new URL("https", url.getHost(), url.getPort(), url.getFile())); // erneuter Aufruf
  } else {
     throw new AnwendungsException(e);
  }
}
}
 
Danke, aber ich verwende einen Socket. Kann ich da auch irgendwie das Protokoll auslesen?

Code:
			if (this.isSSLConnection) {
				clientSocket = sslss.accept();
			} else {
				clientSocket = ss.accept();
			}

			BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), Charset.forName("ISO-8859-1")));
			String line = in.readLine();  // hier javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?


Oder muss ich das irgendwie anders lösen?

Thx & Gruess
SiS
 
ich hab etwas im Sinne von

Code:
			try {
				line = in.readLine();
			} catch (SSLException se) {
				if (se.getMessage().toLowerCase().indexOf("plaintext") != -1) {
					PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
					out.print("HTTP/1.1 301 Moved Permanently\n");
					out.print("Server: My Server\n");
					out.print("Location: https://1.1.1.0:1234");
					out.print("Content-Type: text/html\n\n");
					out.println("SSL connection required."); // Click <a href='" + getLoginUrl() + "'>here</a> to return to login site!");
					out.close();
					in.close();
					clientSocket.close();
					return;				
				} else {
					throw new Exception(se);
				}
			}

Doch auch das funktioniert irgendwie nicht! Kann doch nicht so schwierig sein, ein Redirekt zu machen, wenn ein Benutzer mit http daher kommt aber https gefordert ist?

Gruz & Danke
SiS
 

Neue Beiträge

Zurück