weixin_39603622
weixin_39603622
2020-12-01 17:38

v0.7 bug report

再报告一下我发现的新bug

我的设定档里,自订了比较安全的TLS v1.2 / v1.3 ciphers

"cipher":"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",

"cipher_tls13":"TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",

但我在ssllab test里进行测试时,却发现trojan-go会自己运行不安全的TLS 1.0 / 1.1 ciphers,例如:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) / TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) /

导致网站被降级成B了,在0.6版,同样运行着上面设定档里的ciphers,测试结果是A+的。

如果我将cipher / cipher_tls13内清空,说明文件说:“正常情况下,你应该将其留空或者不填,trojan-go会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性。”,但经ssllab test测试后,仍然是grade B,同样会执行TLS 1.0 / 1.1 ciphers。

同样地,TLS 1.3,这个我没加进cliphers_tls13,TLS_AES_128_GCM_SHA256,但还是被强制执行了。

希望下一个更新,能让使用者真正自订自己想使用的ciphers,因为有些使用者确实知道自己在做什么,而原版trojan是完全可以让使用者自订自己的ciphers的。

谢谢trojan-go专案,所有开发者所付出的努力。

======================================================

[以下问题已解决]

其实我不知道是我不会弄,还是有什么bug,报告一下。

我的是Raspberry Pi4 64bit ubuntu 20.04,下载64bit Linux arm版安装。

使用0.6,很正常,但当我转用0.7后,除了sni的host (www.abcd1234.com)是正常外,其他的hostname全都是525 SSL handshake error。

以下为我使用0.7所做的步骤和测试:

下载0.7版去/tmp,将trojan-go改名为trojan-go0.7:

cd /tmp mv trojan-go trojan-go0.7 cp trojan-go0.7 /usr/bin/trojan-go

那我/usr/bin/trojan-go内,就有2个版本的trojan-go了,分别是0.6和0.7,然后我在/etc/systemd/system/trojan-go.service内,将执行指令改为/usr/bin/trojan-go/trojan-go0.7 -config /etc/trojan-go/config.json

然后systemctl daemon-reload,再重启一次trojan-go,没报错,但除了配置档sni内的hostname (www.abcd1234.com)是正常外,其他hostname全都是525 ssl handshake error

当我在trojan-go.service内,把执行指令改回/usr/bin/trojan-go/trojan-go -config /etc/trojan-go/config.json,即用回0.6版,我的所有hostname就全都变回正常了。

请问这是bug、是配置档问题还是?

再简单一点来说就是,0.6正常,0.7出问题了。

以下为我的trojan-go配置档:


{
    "run_type": "server",
    "local_addr": "::",
    "local_port": 443,
    "remote_addr": "::",
    "remote_port": 80,
    "password": [
        "password1",
        "password2"
    ],
    "log_level": 1,
    "log_file": "/var/log/trojan-go.log",
    "buffer_size": 32,
    "ssl": {
        "verify": true,
        "cert": "/etc/cert/ecc384.crt",
        "key": "/etc/cert/ecc384.key",
        "key_password": "",
        "cipher": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
        "cipher_tls13":"TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
        "prefer_server_cipher": true,
        "sni": "www.abcd1234.com",
        "alpn": [
            "http/1.1",
            "h2"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "session_timeout": 600,
        "fingerprint": "auto",
        "plain_http_response": "",
        "fallback_port": 0,
        "curves": "secp384r1",
        "dhparam": "/etc/nginx/ssl/dhparam.pem"
    },
    "tcp": {
        "prefer_ipv4": false,
        "no_delay": true,
        "keep_alive": true,
        "reuse_port": false,
        "fast_open": true,
        "fast_open_qlen": 20
    },
    "mysql": {    
        "enabled": false,
        "server_addr": "127.0.0.1",
        "server_port": 3306,
        "database": "trojan",
        "username": "trojan",
        "password": ""
    }
}

我的设定档里设置了/var/log/trojan-go.log,loglevel是1,当我使用0.7去执行时,却没有在/var/log里出现log档(0.7的另一个bug?),所以恕我没法提供log档的内容供除错之用了。

(0.6的log档/var/log/trojan-go.log亦很正常。)

我能想到的方案都试过了,在0.7版的trojan-go内,无论我怎么弄,我的其他hostname,全都出现525 SSL handshake error,我投降了,现在乖乖的用回0.6版。

该提问来源于开源项目:p4gefau1t/trojan-go

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • weixin_39611725 weixin_39611725 5月前

    无法输出log的情况我也遇到了 看来的确是bug

    点赞 评论 复制链接分享
  • weixin_39916479 weixin_39916479 5月前

    已修复,先前的版本没有将设置应用

    点赞 评论 复制链接分享
  • weixin_39603622 weixin_39603622 5月前

    已修复,先前的版本没有将设置应用

    谢谢,已在使用v0.71,不过日志bug好像还存在,要报告一下:(不知道是不是我个人问题。)

    修复日志文件 <---这次在/var/log里是有一个trojan-go.log了,不过却没有写入任何资料,日志的位元组是0,已查日志档的权限及拥有者,全都正常并拥有写入权限(甚至试过将日志档设为777了),但就是没有任何东西写进日志里。

    试过将日志loglevel设为0 / 1,多次删除/var/log/trojan-go.log后再重启,但trojan-go就只会在/var/log里建立一个0位元组的trojan-go.log,没能写入任何资料。

    2台运行trojan-go 0.71的服务器在日志档里也遇上同一问题。

    截图里trojan-go.log的那个chmod o+w是我自己加上去的,但还是不成。

    截圖 2020-06-12 下午6 56 38

    点赞 评论 复制链接分享
  • weixin_39611725 weixin_39611725 5月前

    已修复,先前的版本没有将设置应用

    谢谢,已在使用v0.71,不过日志bug好像还存在,要报告一下:(不知道是不是我个人问题。)

    修复日志文件 <---这次在/var/log里是有一个trojan-go.log了,不过却没有写入任何资料,日志的位元组是0,已查日志档的权限及拥有者,全都正常并拥有写入权限(甚至试过将日志档设为777了),但就是没有任何东西写进日志里。

    试过将日志loglevel设为0 / 1,多次删除/var/log/trojan-go.log后再重启,但trojan-go就只会在/var/log里建立一个0位元组的trojan-go.log,没能写入任何资料。

    2台运行trojan-go 0.71的服务器在日志档里也遇上同一问题。

    截图里trojan-go.log的那个chmod o+w是我自己加上去的,但还是不成。

    截圖 2020-06-12 下午6 56 38

    同样有日志问题

    点赞 评论 复制链接分享
  • weixin_39598069 weixin_39598069 5月前

    我觉得可能是 0.70 修正之前版本有关sni hostname的bug,v0.70 现在要求客户端和服务器端严格验证 sni 配置。(verify_hostname 默认值为true

    以下摘自trojan-go文档: verify_hostname表示服务端是否校验客户端提供的SNI与服务端设置的一致性。如果服务端SNI字段留空,认证将被强制关闭。 服务端必须填入cert和key,对应服务器的证书和私钥文件,请注意证书是否有效/过期。如果使用权威CA签发的证书,客户端(client/nat/forward)可以不填写cert。如果使用自签名或者自签发的证书,应当在的cert处填入服务器证书文件,否则可能导致校验失败。 sni指的是TLS客户端请求中的服务器名字段,一般和证书的Common Name相同。如果你使用let’sencrypt等机构签发的证书,这里填入你的域名。如果这一项未填,将使用remote_addr填充。你应当指定一个有效的SNI(和远端证书CN一致),否则客户端可能无法验证远端证书有效性从而无法连接。

    点赞 评论 复制链接分享
  • weixin_39603622 weixin_39603622 5月前

    我觉得可能是 0.70 修正之前版本有关sni hostname的bug,v0.70 现在要求客户端和服务器端严格验证 sni 配置。(verify_hostname 默认值为true

    以下摘自trojan-go文档: verify_hostname表示服务端是否校验客户端提供的SNI与服务端设置的一致性。如果服务端SNI字段留空,认证将被强制关闭。 sni指的是TLS客户端请求中的服务器名字段,一般和证书的Common Name相同。如果你使用let’sencrypt等机构签发的证书,这里填入你的域名。如果这一项未填,将使用remote_addr填充。你应当指定一个有效的SNI(和远端证书CN一致),否则客户端可能无法验证远端证书有效性从而无法连接。

    谢谢你,我弄了一个晚上都弄不到的问题被你一句就解决了,你说:“verify_hostname 默认值为true”,其实我是不知道这个值默认是true的(因为0.6版我没加verify_hostname也没有出问题。),我在设定档里加上这一句:"verify_hostname": false,,再重启一次就回复正常了,不过,/var/log/里仍然没有出现trojan-go.log,不知道又是那里出问题了。

    点赞 评论 复制链接分享

相关推荐