在OSX上使用AWS MQTT

10
在OSX应用程序这里,我可以在iOS9中使用AWS MQTT,但是当我尝试在OSX10.11中执行相同的操作时,出现以下错误:

CFNetwork SSLHandshake failed (-9829)

错误-9828被定义为

errSSLPeerCertUnknown=-9829,/*未知证书*/

我的OSX info.plist如下:

<key>NSAppTransportSecurity</key>
    <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
            <key>NSExceptionDomains</key>
            <dict>
                    <key>amazonaws.com</key>
                    <dict>
                            <key>NSExceptionRequiresForwardSecrecy</key>
                            <false/>
                            <key>NSExceptionAllowsInsecureHTTPLoads</key>
                            <true/>
                            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                            <string>TLSv1.0</string>
                            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                            <false/>
                            <key>NSIncludesSubdomains</key>
                            <true/>
                    </dict>
                    <key>amazonaws.com.cn</key>
                    <dict>
                            <key>NSExceptionRequiresForwardSecrecy</key>
                            <false/>
                            <key>NSExceptionAllowsInsecureHTTPLoads</key>
                            <true/>
                            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                            <string>TLSv1.0</string>
                            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                            <false/>
                            <key>NSIncludesSubdomains</key>
                            <true/>
                    </dict>
            </dict>
    </dict>

通过运行"openssl pkcs12 -info -in awsiot-identity.p12" 命令生成的p12文件包含以下内容:

MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: 5F 80 DC 6E AB F1 98 6A AA FC 0B 7B 04 F9 0E 66 99 E9 86 4F 
subject=/CN=AWS IoT Certificate
issuer=/OU=Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US
-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIUJQgfGjmoboOQ7eJo+NTRs5wr8KMwDQYJKoZIhvcNAQEL
BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTE2MDcyNTA2NDU0
NloXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK57RCK3ppDk22TPA+97
2coZeo36lJpZ9M/0l6xHyeQiiVZMKGrkP3S+ej4Dgd+q4gviB2g5dc9T6jMwRSA8
qkdadxspSmEtCCwdFY3poVOpsD7Z0s3lVwBSgTiztfQo15yTyIjhkS0gS9tBg1sI
xIJoYuxXEHkoJKHum8yaluL71jYLxdmp5YHGVHZ55ussZUrWuE4ut4EbHJ8+Ef+z
caJtJB6YMEeKpKMvZ0vrb+jHytD6s7K20SnfTvEHsXNwWIfwXsxmqkG9KHT7q9Dd
XlaeKiP0tWE/8ObOPk1W7xT9HTAvkrveJIEFYhMcfi0yTtxm9CyEG0p36yor2HAK
T/UCAwEAAaNgMF4wHwYDVR0jBBgwFoAU8Kei7lBQZkzRV3if5sWxgF9WtM8wHQYD
VR0OBBYEFM7oRgS5iXeFPcI4pzY/0BQCCE3mMAwGA1UdEwEB/wQCMAAwDgYDVR0P
AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQBDzKiP+Gldz4RUe0QyMcYDWS0V
/3PeJTRjoD7IxUOO9czCZoCX46dxJkP1ijzuuqneaEPK7OUQxoHepqPdlbsycXv3
i/Ty649c/d2dizYqO2iM+6M+xdDLYPBmEAD4aQ9Qj8TpnC5OCSdqGq9XCFLTnz4j
icx2lYS3COdfZbKs9KQG7dkPK7CWSjHHy21Ftz0zBx7wj5v+2lNbcHCFmYn9+lYg
Jw1zUR/rGqTcQZHGUvgv3Mfp8xWtHDFhYAKnwGbhIxCanOM6An+yzEwLUEvkQ81Q
Lzv/yReCVHO4M0+JTW4Fu6BWEaTThPzdN3kQbIzJsViIL9Q6dfAXlvepkHr4
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    localKeyID: 5F 80 DC 6E AB F1 98 6A AA FC 0B 7B 04 F9 0E 66 99 E9 86 4F 
Key Attributes: <No Attributes>

为什么OSX失败了,但iOS成功了?

4个回答

1
它失败了,因为SSL握手问题。它检测到一个无效的证书。 曾经有一个类似的问题被报告并解决在这里,引用了相同的错误代码。该问题被追踪到P12文件中多个身份不匹配所致。 在那种情况下,P12文件中有两个证书,但代码只读取第一个证书。 我建议转储.P12文件的内容,并确认证书。将它们发布在此处以供审查。

我已经发布了p12文件。但是我在里面没有看到两个身份。 - Yusuf X
嗨Rodrigo,我可以付款让你帮我解决这个问题。请通过mi sitio web tel punto red与我联系。 - Yusuf X

0

你的 OS X 上缺少证书签名 CA,这取决于你创建证书的方式,你需要将 CA 导入到你的钥匙串中。请参考这里


0

这些答案都没有帮到我。最终我从亚马逊得到了一个回答,说“我们还不支持OSX MQTT。” 这并不是特别有用的信息,而且令人沮丧的是,这个密钥在某些机器上有时候可以使用,但现在我的选择只有:

  1. 等待亚马逊未来可能支持OSX MQTT
  2. 使用嵌入式C SDK进行MQTT

我已经将iOS SDK AWSCore和AWSIoT框架的非常基本的端口移植到了OS X。这里有一个示例应用程序,展示了如何连接:https://github.com/bdpdx/AWS-MQTT-IoT-Client-MacOSX - par

0
我们最近在MAC应用商店发布了MQTTBox应用程序,用于创建MQTT客户端和负载测试MQTT。您可以连接到任何可用的MQTT代理。这可能对您有所帮助。请查看link以获取更多详细信息。
注意:我是这个工具的开发人员之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接