我是linux平台的新手,我想为ubuntu提取gnutls.如果我做,
$ls
Run Code Online (Sandbox Code Playgroud)
然后,它将在下面显示这些文件.
gnutls-3.2.1.tar.lz
gnutls-3.2.1.tar.lz.sig
gnutls-3.2.1.tar.xz
gnutls-3.2.1.tar.xz.sig
Run Code Online (Sandbox Code Playgroud)
当我发出命令时,
$ tar -xvf gnutls-3.2.1.tar.xz
Run Code Online (Sandbox Code Playgroud)
我得到输出,
tar: xz: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
tar: Child returned status 2
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
我想提取这些文件.
gpgv <filename>.sig
命令验证,它说没有找到公钥.我从使用CURL通过SSL请求URI的PHP组件遇到以下错误:
cURL error 35: gnutls_handshake() failed: A TLS packet with unexpected length was received.
Run Code Online (Sandbox Code Playgroud)
此错误发生在travis-ci.org环境中,但不在我们的任何测试环境中.见travis-ci build 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.
有人会对我有任何提示或指示吗?
当我尝试配置 GnuTLS 时,收到错误消息:未找到 Libnetttle 3.4。我安装了 nettle 3.4.1-1,库文件位于 /usr/lib 中。即使我NETTLE_LIBS
直接指定环境变量 ( export NETTLE_LIBS="-L/usr/lib -R/usr/lib -lnettle"
),它也总是会抛出该消息。
在 config.log 中有以下更具体的消息:
Package dependency requirement 'nettle >= 3.4.1' could not be satisfied.
Package 'nettle' has version '3.4', required version is '>= 3.4.1'
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
在 Windows 上的 wsl2 中的 Ubuntu 19.04 中执行此操作数天。
$ git clone https://github.com/gohugoio/hugo.git
Cloning into 'hugo'...
error: RPC failed; curl 56 GnuTLS recv error (-12): A TLS fatal alert has been received.
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
四天的威士忌探戈狐步舞……然后我找到了它。
我们正在考虑为一组受限设备支持TLS-PSK,这些设备没有足够的资源来使用证书进行正常的TLS握手.为此,我们正在寻找一个TLS-PSK组件,我们可以将它们集成到我们的(云)服务器上.这个组件可以是任何东西,代理,apache模块或其他任何可扩展的模块.
到目前为止,我们已经找到了几个支持TLS-PSK的库:GnuTLS,OpenSSL等.此外,我们可以找到几个HTTPS/TLS客户端库,我们可以使用它们通过TLS-PSK连接发送HTTP(S)请求.但是,我们无法找到的服务器端解决方案可以接受此类TLS-PSK连接.Apache模块mod_ssl和mod_gnutls不公开底层库的TLS-PSK功能.F5 Big-IP的密码列表中没有TLS-PSK.HAProxy也没有TLS-PSK接口.node.js TLS库的pull-request变得陈旧,很难应用于所有最近的TLS lib重构......
简而言之:有没有人知道我们可以在我们的服务器后端中集成一个支持TLS-PSK的组件来接受来自大量客户端的TLS-PSK连接?
我有一个 PHP 抓取器,可以在我的本地完美运行。但是当我将它上传到我的 VPS (Ubuntu 16.04) 时,它无法从网站获取数据。相反,它显示此错误消息:
“卷曲:(56)GnuTLS 接收错误(-54):拉函数中的错误”
我更新了 Openssl、Curl、GnuTLS 仍然没有运气。尝试从命令行执行 CURL,它显示相同的错误。它应该与 CURL /GnuTLS 有关。我看到有些人在使用 Git 时有相同的错误消息并修复了它,但该解决方案在我的情况下不起作用。有什么办法可以解决吗?
这是我用来从网站获取数据的 PHP 函数:
function get_html($url)
{
$agent= 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language: q=0.9,en-US;q=0.8,en;q=0.7',
'Connection: keep-alive'
));
curl_setopt($ch, CURLOPT_URL,$url);
$pageContent = curl_exec($ch);
curl_close($ch);
return $pageContent;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我试图获取 Google Fuchsia 源代码,但我不断遇到以下错误:
ERROR: 'git fetch -p origin' failed:
stdout:
stderr:
fatal: unable to access 'https://fuchsia.googlesource.com/third_party/github.com/google/cppdap/':
gnutls_handshake() failed: The TLS connection was non-properly terminated.
command fail error: exit status 128
Run Code Online (Sandbox Code Playgroud)
因此,下载永远不会完全完成,并且我有一个不完整的 Fuchsia 存储库克隆。
我知道我的 Git 安装没问题,因为我可以通过 https 访问 GitHub 存储库(我经常这样做)。
我使用的是 WSL2(Ubuntu 20.04 LTS)。
我该如何修复这个错误?
我们有一个GnuTLS不喜欢的内部服务器,例如:
gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt foo.example.com
Processed 173 CA certificate(s).
Resolving 'foo.example.com'...
Connecting to '1.2.3.4:443'...
*** Verifying server certificate failed...
*** Fatal error: Error in the certificate.
*** Handshake has failed
GnuTLS error: Error in the certificate.
Run Code Online (Sandbox Code Playgroud)
GnuTLS以外的所有内容都可以正常使用,但是git似乎在Ubuntu 14.04.2 LTS上使用GnuTLS开箱即用,所以git失败了:
GIT_CURL_VERBOSE=1 git clone https://foo.example.com/some-repo.git
Cloning into 'some-repo'...
* Couldn't find host foo.example.com in the .netrc file; using defaults
* Hostname was NOT found in DNS cache
* Trying 1.2.3.4...
* Connected to foo.example.com (1.2.3.4) port 443 (#0)
* found 173 certificates …
Run Code Online (Sandbox Code Playgroud) 我使用 gnutls 给出的两个示例:
“带有 X.509 身份验证的 Echo 服务器”。我已经使用 certtool 和自签名证书“cert.pem”生成了私钥“key.pem”,并在示例中使用它。
服务器工作正常...输出如下:
服务器准备就绪。监听端口“5556”
但如果我运行客户端示例,它会返回以下错误:
握手失败 GnuTLS 错误:TLS 连接未正确终止
服务器返回:
来自 127.0.0.1、端口 58587 的连接握手失败(请求无效。)
问题是什么?我需要更改客户端示例吗?如果没有,如何查看TLS握手过程以及客户端和服务器之间发送的数据?
我有一个脚本试图在后台克隆Git存储库,而无需用户提供凭据.因此,它设置GIT_SSH_COMMAND
为启用OpenSSH批处理模式.再现问题的示例脚本:
import subprocess, sys
popen = subprocess.Popen(
['git', 'clone', 'https://github.com/NiklasRosenstein/flux.git'],
env={'GIT_SSH_COMMAND': 'ssh -oBatchMode=yes'},
)
popen.wait()
sys.exit(popen.returncode)
Run Code Online (Sandbox Code Playgroud)
没有设置GIT_SSH_COMMAND
,命令运行正常.但有了它,我明白了
C:\Users\niklas\Desktop
? test
Cloning into 'flux'...
Error in GnuTLS initialization: Failed to acquire random data.
fatal: unable to access 'https://github.com/NiklasRosenstein/flux.git/': Couldn't resolve host 'github.com'
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?使用Git-for-Windows 2.6.1.windows.1