bma*_*man 5 ssl android ssl-certificate
我有一个Android应用程序,可以在我的家庭网络上工作,并没有这些握手错误.然而,当将此应用程序发送到我的客户端并通过他们的wifi网络测试时,我得到这些日志.
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:
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序内部的android webview中加载了https URLS.除了这些错误,我没有其他信息.你们有没有想过为什么会在特定网络上发生这种情况,我现在真的没有想法.
小智 1
最近我在测试连接特定服务器时出现了类似的错误:握手失败;返回 -1,SSL 错误代码 1,net_error -103
我从chromium源码中搜索到了一些有用的原因,其中指出了ret代码的含义。也许它可以帮助你找到原因。
SSL 错误代码 5:
铬//src/third_party/boringssl/src/include/openssl/ssl.h
/* SSL_ERROR_SYSCALL 指示库外部操作失败。调用者应该查阅系统特定的错误机制。这通常是 |errno| 但如果使用自定义 |BIO| 则可能是自定义的。如果传输返回 EOF,也可能会发出信号,在这种情况下,操作的返回值将为零。*/
define SSL_ERROR_SYSCALL 5
Run Code Online (Sandbox Code Playgroud)
网络错误-107
// 发生 SSL 协议错误。
NET_ERROR(SSL_PROTOCOL_ERROR, -107)
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多详细信息,打印此日志的主要函数如下:
铬//src/net/socket/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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |