ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AWS IOT及时在Android中注册证书

2019-07-05 21:26:50  阅读:427  来源: 互联网

标签:android mqtt paho iot aws-certificate-manager


我正在通过这篇文章整合JITR.

https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/

我完成了所有这些步骤,并能够通过命令行’mosquitto_pub’验证证书.

第一次运行’mosquitto_pub’命令时,它调用lambda函数来授权它并附加策略,第二次它成功地向IOT发布消息.

这是我正在使用的命令.

mosquitto_pub --cafile ../root.cert --cert hassanAndCACert.crt --key hassan.key -h <###>.iot.us-east-1.amazonaws.com
-p 8883 -q 1 -t  topic5 -i  123456789 --tls-version tlsv1.2 -m '{"hello":"3"}' -d

但是当我尝试在android SDK中对此进行身份验证时,我收到“握手”失败错误.这是我得到的例外.

MqttException (0) – javax.net.ssl.SSLHandshakeException: Handshake
failedat
org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)at
org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:664)at
java.lang.Thread.run(Thread.java:818)Caused by:
javax.net.ssl.SSLHandshakeException: Handshake failedat
com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:441)at
org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:93)at
org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:650)
… 1 moreCaused by: javax.net.ssl.SSLProtocolException: SSL handshake
terminated: ssl=0xb91e9b40: Failure in SSL library, usually a protocol
errorerror:100c5416:SSL
routines:ssl3_read_bytes:SSLV3_ALERT_CERTIFICATE_UNKNOWN
(external/boringssl/src/ssl/s3_pkt.c:972 0xb9215530:0x00000001)at
com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native
Method)at
com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:353)

有趣的是,如果设备证书已经激活,我们尝试通过android发布消息,它会成功发布.唯一的问题是在第一次通话时验证证书.如果我的代码有问题,它不应该针对激活证书发送消息.

我在mosquitto调用和android代码之间看到的区别在于mosquitto正在制作一个连接和发布消息的命令,其中AWS SDK中的PAHO-MQTT需要在发布之前先连接,我在’connect中得到例外”.我甚至没有在AWS日志中获得任何日志.

解决方法:

可能的原因

SSL / TLS握手可能由于各种原因而失败,而不仅仅是证书验证问题.

它可能是:

>不共享相同的密码套件
>不共享SSL版本
>证书验证
>意图改变TLS版本
>其他问题

找出问题的最佳方法是安装Wireshark并查看握手消息.然后,根据从服务器发送到客户端的SSL警报消息,您可以获得有关SSL握手失败的更多信息,具体发生在哪里.

可能解决方案

>解决方案1:此链接也可能有所帮助:Received fatal alert: handshake_failure through SSLHandshakeException
>解决方案2:您可以尝试升级Android应用的密钥库吗?

有用的资源

> https://serverfault.com/questions/639837/openssl-s-client-shows-alert-certificate-unknown-but-all-server-certificates-app#639866
> https://aws.amazon.com/de/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/
> https://aws.amazon.com/de/blogs/mobile/use-your-own-certificate-with-aws-iot/
> https://stackoverflow.com/a/6353956/5157221

标签:android,mqtt,paho,iot,aws-certificate-manager
来源: https://codeday.me/bug/20190705/1391016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有