大家在观看直播分享节点或者使用节点机器人获取免费节点有时候可能会出现trojan节点,但是很多朋友可能会发现基本上都是无法使用的,其实并不是节点不能用,而是证书验证的问题(底层安全验证基于tls的vmess节点也有这种情况,本篇主要以trojan为例)
本篇来探讨一下应该怎么做才能使用这些trojan节点,因为大多数人基本不会去抓取trojan节点,就算抓了测试的时候发现根本用不了,所以用的人少可能会有不错的使用体验。
trojan节点为什么需要证书验证?
https协议在和服务器建立连接会进行tls握手验证服务器证书,如果证书不匹配浏览器就会报警,提示我们证书不匹配,连接不安全,不匹配的原因可能是有中间人攻击或者过期和非受信任的颁发机构等,可以看我之前的节点钓鱼那期视频对这种证书验证有较为详细的演示
由于trojan是模仿https协议建立连接,我们连接节点服务器进行科学上网时,长城防火墙以为是访问某个https网站,https需要配置服务器证书,所以trojan也必须配置证书,如果客户端开启了证书验证,在连接时发现证书不匹配就不会建立连接,也就无法访问了
为什么不跳过安全证书就无法连接?
一般节点服务器使用受信的CA机构颁发证书,但是这个证书是颁发给域名的
CA可以给ip颁发证书但是不给一般人颁发,比如 https://1.1.1.1 就是直接给IP颁发证书,不需要绑定域名,如果你非要给IP颁发证书,可以用自签的方式为IP地址颁发证书,但一般不会这么做,最简单省事的办法是给ip绑定域名再给域名申请证书
大家使用我分享的节点如果是IP就会携带跳过证书验证参数的URI,但是由于v2rayN客户端不支持带有跳过证书验证的URI选项(可以在设置里统一将证书验证跳过),这也是各种协议和客户端由于并没有完全统一URI参数导致的,当某个软件导出节点到另一个软件,由于参数不统一就可能导致丢失
比如我用subconverter将clash配置的troian节点导出为跳过安全验证的trojan节点再导入到v2rayN:
clash配置:
- {name: "remark", server: 185.171.120.144, port: 443, type: trojan, password: 28d98f761aca9d636f44db62544628eb, skip-cert-verify: true} #原始clash配置
转换后的URI:
trojan://[email protected]:443?allowInsecure=1#remark #转换后的URI分享链接包含了allowInsecure=1,允许不安全(跳过证书验证)
导入v2rayN之后:
trojan://[email protected]:443#remark #可以看到allowInsecure参数直接就没了,导致导入之后还是需要证书验证,于是就无法连接
跳过安全证书是否有数据泄露的安全问题?
在和trojan服务器建立连接的时候会提交设置的密码进行验证,如果验证正确就会在tls的保护下连接进行数据传输
当我们跳过了对节点服务器的证书验证之后,如果在我们客户端和节点服务器中间有攻击者就可以轻易地截取其中的数据了,至于能截取什么样的数据和我之前录制的节点钓鱼效果是一样的,只不过窃密者从节点搭建者转移到了中间链路劫持者(https流量不会那么轻易就被解密了,而且你的数据到底有多大的价值,所以安不安全就是仁者见仁了),为了安全,trojan官方强烈建议开启证书验证
解决方法
最简单的方法就是直接跳过证书验证,但是如果你担心从你的电脑到节点服务器的数据被截取,那么可以尝试以下方法:
1、直接用IP发送https请求得到证书是给哪个域名颁发的,将节点IP改为查到的域名(最简单,推荐)
2、可以使用ip反查域名的方式得到该IP绑定的域名,将节点IP改为查到的域名(除非该服务器是直接给IP颁发的证书,否则肯定需要绑定域名,但是IP反查域名有的时候并不能得到结果)
3、用官方的证书检索工具获取证书,复制内容保存cer文件,双击打开查看证书内容,将节点IP改为查到的域名https://github.com/trojan-gfw/trojan/blob/master/scripts/getcert.py
参考Trojan官方文档:https://trojan-gfw.github.io/trojan
博主,可以出一个github 这里面的操作教程吗,我真的看不懂😥
三个方法一个没懂、、、我大概是废了
大佬你好,我有一个地址url是这样的: trojan://[email protected]:8102?allowInsecure=1&udp=1&peer=mi3.xxx.com&sni=mi3.xxx.com#专线 深圳-香港 03 ,然后我下载了linux上的 trojan 以客户端的形式运行。但是不知道如何配置config。我是这样配置的。{
"run_type": "client",
"local_addr": "127.0.0.1",
"local_port": 1080,
"remote_addr": "xxx.xx.xyz",
"remote_port": 8102,
"password": [
"password111"
],
"log_level": 1,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA",
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
"sni": "",
"alpn": [
"h2",
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"curves": ""
},
"tcp": {
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"fast_open": false,
"fast_open_qlen": 20
}
}
但是始终无法通过本地代理比如socks5或者http 访问外部网站要么提示握手失败,要么链接失败。想问一下知道怎么配置吗? 感觉url中其他数据不知道该怎么用。
allowInsecure=1表示跳过证书验证,说明这个节点证书可能无效,但是你的config配置文件中的证书验证打开了,
"ssl": {"verify": true
尝试将验证改为"verify": false
怎么查域名啊?
我是🐖