Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android mqtt ssl连接在android 7中不工作_Android_Ssl_Mqtt - Fatal编程技术网

android mqtt ssl连接在android 7中不工作

android mqtt ssl连接在android 7中不工作,android,ssl,mqtt,Android,Ssl,Mqtt,我正在使用paho()处理mqtt SSL连接。这个连接在Android Nougat中不起作用,在Android 7下工作良好 我得到以下例外情况: Mqttjavax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚 我正在使用下面的代码连接mqtt final MqttAndroidClient mqttAndroidClient = new MqttAndroid

我正在使用paho()处理mqtt SSL连接。这个连接在Android Nougat中不起作用,在Android 7下工作良好

我得到以下例外情况:

Mqttjavax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

我正在使用下面的代码连接mqtt

final MqttAndroidClient mqttAndroidClient = new MqttAndroidClient(MainActivity.this, "ssl://" + pref.getMqttUrl(), clientId, persistence);

    try {
         String clientId = MqttClient.generateClientId();

         MqttConnectOptions connectionOptions = new MqttConnectOptions();
         connectionOptions.setCleanSession(true);

        Log.e("Test", "ssl://" + pref.getMqttUrl());

        try {
            InputStream trustStoresIs = context.getResources().openRawResource(R.raw.ca_key);


            String trustStoreType = KeyStore.getDefaultType();
            KeyStore trustStore = KeyStore.getInstance(trustStoreType);
            trustStore.load(trustStoresIs, context.getString(R.string.bks_password).toCharArray());

            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(trustStore);

            InputStream keyStoreStream = context.getResources().openRawResource(R.raw.user_cer_key);
            KeyStore keyStore = null;
            keyStore = KeyStore.getInstance("BKS");
            keyStore.load(keyStoreStream, context.getString(R.string.bks_password).toCharArray());

            KeyManagerFactory keyManagerFactory = null;
            keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            keyManagerFactory.init(keyStore, context.getString(R.string.bks_password).toCharArray());

            SSLContext context = SSLContext.getInstance("SSL");
            context.init(keyManagerFactory.getKeyManagers(), tmf.getTrustManagers(), null);

            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) context.getSocketFactory();
            connectionOptions.setSocketFactory(sslsocketfactory);

        } catch (KeyManagementException | CertificateException | KeyStoreException | IOException | NoSuchAlgorithmException | UnrecoverableKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        mqttAndroidClient.connect(connectionOptions, null, new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                Log.e("Mqtt","Connection Success!");

            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                Log.e("Mqtt","Connection Failure!");

            }
        });

        mqttAndroidClient.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                Log.e("Mqtt","Connection was lost!");

            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {



            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
                System.out.println("mqtt Delivery Complete!");
            }

        });


    } catch (Exception ex) {
        ex.printStackTrace();

    }

MQTT在Android7中运行良好,实际上您并没有获得密钥存储的路径,然后您将面临这个问题。阅读安卓7中提供商的变化。我已经检查了路径,它只是正确的。您能提出一些建议吗?MQTT在android 7中运行良好,实际上您并没有获得密钥存储的路径,然后您就面临这个问题。阅读安卓7中提供商的变化。我已经检查了路径,它只是正确的。你能提出一些建议吗?