- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 CURL 通过 SSL 请求 URI 的 PHP 组件中遇到以下错误:
cURL error 35: gnutls_handshake() failed: A TLS packet with unexpected length was received.
此错误发生在 travis-ci.org 环境中,但不会发生在我们的任何测试环境中。请参阅 travis-ci 构建 144663700 .
我发现 Travis Worker 中运行的 PHP 版本在“Ubuntu 12.04.5 LTS”上再次编译为“GnuTLS/2.12.14”,或者在“Ubuntu 14.04.3 LTS”上再次编译为“GnuTLS/2.12.23” ”。
在我们的开发环境中,我们使用针对 Debian(各个版本)上的“OpenSSL/1.0.1t”编译的标准包。
因此,我认为问题与“GnuTLS/2.12.14”或“GnuTLS/2.12.23”或编译它们的参数有关。
我尝试使用 CURL 常量 CURLOPT_SSLVERSION 限制 SSL 版本,但这并不能解决问题。
根据 www.ssllabs.com,相关主机 - api.reporting.cloud - 支持 TLS 1.2、TLS 1.1 和 TLS 1.0。
有人可以给我任何提示或指示吗?
最佳答案
此问题的解决方法是将 travis-ci 配置为使用标准 Ubuntu Trusty php5-cli 和 php5-curl 软件包。标准包提供 CURL_SSLVERSION_TLSv1_1 常量。
.travis.yml 文件如下所示:
sudo: required
dist: trusty
language: php
before_install:
- sudo apt-get -y install git zip php5-cli php5-curl
before_script:
- php -r "printf('PHP %s', phpversion());"
- composer self-update
- composer install --no-interaction
script:
- mkdir -p ./build/logs
- ./vendor/bin/phpunit
在 PHP 源代码中,在 travis-ci 执行 PHP 代码的情况下,只需设置上述常量即可:
if (getenv('TRAVIS')) {
$options['curl'][CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1_1;
}
此解决方法的缺点是它仅适用于 Ubuntu Trusty 提供的特定 PHP 版本 (PHP 5.5)。考虑到 PHP 5.5 已于 2016 年 7 月 10 日终止生命,此解决方案 Not Acceptable 。
travis-ci 更新到 Ubuntu 16.04 LTS 是理想的选择,但 travis-ci 基础设施经理 Brandon Burton wrote 2016 年 2 月 28 日:
Given that, we are currently focused on support 12.04 and 14.04 as our primary environments. At the moment, it is unlikely that we'll be supporting 16.04 as a native environment this year.
因此,我们似乎暂时只能使用 Ubuntu Trusty。
这个问题的根源在于,在 travis-ci 上运行的 PHP 版本是使用 2011 年起的 gnutls-cli (GnuTLS) 2.12.23 编译的。这个特定版本的 gnutls-cli 存在一些问题(但不是全部) ) TLS 1.2 连接。
@travis-ci:是否可以针对更现代的 GnuTLS 版本(或者至少是更好地支持 TLS 1.2 的版本)重新编译您使用的 PHP 版本?
关于php - curl 错误 35 : gnutls_handshake() failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38375211/
我研究了这个问题,找不到任何指向这个错误的指针。我实际上是在尝试使用 libcurl 程序连接到服务器。 https://curl.haxx.se/libcurl/c/ftpsget.html 该程序
昨天我从一个新的 Ubuntu 12.04 LTS 镜像设置了一个新服务器。我在 1.7.9.5 版本中安装了 git-core。现在,我尝试克隆现有存储库时出现以下错误: error: gnutls
最近,我试图从我的 debian(jessie) 机器上克隆一个 git 仓库,我遇到了这个: fatal: unable to access 'https://github.com/foo/bar/
我正在尝试在我的Stretch Debian上安装docker。 我关注了the guide,但是当我使用“sudo apt-get update”时,我得到了: https://download.d
我有一个问题,当我执行 curl 请求或 git push 时,显示给我 curl: (35) gnutls_handshake() failed: Public key signature veri
我正在尝试按照此 site 在 Ubuntu14.04 上安装 jenkins . 执行最后一步后,终端显示此错误: Err https://pkg.jenkins.io/debian-stable/
我在使用 git pull 命令时遇到错误 fatal: unable to access 'https://github.com/path/to/repo.git/': gnutls_handsha
我已经使用 git 一段时间没有问题,然后在使用 git push 时突然开始抛出这个错误: error: gnutls_handshake() failed: A TLS packet with u
一切正常,但突然我收到错误: fatal: unable to access'https://username@bitbucket.org/name/repo_name.git/':gnutls_ha
我在使用 CURL 通过 SSL 请求 URI 的 PHP 组件中遇到以下错误: cURL error 35: gnutls_handshake() failed: A TLS packet with
我正在使用标准过程为在Kubernetes上运行的应用程序启用HTTPS终止,方法是: -入口nginx -AWS ELB经典 -用于加密的证书管理器 我已使用此处描述的过程:https://www.
当尝试 git clone 任何存储库时出现此错误 fatal: unable to access : gnutls_handshake() failed: Close notify 以防它对我使用
当我尝试克隆 git 存储库时出现以下错误。我也正确配置了 rsa 公钥。 $ git clone https://github.com/blah/blah.git Initialized empty
我在新创建的带有 bitbucket 的 Ubuntu 16.04 操作系统上遇到问题。 当我从 bitbucket 克隆 repo 时存储库我得到以下错误 Cloning into 'my-demo
我已经在 ubuntu 14.04 上成功编译了 php7.1.30。当我测试代码的和平时 / Get cURL resource $curl = curl_init(); // Set some o
我实际上是在尝试执行以下操作: http://curl.haxx.se/libcurl/c/https.html 我的 apache 服务器设置了 mod_ssl 和服务器证书。我添加了这一行: cu
我在 armv7l 上运行 Ubuntu 18.04 LTS。我在代理内运行 git clone(我正确设置了代理变量),但现在我明白了; fatal: unable to access '.git/
这个问题发生在我的 Ubuntu 12.04,Git 版本 1.7.9.5 总是出现错误消息“错误:gnutls_handshake() 失败:接收到具有意外长度的TLS 数据包...” 当我通过我们
我从我的服务器向其他服务器(http://example.com:8180)发送 api 请求 我得到这个错误 "cURL error 35: gnutls_handshake() failed :
我在生产环境中使用 Django 应用程序与 Celery 和 Amazon SQS 一起工作。每天在我的 celery 日志中我都可以看到有 SSL 错误: [ERROR/MainProcess]
我是一名优秀的程序员,十分优秀!