首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssl3警告证书在安卓studio上未知,无法通知蚊子代理

ssl3警告证书在安卓studio上未知,无法通知蚊子代理
EN

Stack Overflow用户
提问于 2019-07-30 10:40:03
回答 1查看 521关注 0票数 0

首先,对不起,我的英语不好。这是我的第一个问题。

我正在尝试用自签名证书连接windows中的android和Mosquitto broker。我成功地用我的自签名证书( ca.crtserver.keyserver.crtclient.keyclient.crt )连接了蚊子经纪人和mosquitto_pub

broker配置文件:

代码语言:javascript
复制
port 8883
cafile : ~~~/ca.crt.pem
keyfile : ~~~/server.key.pem
certfile : ~~~/server.crt.pem
tls_version tlsv1.2
require_certificate true

发布命令:

代码语言:javascript
复制
mosquitto_pub -h ~~ -p ~~ -t ~~ -m ~~ --cafile ~~/ca.crt.pem --key 
~~/client.key.pem --cert ~~/client.crt.pem

-->它运行良好

代码语言:javascript
复制
mosquitto_pub -h ~~ -p ~~ -t ~~ -m ~~ --cafile ~~/ca.crt.pem

-->它不起作用。我不知道为什么它不能工作。

但是,重要的是我无法连接到android。

我已经搜索过了,安卓使用.bks文件到tls/ssl。所以我试着用上面的文件做.bks文件。

我创建该文件的顺序是.p12 -> .jks -> .bks

和这些命令:

代码语言:javascript
复制
.p12 : > openssl pkcs12 -export -in client.crt.pem -inkey client.key.pem -out client.p12 -certfile ca.crt.pem
代码语言:javascript
复制
.jks : > keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -srcstorepass 123123 -destkeystore client.jks -deststoretype jks -deststorepass 123123 
代码语言:javascript
复制
.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 

我的android代码是

代码语言:javascript
复制
....
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) {
....
代码语言:javascript
复制
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();
    }
....

broker上发生的消息是

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

我不知道这是什么意思

请帮帮我,大师们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 12:14:48

我找到了!

原因不是代码和密钥。

在我的包依赖部分:

代码语言:javascript
复制
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.1'

都是原因。

mqttv3:1.2.1版本以下未出现错误。

我不知道两个版本有什么不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57263649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档