我正在尝试使用tls1.2与WolfSSL将嵌入式设备连接到smtp.gmail.com:465。该库创建并发送以下clientHello消息并接收握手失败。
16 03 03 00 4f 01 00 00 4b 03 03 2e 2a ec 85 7f
15 dd 09 5f 22 d1 53 82 60 d7 80 67 28 aa 67 48
ce f0 71 ab 63 d0 b2 3e 55 3a 05 00 00 14 c0 27
c0 23 c0 0a c0 09 c0 07 c0 08 c0 14 c0 13 c0 11
c0 12 01 00 00 0e 00 0d 00 0a 00 08 04 03 02 03
04 01 02 01
这是收到的消息;
15 03 03 00 02 02 28
从wireshark screenshot可以看出,客户端支持以下密码套件;
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007)
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA (0xc008)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
**TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)**
**TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011)**
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012)
...并且客户端支持以下签名算法(请参阅屏幕截图底部的十六进制部分,wireshark不解码签名算法)
04 03: SHA256 EDCSA
02 03: SHA1 EDCSA
04 01: SHA256 RSA
02 01: SHA1 RSA
另一方面,smtp.gmail.com支持以下密码套件; (这是通过在这里运行脚本获得的:“superuser.com/questions/109213/how-do-i-list-the-ssl-tls-cipher-suites-a-particular-website-offers”)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
**TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA**
**TLS_ECDHE_RSA_WITH_RC4_128_SHA**
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
从上面可以看出,这两个套房相匹配。
而且,我已经在“www.digicert.com/help/”(使用“smtp.gmail.com:465”)检查了证书,并得到了这个:Digicert Screenshot
这也匹配
根据“tools.ietf.org/html/rfc5246#section-7.2.2”
Reception of a handshake_failure alert message indicates that the sender was unable to negotiate an acceptable set of security parameters given the options available. This is a fatal error.
据我了解,握手套件和签名算法不匹配还存在其他原因,因为handshake_failure或者我遗漏的东西非常大。我正在寻找失败的原因,但我无法找到。我会感激任何帮助或任何想法。握手失败的原因是什么?
对于无法点击的链接,我感到非常抱歉。 stackoverflow不允许我添加2个以上的链接。当有10个声誉时,我会用常规链接替换它们:)
答案 0 :(得分:1)
我刚刚遇到这个,我意识到这已经很久了。我很遗憾没有早点找到这个。
对于将来遇到这种情况的用户而言......
我知道连接到过去6-9个月内发生变化的Google服务器时的要求。如果客户端hello数据包不包含支持的曲线扩展名,Google服务器将完全忽略任何连接尝试。
您是否可以尝试在构建wolfSSL库时将这些定义添加到默认设置,以便连接到任何Google服务器:
#define HAVE_SUPPORTED_CURVES
#define HAVE_TLS_EXTENSIONS
(对应的配置选项是:" - enable-supportedcurves"它将定义上述两个预处理器宏)
并使用API在任何客户端应用程序中加载至少一条支持的曲线:
wolfSSL_UseSupportedCurve(ssl, <CURVE NAME>);
支持的曲线列表可以在(wolfssl-root)/wolfcrypt/src/ecc.c顶部的评论部分找到