任务服务器:客户端连接握手失败

时间:2020-06-22 17:24:47

标签: ubuntu tls1.2 windows-subsystem-for-linux gnutls taskwarrior

问题

client$ task sync
Syncing with <hostname>.localdomain:53589

Handshake failed. The TLS connection was non-properly terminated.
Sync failed. Could not connect to the Taskserver

TL; DR我很确定这不是证书问题,但更可能与WSL实现中的客户端/服务器交互有关。我可以通过telnet和netcat进行连接,但是当我尝试从客户端进行同步时,任务调试器什么也没收到。我可以但是从与服务器在同一台计算机上的客户端进行同步。如果有人可以分享有关进度的建议或一些调试技巧,我将不胜感激!

设置

服务器

操作系统:Ubuntu 20.04 LTS(在WSL,Windows 10中运行)

$hostname -f的逐字结果称为<hostname>.localdomain

私有IP:192.168.1.20

server$ taskd diagnostics

taskd 1.1.0
    Platform: Linux
    Hostname: <hostname>

Compiler
     Version: 9.3.0
        Caps: +stdc +stdc_hosted +200809 +200809 +LP64 +c8 +i32 +l64 +vp64 +time_t64
  Compliance: C++11

Build Features
       Built: Jun 16 2020 14:36:11
       CMake: 3.16.3
     libuuid: libuuid + uuid_unparse_lower
   libgnutls: 3.6.13
  Build type: release

Configuration
   TASKDDATA: /var/taskd
        root: /var/taskd (readable)
      config: /var/taskd/config (readable)
          CA: /var/taskd/ca.cert.pem (readable)
 Certificate: /var/taskd/server.cert.pem (readable)
         Key: /var/taskd/server.key.pem (readable)
         CRL: /var/taskd/server.crl.pem (readable)
         Log: /var/log/taskd.log (found)
    PID File: /home/rob/taskd.pid (found)
      Server: <hostname>.localdomain:53589
 Max Request: 1048576 bytes
     Ciphers:
       Trust: allow all

客户

这是与服务器在同一局域网上不同的机器

操作系统:Ubuntu 20.04 LTS(在WSL,Windows 10中运行)

client$ task diagnostics

task 2.5.1
   Platform: Linux

Compiler
    Version: 9.2.1 20200306
       Caps: +stdc +stdc_hosted +LP64 +c8 +i32 +l64 +vp64 +time_t64
 Compliance: C++11

Build Features
      CMake: 3.16.3
    libuuid: libuuid + uuid_unparse_lower
  libgnutls: 3.6.11
 Build type: None

Configuration
       File: /home/rob/.taskrc (found), 1622 bytes, mode 100666
       Data: /home/rob/.task (found), dir, mode 40755
    Locking: Enabled
         GC: Enabled
     Server: B160227-RBC.localdomain:53589
      Trust: allow all
Certificate: /home/rob/.task/rob_home.cert.pem, readable, 4015 bytes
        Key: /home/rob/.task/rob_home.key.pem, readable, 24742 bytes
    Ciphers: NORMAL
      Creds: Public/Rob Home/************************************

Hooks
     System: Enabled
   Location: /home/rob/.task/hooks
             (-none-)

Tests
      $TERM: xterm-256color (346x102)
       Dups: Scanned 0 tasks for duplicate UUIDs:
             No duplicates found
 Broken ref: Scanned 0 tasks for broken references:
             No broken references found

问题排查

  • 我已阅读以下内容

  • 我一直在尝试搜索我遇到的问题,但是还没有找到解决我特定问题的任何东西。

  • 由于我自己的调试,系统当前处于以下状态:

    • 防火墙已禁用(服务器,客户端和路由器)
    • taskd.trust =允许全部(客户端和服务器)
  • 我可以从客户端通过telnet连接到服务器:

client$ telnet <hostname>.localdomain 53589
Trying 192.168.1.20...
Connected to <hostname>.localdomain.
Escape character is '^]'.
  • 我还能够在同一端口上使用netcat设置一个简单的“聊天服务器”。
server$ nc -vv -l 192.168.1.20 53589
Listening on 192.168.1.20 53589

然后运行

client$ nc -vv 192.168.1.20 53589
Connection to 192.168.1.20 53589 port [tcp/*] succeeded!

我在服务器上收到以下消息...

Connection received on 192.168.1.19 53885

我发现连接是通过端口53885接收到的,这很奇怪-它不应该来自客户端计算机上的53589吗?

  • 我尝试使用taskd server --data $TASKDDATA在调试模式下运行任务服务器。由此,我能够成功地从服务器计算机上的第二个客户端进行连接,并在日志中查看结果。但是,当我从客户端计算机运行task sync时,什么也没显示。

  • 我检查了"Handshake Failed"特定的页面,结果如下:

client$ openssl s_client -CAfile .task/ca.cert.pem -host 192.168.1.20 -port 53589
CONNECTED(00000003)

当我在服务器上生成证书时,位于〜/ taskd-1.1.0 / pki / vars CN = .localdomain中。

server$ certtool -i < server.cert.pem | grep Subject:
        Subject: O=Göteborg Bit Factory,CN=<hostname>.localdomain
  • 运行lsof -i TCP:53589 -s TCP:LISTENnetstat -tl | grep 53589完全没有响应,但是我认为这更多与在WSL上运行服务器的复杂性有关。

到目前为止的结论

从服务器的调试日志中,我猜想taskwarrior客户端根本无法“看到”任务服务器。但是令我困惑的是,我已经验证了客户端和服务器计算机可以通过正确的端口进行通信(#53589)。

我已经参加了几天,我很确定自己一定会遗漏一些明显的东西。任何指导都将非常非常感激!

0 个答案:

没有答案