2017-07-04 44 views
1

在與www.howsmyssl.com/a/check進行安全連接時遇到了一些麻煩。我正在使用wolfSSL連接,但是,握手總是失敗(致命錯誤警報40)。我試圖嗅探網絡以查看數據包以查看究竟發送了什麼以及支持哪些密碼組,我發現根據ssllabs的測試,howsmyssl.com和我的客戶端都有密碼套件。所以我不知道錯誤發生在哪裏。 這是客戶的跟蹤:儘管密碼套件共同失敗,但握手失敗

trace

這是一個link到www.howsmyssl.com的ssllabs analysation。在這裏你可以看到他們有共同的密碼組(例如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 

UPDATE的調試日誌 我試圖連接到www.google.com,這成功。我的代碼沒有改變,所以我認爲這將是一個服務器問題。但是,當我使用mbedtls連接到www.howsmyssl.com時,請求也會成功,並且在通過嗅探網絡比較數據包之後,我看不到任何重大差異。

+0

警報40並不意味着沒有密碼套件的共同點。 – EJP

+0

是的,我知道。這意味着握手過程中出現問題(在這種情況下,客戶端問候消息)。所以我檢查了我的全部痕跡,看看是否有遺漏,但我不這麼認爲。服務器還支持至少一個密碼套件。我認爲這是客戶問好消息可能出錯的事情。 – user3371198

+0

否。它意味着[RFC 2246#7.2.2](https://www.ietf.org/rfc/rfc2246):'接收到handshake_failure警報消息表明發件人無法協商一組可接受的安全 給出了可用選項的參數。這是一個致命的錯誤。' – EJP

回答

5

僅僅分享客戶端你好從客戶端不會幫助這裏。您需要收集一些與SSL相關的日誌。我不是wolfssl專家,但看起來像它使用--enable-debug進行編譯時顯示額外的日誌。我提到這個:WolfSL - SSL Alert fatal error

密碼套件是不是唯一可以出錯。如果服務器以某種格式預計某個TLS分機客戶端Hello中,並且即使在這種情況下它也不被接受,那麼服務器可以終止握手。

請參閱本主題以供參考:SSL handshake_failure after clientHello

沒有調試日誌,它會像在黑暗中拍攝。

UPDATE:

因此,這些都是在日誌中的錯誤:

wolfSSL error occurred, error = 40 
wolfSSL error occurred, error = -313 

313表示服務器要麼不喜歡在客戶端的操作發送的一個:

  • 密碼套件
  • TLS擴展

由於您已經指定了支持的曲線,因此您可以嘗試啓用靜態密鑰密碼套件。這些似乎在WolfSSL默認禁用。WolfSSL - Supported Cipher Suites

+0

我添加了調試日誌。我已經啓用了tls擴展並定義了HAVE_SUPPORTED_CURVES,所以這不是問題。 – user3371198

+0

然後查看**擴展**。只有很多事情可能會出錯。另外,如果您有權訪問服務器端SSL日誌,則調試將更容易。 –

+0

更新了我的回覆。你可以嘗試啓用靜態密鑰密碼套件嗎? –