AWS IOT及时在Android中注册证书

我正在通过这篇文章整合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

点赞