最近我在測試連接特定服務器時發生了類似的錯誤: 握手失敗;返回-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;
}
還有:
如果您想了解更詳細的,其打印爲低於這個日誌的主要功能沒有答案?驚人!我得到相同的問題 –
請張貼答案 –