SunCertPathBuilderException: unable to find valid certification path to requested target in CN1-app

Bitte können Sie helfen.
Ich habe eine Codenameone app, die sendet eine GET-Anforderung an einen cloud-Tomcat-8-server, und erwartet, dass wieder einige JSON-Antwort. Wichtig das ist ein HTTPS-Aufruf.

Wenn ich die Anfrage im Postbote es funktioniert:

https://www.mydomain.co.uk:8443/MyProject/v1/generate_token

Gleichen URL durch mein browser funktioniert und zeigt, wie "Sicher" und ich kann sehen, mein Zertifikat-details.
Ich kaufte mir ein Zertifikat für mein SSL - /TLS-Konfiguration, und es scheint zu funktionieren Prima in den logs auf Start.

Im simulator bekomme ich wieder die folgende Fehlermeldung an der Stelle, bei der Lektüre der Antwort von der URL-Aufruf - ich glaube, das muss verschlüsselt werden:

Exception: javax.net.ssl.SSLHandshakeException - sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
    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 java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
    at com.codename1.impl.javase.JavaSEPort.getResponseCode(JavaSEPort.java:7591)
    at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:702)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:282)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

Warum sollte die app anders sein zu Postbote den Aufruf von (Netzwerk-Monitor-Fenster bestätigt die gleiche URL-Aufruf) ?

Keines der Protokolle werden aktualisiert, nach meinem Anruf, also nichts zu prüfen gibt. Ich habe keine änderungen an meiner app (die arbeiten) seit dem Wechsel von http zu https.

Hier ist der CN1-code aufrufen:

public String fetchTokenIntoStorage(String userName, String password) {
        ConnectionRequest r = new ConnectionRequest();
        r.setUrl(Constants.URL_HOST_PORT + "/MyProject" + Constants.LIVE_OR_TEST
                + "/v1/generate_token");
        r.addRequestHeader("Content-Type", "application/json");
        r.addRequestHeader("userName", userName);
        r.addRequestHeader("password", password);
        r.setHttpMethod("GET");
        r.setFailSilently(false);
        r.setPost(false);
        //show spinning dialog while connecting
        InfiniteProgress prog = new InfiniteProgress();
        Dialog dlg = prog.showInifiniteBlocking();
        r.setDisposeOnCompletion(dlg);
        NetworkManager.getInstance().setTimeout(10000);
        //NetworkManager.getInstance().addErrorListener(new ActionListener() {
        //
        //@Override
        //public void actionPerformed(ActionEvent evt) {
        //MessageBox.showDialogMessage("Unable to connect to server. Please
        //retry later.");
        //}
        //});
        //NetworkManager.getInstance().updateThreadCount(2);
        NetworkManager.getInstance().addToQueueAndWait(r);

        if (r.getResponseData() != null) {
            JSONParser parser = new JSONParser();
            Map<String, Object> json = null;
            try {
                json = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData())));
            } catch (IOException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (json.get("error") != null) {
                return String.valueOf(json.get("error"));
            }
            JwtRecord record = new JwtRecord();
            record.userId = Integer.parseInt(String.valueOf(json.get("userId")));
            record.jsonWebToken = (String) json.get("jwt");
            record.theme = "LIGHT";
            Storage.getInstance().writeObject("MyToken", record);
            return "";
        }
        if (!r.getResponseErrorMessage().equalsIgnoreCase("")) {
            return r.getResponseErrorMessage();
        } else {
            return "Unable to connect to server. Please check connection.";
        }
    }

Den code schrittweise Durchlaufen, es scheint nur Fehler nach

NetworkManager.getInstance().addToQueueAndWait(r);

R.getResponseData() und r -.getResponseErrorMessage() null sind.

Vielen Dank

InformationsquelleAutor Think.Smart | 2018-05-23
Schreibe einen Kommentar