Сертификат предупреждения ssl3 неизвестен в студии Android для брокера mosquitto

Прежде всего, извините, я не очень хорошо говорю по-английски. и это мой первый вопрос.

Пытаюсь соединить андроид и Mosquitto-брокер в windows с самоподписанным сертификатом. Мне удалось связать mosquitto-broker и mosquitto_pub с моим самоподписанным сертификатом ( ca.crt, server.key, server.crt, client.key, client.crt)

Конфигурационный файл брокера:

port 8883
cafile : ~~~/ca.crt.pem
keyfile : ~~~/server.key.pem
certfile : ~~~/server.crt.pem
tls_version tlsv1.2
require_certificate true

Опубликовать команду:

mosquitto_pub -h ~~ -p ~~ -t ~~ -m ~~ --cafile ~~/ca.crt.pem --key 
~~/client.key.pem --cert ~~/client.crt.pem

--> хорошо работает

mosquitto_pub -h ~~ -p ~~ -t ~~ -m ~~ --cafile ~~/ca.crt.pem

--> это не работает. я не знаю, почему это не работает.

Но, главное, я не могу подключиться к андроиду.

Я искал, Android использует файл .bks для tls/ssl. поэтому я попытался сделать файл .bks с моими файлами выше.

Порядок, в котором я создал файл: .p12 -> .jks -> .bks

И эти команды:

.p12 : > openssl pkcs12 -export -in client.crt.pem -inkey client.key.pem -out client.p12 -certfile ca.crt.pem
.jks : > keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -srcstorepass 123123 -destkeystore client.jks -deststoretype jks -deststorepass 123123 
.bks : > keytool -importkeystore -srckeystore client.jks -srcstoretype JKS -srcstorepass 123123 -destkeystore client.bks -deststoretype BKS-v1 -deststorepass 123123 -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-162.jar 

Мой код андроида

....
mqttAndroidClient = new MqttAndroidClient(this, "ssl://" + ipAdd.getText().toString() + ":" + port.getText().toString(), ClientID);
            try {
                /**/
                MqttConnectOptions options = new MqttConnectOptions();
                InputStream input = this.getApplication().getAssets().open("server.bks");
                options.setSocketFactory(new TLSSocketFactory(input, "123123"));

                IMqttToken token = mqttAndroidClient.connect(options); 
                token.setActionCallback(new IMqttActionListener() {
                    @Override
                    public void onSuccess(IMqttToken asyncActionToken) {
....
public class TLSSocketFactory extends SSLSocketFactory {

    private SSLSocketFactory internalSSLSocketFactory;

    public TLSSocketFactory(InputStream keyStore, String password) throws KeyManagementException, NoSuchAlgorithmException, IOException, CertificateException, KeyStoreException {
        KeyStore ts;
        ts = KeyStore.getInstance("BKS");
        ts.load(keyStore, password.toCharArray());
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        tmf.init(ts);
        TrustManager[] tm = tmf.getTrustManagers();

        SSLContext context = SSLContext.getInstance("TLSv1.2");
        context.init(null, tm, null);
        internalSSLSocketFactory = context.getSocketFactory();
    }
....

Произошло сообщение о брокере

1564452813: OpenSSL Error: error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown

Я не знаю, что это значит

Помогите пожалуйста мастера.


585
1

Ответ:

Решено

Я нашел это!

Причиной были не код и ключи.

В моей части зависимостей пакета:

implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.1'

Были причиной.

Ошибка не возникает ниже версии mqttv3:1.2.1.

Я не знаю разницы обе версии.