vfl_freak
Premium-User
Guten Morgen,
ich stehe hier vor einem Problem, dass mit leider an den Rand meiner Kenntnis bringt (oder vermutlich sogar darüber hinaus
)
Ich soll von einem Java-Programm aus per REST Daten von unserer Telefonanlage abfragen.
Ich habe zunächst eine Methode gebastelt, die zu einem Benutzerkürzel die IP des von ihm angemeldeten SNOM-Telefons ermittelt und zurückgibt.
So weit, so gut - das funktioniert auch einwandfrei 
Jetzt versuche ich, diese HTTP-Variante durch HTTPS zu ersetzen.
Es ist genau der gleiche Code, nur das die HttpURLConnection durch HttpsURLConnection ersetzt wurde. Wenn sie dann ausführe, fliegt an der oben markierten Stelle folgende Exception:
Der Kollege aus der IT, der sich um die Telefonanlage kümmert, meinte nur lax
Das ich das Java-Zertifikat nicht kenne, ist mein Vertrauen doch ziemlich getrübt
Wie sähe denn der genannte Schalter aus?
Er müsste ja vermutlich als Argument mit "-D" übergeben werden, oder?
Ich hoffe, dass mich hier irgendwer auf die richtige Spur bringen kann
Bei Fragen fragen
VG Klaus
ich stehe hier vor einem Problem, dass mit leider an den Rand meiner Kenntnis bringt (oder vermutlich sogar darüber hinaus

Ich soll von einem Java-Programm aus per REST Daten von unserer Telefonanlage abfragen.
Ich habe zunächst eine Methode gebastelt, die zu einem Benutzerkürzel die IP des von ihm angemeldeten SNOM-Telefons ermittelt und zurückgibt.
Java:
public static void initialzeSnomFonData( String userKuerzel )
{
URL url = null;
HttpURLConnection httpCon = null;
try
{
// xxx.yyy.zzz = Adresse der Telefonanlage
String abfrageString = "[URL]http://xxx.yyy.zzz/services/identity/[/URL]" + userKuerzel + "/defaultdevice";
url = new URL( abfrageString );
httpCon = (HttpURLConnection)url.openConnection();
httpCon.setReadTimeout( 10000 );
httpCon.setConnectTimeout( 10000 );
final String userName = "myUserName"; // anonymisiert
final String password = "MyPasswort"; // anonymisiert
byte[] encodedPassword = ( userName + ":" + password ).getBytes();
String base64encodedString = Base64.getEncoder().encodeToString( encodedPassword );
httpCon.setRequestProperty( "Authorization", "Basic " + base64encodedString );
httpCon.setRequestProperty( "Content-Type", "application/json" );
httpCon.setRequestProperty( "Accept", "application/json" );
httpCon.setRequestMethod( "GET" );
// ################################################
// hier fliegt in der HTTPS-Variante die unten beschriebene Exception
// ################################################
BufferedReader reader = new BufferedReader( new InputStreamReader(httpCon.getInputStream()) );
String inputLine;
StringBuffer response = new StringBuffer();
while( (inputLine = reader.readLine()) != null )
{
response.append(inputLine);
}
reader.close();
String[] ergList = null;
if( response.length() > 0 )
{
// alle '[', ']' und '"' durch Blanks ersetzen
String s1 = response.toString().replace( "[", "" );
String s2 = s1.replace( "]", "" );
String s3 = s2.replace( "\"", "" );
// ergList füllen
Pattern p = Pattern.compile( "," ); // splitten nach dem Komma
String[] sData = p.split( s3, 0 );
ergList = new String[sData.length];
for( int i = 0; i < sData.length; i++ )
{
ergList[I] = sData[I];
//System.out.println( "ergList[I]=<" + ergList[I] + ">" );
if( ergList[I].startsWith("ip:") )
{
// hier wird die gefundene IP auf eine globale Variable gesetzt
SNOMFON_IP_MOBYDICK = ergList[I].substring( 3, ergList[I].length() );
SNOM_IS_ACTIVE = true;
break;
}
}
}
else
{
ergList = new String[] { " " };
SNOM_IS_ACTIVE = false;
}
}
catch (Exception e)
{
System.out.println( "Exception in der Rest-Abfrage" );
e.printStackTrace();
}
finally
{
if( httpCon != null )
{
httpCon.disconnect();
httpCon = null;
}
}
System.out.println( "http: SNOMFON_IP_MOBYDICK=<" + SNOMFON_IP_MOBYDICK + ">" );
} // initialzeSnonFonData

Jetzt versuche ich, diese HTTP-Variante durch HTTPS zu ersetzen.
Es ist genau der gleiche Code, nur das die HttpURLConnection durch HttpsURLConnection ersetzt wurde. Wenn sie dann ausführe, fliegt an der oben markierten Stelle folgende Exception:
javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1542)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2026)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1135)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
// #################
// 1080 ist die oben markierte Zeile !!
// #################
at com.gselectronic.worker.config.Config.initialzeSnomFonDataViaHttps(Config.java:1080)
at com.gselectronic.worker.dialogs.DlgLogin.actionPerformed(DlgLogin.java:306)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:208)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:307)
at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250)
at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2974)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2966)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
at java.awt.Component.processEvent(Component.java:6310)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
// Ausgabe:
HTTPS: SNOMFON_IP_MOBYDICK=<0.0.0.0>
at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1542)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2026)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1135)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
// #################
// 1080 ist die oben markierte Zeile !!
// #################
at com.gselectronic.worker.config.Config.initialzeSnomFonDataViaHttps(Config.java:1080)
at com.gselectronic.worker.dialogs.DlgLogin.actionPerformed(DlgLogin.java:306)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:208)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:307)
at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250)
at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2974)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2966)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
at java.awt.Component.processEvent(Component.java:6310)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
// Ausgabe:
HTTPS: SNOMFON_IP_MOBYDICK=<0.0.0.0>
Der Kollege aus der IT, der sich um die Telefonanlage kümmert, meinte nur lax
Nur sagt mir dies beides, auch nach dem Lesen div. Webseiten, herzlich wenig!"... Du musst dem Java cert manuell vertrauen oder einen Schalter setzten, dass selbstsignierten Zertifikaten vertraut wird ..."
Das ich das Java-Zertifikat nicht kenne, ist mein Vertrauen doch ziemlich getrübt

Wie sähe denn der genannte Schalter aus?
Er müsste ja vermutlich als Argument mit "-D" übergeben werden, oder?
Ich hoffe, dass mich hier irgendwer auf die richtige Spur bringen kann

Bei Fragen fragen

VG Klaus