当前位置: 首页 > 知识库问答 >
问题:

硒ssl_client_socket_impl.cc握手失败

籍英叡
2023-03-14

我在使用硒测试时收到此错误

[18912:1216:0116/175151.966:ERROR:ssl_client_socket_impl.cc(960)] handshake failed; returned -1, SSL error code 1, net_error -101

我现在的代码

settings = {
      'proxy':{
          'https':'https://' + proxy 
      }
    }
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors-spki-list')
options.add_argument('--ignore-ssl-errors')
self.driver = webdriver.Chrome(seleniumwire_options=settings, chrome_options=options)

是否有其他方法可以忽略/解决此错误?

共有1个答案

邓令
2023-03-14

根据Chromium的命令行开关列表(适用于您的情况),您需要使用--ignore certificate errors spki list作为webdriver选项参数。

您的代码片段选项。add_参数('--ignore certificate errors spki list')以正确的方式实现了这一点(参见doc,分别是kignorecertificateerrorspkilist[]的Chromium代码库)。有一点离题,不推荐使用--忽略证书错误(如各种StackOverflow问题中所建议的)。

总之,一般来说,你的错误信息(见下文)

[18912:1216:0116/175151.966: ERROR:ssl_client_socket_impl.cc(960)]握手失败;返回-1, SSL错误代码1,net_error-101

推断Selenium ChromeDriver和Chrome浏览器之间的握手在执行过程中失败。如果我们看一下ssl\u client\u socket\u impl。cc,我们可以看到SSLClientSocketImpl::DoHandshake()(这会导致您的错误):

int SSLClientSocketImpl::DoHandshake() {
  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
  int rv = SSL_do_handshake(ssl_.get());
  int net_error = OK;
  if (rv <= 0) {
    int ssl_error = SSL_get_error(ssl_.get(), rv);
    if (ssl_error == SSL_ERROR_WANT_X509_LOOKUP && !send_client_cert_) {
      return ERR_SSL_CLIENT_AUTH_CERT_NEEDED;
    }
    if (ssl_error == SSL_ERROR_WANT_PRIVATE_KEY_OPERATION) {
      DCHECK(client_private_key_);
      DCHECK_NE(kSSLClientSocketNoPendingResult, signature_result_);
      next_handshake_state_ = STATE_HANDSHAKE;
      return ERR_IO_PENDING;
    }
    if (ssl_error == SSL_ERROR_WANT_CERTIFICATE_VERIFY) {
      DCHECK(cert_verifier_request_);
      next_handshake_state_ = STATE_HANDSHAKE;
      return ERR_IO_PENDING;
    }
    OpenSSLErrorInfo error_info;
    net_error = MapLastOpenSSLError(ssl_error, err_tracer, &error_info);
    if (net_error == ERR_IO_PENDING) {
      // If not done, stay in this state
      next_handshake_state_ = STATE_HANDSHAKE;
      return ERR_IO_PENDING;
    }
    LOG(ERROR) << "handshake failed; returned " << rv << ", SSL error code "
               << ssl_error << ", net_error " << net_error;
    NetLogOpenSSLError(net_log_, NetLogEventType::SSL_HANDSHAKE_ERROR,
                       net_error, ssl_error, error_info);
  }
  next_handshake_state_ = STATE_HANDSHAKE_COMPLETE;
  return net_error;
}

如前所述,主要问题是握手失败——特别是当ChromeDriver请求与Chrome中的SSL页面握手时。开发团队知道这个错误(或者广义地说,它已经被多次报告)。

不幸的是,你无法修复这个错误!幸运的是,这个错误不会中断你的程序。如果你只为消息本身感到烦恼,可以通过选项压缩所有警告消息。添加参数('log-level=INT'),而INT可能是记录在案的日志级别之一:

日志级别:设置最低日志级别。有效值介于0到3之间:

INFO = 0, 
WARNING = 1, 
LOG_ERROR = 2, 
LOG_FATAL = 3.

默认为0。

引自这个问题。

因此,您可以使用选项。添加_参数('log-level=3')以抑制所有类型的信息、警告、错误或致命消息(可能建议对错误只使用级别2)。请记住,您不会看到任何其他可能导致生产混乱的错误相关消息!

 类似资料:
  • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

  • 我通过受ssl v3保护的cxf使用soap服务。我从服务器下载.cer文件,并通过keytool使用以下指令创建JKS文件: 在java代码中,我将此代码用于客户端配置: 对于调用此代码的服务: 当我运行代码时,会发生此错误: 我搜索此错误,我意识到该错误是针对不良信任存储的。但我不知道如何生成正确的信任库。

  • 我正在对我们的数据库服务进行超文本传输协议请求的大循环。一切都很好,但是每当我运行它时,在成功查询(看似随机)数量后,我都会收到以下错误:

  • 问题内容: 我正在尝试将Jenkins CI配置为对我们的项目执行持续集成,并且无法使其通过https连接到我们的SVN存储库。每当我尝试配置存储库URL并尝试连接时,都会遇到以下异常: 我在tomcat实例上启用了SSL调试(使用),并得到了以下信息: 我尝试按照这篇文章中的说明在tomcat中添加属性,但仍然出现相同的错误。 在这一点上,我对发生的事情完全感到困惑。不幸的是,我不是完全了解SS

  • 问题内容: 我已经将证书导入到信任库中,但是仍然无法成功连接到该URL。我已经尝试了所有方法,任何人都可以看到输出并提供帮助吗? 无法弄清楚这是什么,应用程序正在使用java1.6,但是SSLPoke无法通过两种情况 问题答案: 我发现客户也进行了验证。因此它是2路身份验证。客户还必须将我的公共证书导入其密钥库。

  • 问题内容: 我正在对branch.io进行以下调用 它在我的本地计算机上工作正常,但在服务器上失败。 OpenSSL版本: 本地:OpenSSL 0.9.8zg 2015年7月14日 伺服器:OpenSSL 0.9.8e-fips-rhel5 2008年7月1日 Python : 本地:2.7.10服务器:2.7.6 分支io服务器连接 : Chrome浏览器确认DigiCert SHA2 Sec