Ssl 即使密码套件相同,Tls握手也会失败

Ssl 即使密码套件相同,Tls握手也会失败,ssl,client,tls1.2,wolfssl,mbedtls,Ssl,Client,Tls1.2,Wolfssl,Mbedtls,我在安全连接到www.howsmyssl.com/a/check时遇到一些问题。我正在使用wolfSSL连接,但是,握手总是失败致命错误警报40。我试图嗅探网络以查看数据包,查看到底发送了什么以及支持哪些密码套件。根据SSLLAB的测试,我发现,howsmyssl.com和我的客户机有共同的密码套件。所以我真的不知道错误发生在哪里。 这是客户端的跟踪: 这是对www.howsmyssl.com的ssllabs分析的一个补充。在这里,您可以看到它们有共同的密码套件,例如0xc02f,所以我认为连接

我在安全连接到www.howsmyssl.com/a/check时遇到一些问题。我正在使用wolfSSL连接,但是,握手总是失败致命错误警报40。我试图嗅探网络以查看数据包,查看到底发送了什么以及支持哪些密码套件。根据SSLLAB的测试,我发现,howsmyssl.com和我的客户机有共同的密码套件。所以我真的不知道错误发生在哪里。 这是客户端的跟踪:

这是对www.howsmyssl.com的ssllabs分析的一个补充。在这里,您可以看到它们有共同的密码套件,例如0xc02f,所以我认为连接应该成功,或者我遗漏了什么

编辑: 以下是wolfssl的调试日志

[0;32mI (6565) openssl_example: OpenSSL demo thread start OK[0m
[0;33mW (6565) openssl_example: Size of long = 4, Size of longlong = 8
[0m
[0;32mI (6565) openssl_example: get target IP address[0m
[0;32mI (6595) openssl_example: OK[0m
[0;32mI (6595) openssl_example: 104.196.190.195[0m
wolfSSL Entering wolfSSL_Init
wolfSSL Entering wolfCrypt_Init
[0;32mI (6595) openssl_example: create SSL context ......[0m
wolfSSL Entering WOLFSSL_CTX_new_ex
wolfSSL Entering wolfSSL_CertManagerNew
wolfSSL Leaving WOLFSSL_CTX_new, return 0
[0;32mI (6615) openssl_example: OK[0m
wolfSSL Entering wolfSSL_CTX_set_verify
wolfSSL Entering wolfSSL_CTX_load_verify_buffer
Getting into SSL_FILETYPE_PEM if
Processing CA PEM file
wolfSSL Entering PemToDer
Adding a CA
wolfSSL Entering GetExplicitVersion
wolfSSL Entering GetSerialNumber
Got Cert Header
wolfSSL Entering GetAlgoId
wolfSSL Entering GetObjectId()
Got Algo ID
Getting Cert Name
Getting Cert Name
Got Subject Name
wolfSSL Entering GetAlgoId
wolfSSL Entering GetObjectId()
Got Key
Parsed Past Key
wolfSSL Entering DecodeCertExtensions
wolfSSL Entering GetObjectId()
wolfSSL Entering DecodeSubjKeyId
wolfSSL Entering GetObjectId()
wolfSSL Entering DecodeAuthKeyId
wolfSSL Entering GetObjectId()
wolfSSL Entering DecodeBasicCaConstraint
wolfSSL Entering GetAlgoId
wolfSSL Entering GetObjectId()
    Parsed new CA
    Freeing Parsed CA
    Freeing der CA
        OK Freeing der CA
wolfSSL Leaving AddCA, return 0
1
   Processed a CA
wolfSSL Entering PemToDer
Couldn't find PEM header
-372
CA Parse failed, no progress in file.
Do not continue search for other certs in file
Processed at least one valid CA. Other stuff OK
[0;32mI (6715) openssl_example: create socket ......[0m
[0;32mI (6725) openssl_example: OK[0m
[0;32mI (6725) openssl_example: bind socket ......[0m
[0;32mI (6735) openssl_example: OK[0m
[0;32mI (6735) openssl_example: socket connect to remote www.howsmyssl.com ......[0m
[0;32mI (6865) openssl_example: OK[0m
[0;32mI (6865) openssl_example: create SSL ......[0m
wolfSSL Entering SSL_new
wolfSSL Leaving SSL_new, return 0
[0;32mI (6865) openssl_example: OK[0m
wolfSSL Entering SSL_set_fd
wolfSSL Entering SSL_set_read_fd
wolfSSL Leaving SSL_set_read_fd, return 1
wolfSSL Entering SSL_set_write_fd
wolfSSL Leaving SSL_set_write_fd, return 1
[0;32mI (6885) openssl_example: SSL connected to www.howsmyssl.com port 443 ......[0m
wolfSSL Entering SSL_connect()
growing output buffer

Shrinking output buffer

connect state: CLIENT_HELLO_SENT
received record layer msg
got ALERT!
Got alert
wolfSSL error occurred, error = 40
wolfSSL error occurred, error = -313
[0;32mI (7065) openssl_example: OK[0m
wolfSSL Entering wolfSSL_get_cipher
wolfSSL Entering SSL_get_current_cipher
wolfSSL Entering SSL_CIPHER_get_name
wolfSSL Entering wolfSSL_get_cipher_name_from_suite
READ USED CIPHERSUITE: NONE
[0;32mI (7085) openssl_example: send https request to www.howsmyssl.com port 443 ......[0m
wolfSSL Entering SSL_write()
handshake not complete, trying to finish
wolfSSL Entering wolfSSL_negotiate
wolfSSL Entering SSL_connect()
ProcessReply retry in error state, not allowed
wolfSSL error occurred, error = -313
wolfSSL Leaving wolfSSL_negotiate, return -1
wolfSSL Leaving SSL_write(), return -1
[0;32mI (7115) openssl_example: failed[0m
wolfSSL Entering SSL_shutdown()
wolfSSL Leaving SSL_shutdown(), return -1
wolfSSL Entering SSL_free
CTX ref count not 0 yet, no free
wolfSSL Leaving SSL_free, return 0
wolfSSL Entering SSL_CTX_free
CTX ref count down to 0, doing full free
wolfSSL Entering wolfSSL_CertManagerFree
wolfSSL Leaving SSL_CTX_free, return 0
I (14055) wifi: pm start, type:0
更新 我尝试连接到www.google.com,成功了。没有对我的代码进行任何更改,因此我认为这将是一个服务器问题。但是,当我使用mbedtls连接到www.howsmyssl.com时,请求也会成功,在通过嗅探网络比较数据包后,我看不到任何重大差异。

仅从客户端共享客户端Hello在这里没有帮助。您需要收集一些与SSL相关的日志。我不是wolfssl专家,但当您使用-enable-debug编译它时,它似乎会暴露额外的日志。我提到:

密码套件不是唯一可能出错的东西。如果服务器期望客户机Hello中的某个TLS扩展具有某种格式,并且即使在这种情况下也不接受,则服务器可以终止握手

参考此线程:

没有调试日志,这就像在黑暗中拍摄

更新:

以下是日志中的错误:

wolfSSL error occurred, error = 40
wolfSSL error occurred, error = -313
313表示服务器不喜欢客户端发送的以下内容之一:

密码套件 TLS扩展 因为您已经指定了受支持的曲线,所以可以尝试启用静态密钥密码套件。在WolfSSL中,默认情况下似乎禁用了这些功能

仅仅从客户那里分享客户的问候在这里没有帮助。您需要收集一些与SSL相关的日志。我不是wolfssl专家,但当您使用-enable-debug编译它时,它似乎会暴露额外的日志。我提到:

密码套件不是唯一可能出错的东西。如果服务器期望客户机Hello中的某个TLS扩展具有某种格式,并且即使在这种情况下也不接受,则服务器可以终止握手

参考此线程:

没有调试日志,这就像在黑暗中拍摄

更新:

以下是日志中的错误:

wolfSSL error occurred, error = 40
wolfSSL error occurred, error = -313
313表示服务器不喜欢客户端发送的以下内容之一:

密码套件 TLS扩展
因为您已经指定了受支持的曲线,所以可以尝试启用静态密钥密码套件。在WolfSSL中,默认情况下似乎禁用了这些功能

警报40并不意味着没有共同的密码套件。是的,我知道。这意味着在握手过程中出现了问题,在本例中,客户端hello消息出现了问题。所以我检查了我的整个痕迹,看看是否有什么东西丢失了,但我不这么认为。服务器还支持至少一个密码套件。我认为这就是客户问候信息中可能出现的问题。不。它的意思是:“接收到握手失败警报消息表示发送方无法在提供可用选项的情况下协商一组可接受的安全参数。这是一个致命错误。“警报40并不意味着没有共同的密码套件。是的,我知道。这意味着在握手过程中出现了问题,在本例中,客户端hello消息出现了问题。所以我检查了我的整个痕迹,看看是否有什么东西丢失了,但我不这么认为。服务器还支持至少一个密码套件。我认为这就是客户问候信息中可能出现的问题。不。它的意思是:“接收到握手失败警报消息表示发送方无法在提供可用选项的情况下协商一组可接受的安全参数。这是一个致命错误。'我添加了调试日志。我已经启用了tls扩展并定义了支持的曲线,所以这不是问题所在。然后查看扩展。可能出错的事情太多了。此外,如果您有权访问服务器端SSL日志,则调试会更容易。更新了我的响应。您可以尝试启用静态密钥密码套件吗?这是可行的,但我在wolfssl的自述文件中读到,它们已被弃用,并且在将来的tls版本中将不受支持。所以,使用它们不是很不安全吗?也许,我认为您可能需要向wolfssl了解如何进行这项工作。另外,服务器需要回答为什么不接受ECC密码。我添加了调试日志。我已经启用了tls扩展并定义了
支持_曲线,所以这不是问题。然后查看扩展。可能出错的事情太多了。此外,如果您有权访问服务器端SSL日志,则调试会更容易。更新了我的响应。您可以尝试启用静态密钥密码套件吗?这是可行的,但我在wolfssl的自述文件中读到,它们已被弃用,并且在将来的tls版本中将不受支持。所以,使用它们不是很不安全吗?也许,我认为您可能需要向wolfssl了解如何进行这项工作。此外,服务器需要回答为什么不接受ECC密码。