2013-12-11 237 views
4

我有一個Android應用程序在我的家庭網絡上工作,並沒有這些握手錯誤。但是,當這個應用程序發送到我的客戶端,並通過他們的無線網絡進行測試時,我得到這些日誌Android SSL錯誤握手失敗

E/chromium(15135): external/chromium/net/socket/ssl_client_socket_openssl.cc:792: [1211/175912:ERROR:ssl_client_socket_openssl.cc(792)] handshake failed; returned 0, SSL error code 5, net_error -107 
W/chromium(15135): external/chromium/net/http/http_stream_factory_impl_job.cc:865: [1211/175912:WARNING:http_stream_factory_impl_job.cc(865)] Falling back to SSLv3 because host is TLS intolerant: 

我在我的應用程序裏面加載了一個android webview的https URL。除了這些錯誤之外,我沒有其他信息。你們有什麼想法,爲什麼會發生在一個特定的網絡上,我現在真的沒有想法。

+1

還有:

如果您想了解更詳細的,其打印爲低於這個日誌的主要功能

沒有答案?驚人!我得到相同的問題 –

+0

請張貼答案 –

回答

1

最近我在測試連接特定服務器時發生了類似的錯誤: 握手失敗;返回-1,SSL錯誤代碼1,net_error -103

我發現一些有用的理由,從鉻源代碼搜索,這表明ret代碼的含義。也許它可以幫助您找到原因。

SSL錯誤代碼5:

鉻// SRC/THIRD_PARTY/boringssl/SRC /包含/ OpenSSL的/ ssl.h

/* SSL_ERROR_SYSCALL指示操作外部未能將圖書館。 調用者應該諮詢系統特定的錯誤機制。這通常是| | errno |但如果使用自定義| BIO |可能是自定義的東西。如果運輸返回EOF,它也可以用信號通知,在這種情況下,運行的返回值將爲零。 */

define SSL_ERROR_SYSCALL 5 

net_error -107

//發生SSL協議錯誤。

鉻// SRC/NET /插座/ ssl_server_socket_impl.cc

int SSLServerSocketImpl::DoHandshake() { 
     crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); 
     int net_error = OK; 
     int rv = SSL_do_handshake(ssl_.get()); 

     if (rv == 1) { 
     completed_handshake_ = true; 
     // The results of SSL_get_peer_certificate() must be explicitly freed. 
     bssl::UniquePtr<X509> cert(SSL_get_peer_certificate(ssl_.get())); 
     if (cert) { 
     // The caller does not take ownership of SSL_get_peer_cert_chain's 
     // results. 
     STACK_OF(X509)* chain = SSL_get_peer_cert_chain(ssl_.get()); 
     client_cert_ = CreateX509Certificate(cert.get(), chain); 
     if (!client_cert_.get()) 
     return ERR_SSL_CLIENT_AUTH_CERT_BAD_FORMAT; 
    } 
    } else { 
    int ssl_error = SSL_get_error(ssl_.get(), rv); 
    OpenSSLErrorInfo error_info; 
    net_error = MapOpenSSLErrorWithDetails(ssl_error, err_tracer, 
&error_info); 

    // SSL_R_CERTIFICATE_VERIFY_FAILED's mapping is different between client and 
    // server. 
    if (ERR_GET_LIB(error_info.error_code) == ERR_LIB_SSL && 
     ERR_GET_REASON(error_info.error_code) == 
     SSL_R_CERTIFICATE_VERIFY_FAILED) { 
     net_error = ERR_BAD_SSL_CLIENT_AUTH_CERT; 
    } 

    // If not done, stay in this state 
    if (net_error == ERR_IO_PENDING) { 
     GotoState(STATE_HANDSHAKE); 
    } else { 
     LOG(ERROR) << "handshake failed; returned " << rv << ", SSL error code " 
       << ssl_error << ", net_error " << net_error; 
     net_log_.AddEvent(
      NetLogEventType::SSL_HANDSHAKE_ERROR, 
      CreateNetLogOpenSSLErrorCallback(net_error, ssl_error, 
error_info)); 
    } 
    } 
    return net_error; 
}