tls_test.go 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243
  1. package scenarios
  2. import (
  3. "crypto/x509"
  4. "runtime"
  5. "testing"
  6. "time"
  7. "github.com/xtls/xray-core/app/proxyman"
  8. "github.com/xtls/xray-core/common"
  9. "github.com/xtls/xray-core/common/net"
  10. "github.com/xtls/xray-core/common/protocol"
  11. "github.com/xtls/xray-core/common/protocol/tls/cert"
  12. "github.com/xtls/xray-core/common/serial"
  13. "github.com/xtls/xray-core/common/uuid"
  14. core "github.com/xtls/xray-core/core"
  15. "github.com/xtls/xray-core/proxy/dokodemo"
  16. "github.com/xtls/xray-core/proxy/freedom"
  17. "github.com/xtls/xray-core/proxy/vmess"
  18. "github.com/xtls/xray-core/proxy/vmess/inbound"
  19. "github.com/xtls/xray-core/proxy/vmess/outbound"
  20. "github.com/xtls/xray-core/testing/servers/tcp"
  21. "github.com/xtls/xray-core/testing/servers/udp"
  22. "github.com/xtls/xray-core/transport/internet"
  23. "github.com/xtls/xray-core/transport/internet/grpc"
  24. "github.com/xtls/xray-core/transport/internet/http"
  25. "github.com/xtls/xray-core/transport/internet/tls"
  26. "github.com/xtls/xray-core/transport/internet/websocket"
  27. "golang.org/x/sync/errgroup"
  28. )
  29. func TestSimpleTLSConnection(t *testing.T) {
  30. tcpServer := tcp.Server{
  31. MsgProcessor: xor,
  32. }
  33. dest, err := tcpServer.Start()
  34. common.Must(err)
  35. defer tcpServer.Close()
  36. userID := protocol.NewID(uuid.New())
  37. serverPort := tcp.PickPort()
  38. serverConfig := &core.Config{
  39. Inbound: []*core.InboundHandlerConfig{
  40. {
  41. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  42. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  43. Listen: net.NewIPOrDomain(net.LocalHostIP),
  44. StreamSettings: &internet.StreamConfig{
  45. SecurityType: serial.GetMessageType(&tls.Config{}),
  46. SecuritySettings: []*serial.TypedMessage{
  47. serial.ToTypedMessage(&tls.Config{
  48. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  49. }),
  50. },
  51. },
  52. }),
  53. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  54. User: []*protocol.User{
  55. {
  56. Account: serial.ToTypedMessage(&vmess.Account{
  57. Id: userID.String(),
  58. }),
  59. },
  60. },
  61. }),
  62. },
  63. },
  64. Outbound: []*core.OutboundHandlerConfig{
  65. {
  66. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  67. },
  68. },
  69. }
  70. clientPort := tcp.PickPort()
  71. clientConfig := &core.Config{
  72. Inbound: []*core.InboundHandlerConfig{
  73. {
  74. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  75. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  76. Listen: net.NewIPOrDomain(net.LocalHostIP),
  77. }),
  78. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  79. Address: net.NewIPOrDomain(dest.Address),
  80. Port: uint32(dest.Port),
  81. NetworkList: &net.NetworkList{
  82. Network: []net.Network{net.Network_TCP},
  83. },
  84. }),
  85. },
  86. },
  87. Outbound: []*core.OutboundHandlerConfig{
  88. {
  89. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  90. Receiver: []*protocol.ServerEndpoint{
  91. {
  92. Address: net.NewIPOrDomain(net.LocalHostIP),
  93. Port: uint32(serverPort),
  94. User: []*protocol.User{
  95. {
  96. Account: serial.ToTypedMessage(&vmess.Account{
  97. Id: userID.String(),
  98. }),
  99. },
  100. },
  101. },
  102. },
  103. }),
  104. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  105. StreamSettings: &internet.StreamConfig{
  106. SecurityType: serial.GetMessageType(&tls.Config{}),
  107. SecuritySettings: []*serial.TypedMessage{
  108. serial.ToTypedMessage(&tls.Config{
  109. AllowInsecure: true,
  110. }),
  111. },
  112. },
  113. }),
  114. },
  115. },
  116. }
  117. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  118. common.Must(err)
  119. defer CloseAllServers(servers)
  120. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  121. t.Fatal(err)
  122. }
  123. }
  124. func TestAutoIssuingCertificate(t *testing.T) {
  125. if runtime.GOOS == "windows" {
  126. // Not supported on Windows yet.
  127. return
  128. }
  129. if runtime.GOARCH == "arm64" {
  130. return
  131. }
  132. tcpServer := tcp.Server{
  133. MsgProcessor: xor,
  134. }
  135. dest, err := tcpServer.Start()
  136. common.Must(err)
  137. defer tcpServer.Close()
  138. caCert, err := cert.Generate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageDigitalSignature|x509.KeyUsageKeyEncipherment|x509.KeyUsageCertSign))
  139. common.Must(err)
  140. certPEM, keyPEM := caCert.ToPEM()
  141. userID := protocol.NewID(uuid.New())
  142. serverPort := tcp.PickPort()
  143. serverConfig := &core.Config{
  144. Inbound: []*core.InboundHandlerConfig{
  145. {
  146. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  147. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  148. Listen: net.NewIPOrDomain(net.LocalHostIP),
  149. StreamSettings: &internet.StreamConfig{
  150. SecurityType: serial.GetMessageType(&tls.Config{}),
  151. SecuritySettings: []*serial.TypedMessage{
  152. serial.ToTypedMessage(&tls.Config{
  153. Certificate: []*tls.Certificate{{
  154. Certificate: certPEM,
  155. Key: keyPEM,
  156. Usage: tls.Certificate_AUTHORITY_ISSUE,
  157. }},
  158. }),
  159. },
  160. },
  161. }),
  162. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  163. User: []*protocol.User{
  164. {
  165. Account: serial.ToTypedMessage(&vmess.Account{
  166. Id: userID.String(),
  167. }),
  168. },
  169. },
  170. }),
  171. },
  172. },
  173. Outbound: []*core.OutboundHandlerConfig{
  174. {
  175. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  176. },
  177. },
  178. }
  179. clientPort := tcp.PickPort()
  180. clientConfig := &core.Config{
  181. Inbound: []*core.InboundHandlerConfig{
  182. {
  183. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  184. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  185. Listen: net.NewIPOrDomain(net.LocalHostIP),
  186. }),
  187. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  188. Address: net.NewIPOrDomain(dest.Address),
  189. Port: uint32(dest.Port),
  190. NetworkList: &net.NetworkList{
  191. Network: []net.Network{net.Network_TCP},
  192. },
  193. }),
  194. },
  195. },
  196. Outbound: []*core.OutboundHandlerConfig{
  197. {
  198. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  199. Receiver: []*protocol.ServerEndpoint{
  200. {
  201. Address: net.NewIPOrDomain(net.LocalHostIP),
  202. Port: uint32(serverPort),
  203. User: []*protocol.User{
  204. {
  205. Account: serial.ToTypedMessage(&vmess.Account{
  206. Id: userID.String(),
  207. }),
  208. },
  209. },
  210. },
  211. },
  212. }),
  213. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  214. StreamSettings: &internet.StreamConfig{
  215. SecurityType: serial.GetMessageType(&tls.Config{}),
  216. SecuritySettings: []*serial.TypedMessage{
  217. serial.ToTypedMessage(&tls.Config{
  218. ServerName: "example.com",
  219. Certificate: []*tls.Certificate{{
  220. Certificate: certPEM,
  221. Usage: tls.Certificate_AUTHORITY_VERIFY,
  222. }},
  223. }),
  224. },
  225. },
  226. }),
  227. },
  228. },
  229. }
  230. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  231. common.Must(err)
  232. defer CloseAllServers(servers)
  233. for i := 0; i < 10; i++ {
  234. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  235. t.Error(err)
  236. }
  237. }
  238. }
  239. func TestTLSOverKCP(t *testing.T) {
  240. tcpServer := tcp.Server{
  241. MsgProcessor: xor,
  242. }
  243. dest, err := tcpServer.Start()
  244. common.Must(err)
  245. defer tcpServer.Close()
  246. userID := protocol.NewID(uuid.New())
  247. serverPort := udp.PickPort()
  248. serverConfig := &core.Config{
  249. Inbound: []*core.InboundHandlerConfig{
  250. {
  251. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  252. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  253. Listen: net.NewIPOrDomain(net.LocalHostIP),
  254. StreamSettings: &internet.StreamConfig{
  255. Protocol: internet.TransportProtocol_MKCP,
  256. SecurityType: serial.GetMessageType(&tls.Config{}),
  257. SecuritySettings: []*serial.TypedMessage{
  258. serial.ToTypedMessage(&tls.Config{
  259. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  260. }),
  261. },
  262. },
  263. }),
  264. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  265. User: []*protocol.User{
  266. {
  267. Account: serial.ToTypedMessage(&vmess.Account{
  268. Id: userID.String(),
  269. }),
  270. },
  271. },
  272. }),
  273. },
  274. },
  275. Outbound: []*core.OutboundHandlerConfig{
  276. {
  277. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  278. },
  279. },
  280. }
  281. clientPort := tcp.PickPort()
  282. clientConfig := &core.Config{
  283. Inbound: []*core.InboundHandlerConfig{
  284. {
  285. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  286. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  287. Listen: net.NewIPOrDomain(net.LocalHostIP),
  288. }),
  289. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  290. Address: net.NewIPOrDomain(dest.Address),
  291. Port: uint32(dest.Port),
  292. NetworkList: &net.NetworkList{
  293. Network: []net.Network{net.Network_TCP},
  294. },
  295. }),
  296. },
  297. },
  298. Outbound: []*core.OutboundHandlerConfig{
  299. {
  300. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  301. Receiver: []*protocol.ServerEndpoint{
  302. {
  303. Address: net.NewIPOrDomain(net.LocalHostIP),
  304. Port: uint32(serverPort),
  305. User: []*protocol.User{
  306. {
  307. Account: serial.ToTypedMessage(&vmess.Account{
  308. Id: userID.String(),
  309. }),
  310. },
  311. },
  312. },
  313. },
  314. }),
  315. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  316. StreamSettings: &internet.StreamConfig{
  317. Protocol: internet.TransportProtocol_MKCP,
  318. SecurityType: serial.GetMessageType(&tls.Config{}),
  319. SecuritySettings: []*serial.TypedMessage{
  320. serial.ToTypedMessage(&tls.Config{
  321. AllowInsecure: true,
  322. }),
  323. },
  324. },
  325. }),
  326. },
  327. },
  328. }
  329. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  330. common.Must(err)
  331. defer CloseAllServers(servers)
  332. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  333. t.Error(err)
  334. }
  335. }
  336. func TestTLSOverWebSocket(t *testing.T) {
  337. tcpServer := tcp.Server{
  338. MsgProcessor: xor,
  339. }
  340. dest, err := tcpServer.Start()
  341. common.Must(err)
  342. defer tcpServer.Close()
  343. userID := protocol.NewID(uuid.New())
  344. serverPort := tcp.PickPort()
  345. serverConfig := &core.Config{
  346. Inbound: []*core.InboundHandlerConfig{
  347. {
  348. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  349. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  350. Listen: net.NewIPOrDomain(net.LocalHostIP),
  351. StreamSettings: &internet.StreamConfig{
  352. Protocol: internet.TransportProtocol_WebSocket,
  353. SecurityType: serial.GetMessageType(&tls.Config{}),
  354. SecuritySettings: []*serial.TypedMessage{
  355. serial.ToTypedMessage(&tls.Config{
  356. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  357. }),
  358. },
  359. },
  360. }),
  361. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  362. User: []*protocol.User{
  363. {
  364. Account: serial.ToTypedMessage(&vmess.Account{
  365. Id: userID.String(),
  366. }),
  367. },
  368. },
  369. }),
  370. },
  371. },
  372. Outbound: []*core.OutboundHandlerConfig{
  373. {
  374. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  375. },
  376. },
  377. }
  378. clientPort := tcp.PickPort()
  379. clientConfig := &core.Config{
  380. Inbound: []*core.InboundHandlerConfig{
  381. {
  382. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  383. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  384. Listen: net.NewIPOrDomain(net.LocalHostIP),
  385. }),
  386. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  387. Address: net.NewIPOrDomain(dest.Address),
  388. Port: uint32(dest.Port),
  389. NetworkList: &net.NetworkList{
  390. Network: []net.Network{net.Network_TCP},
  391. },
  392. }),
  393. },
  394. },
  395. Outbound: []*core.OutboundHandlerConfig{
  396. {
  397. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  398. Receiver: []*protocol.ServerEndpoint{
  399. {
  400. Address: net.NewIPOrDomain(net.LocalHostIP),
  401. Port: uint32(serverPort),
  402. User: []*protocol.User{
  403. {
  404. Account: serial.ToTypedMessage(&vmess.Account{
  405. Id: userID.String(),
  406. }),
  407. },
  408. },
  409. },
  410. },
  411. }),
  412. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  413. StreamSettings: &internet.StreamConfig{
  414. Protocol: internet.TransportProtocol_WebSocket,
  415. TransportSettings: []*internet.TransportConfig{
  416. {
  417. Protocol: internet.TransportProtocol_WebSocket,
  418. Settings: serial.ToTypedMessage(&websocket.Config{}),
  419. },
  420. },
  421. SecurityType: serial.GetMessageType(&tls.Config{}),
  422. SecuritySettings: []*serial.TypedMessage{
  423. serial.ToTypedMessage(&tls.Config{
  424. AllowInsecure: true,
  425. }),
  426. },
  427. },
  428. }),
  429. },
  430. },
  431. }
  432. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  433. common.Must(err)
  434. defer CloseAllServers(servers)
  435. var errg errgroup.Group
  436. for i := 0; i < 10; i++ {
  437. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
  438. }
  439. if err := errg.Wait(); err != nil {
  440. t.Error(err)
  441. }
  442. }
  443. func TestHTTP2(t *testing.T) {
  444. tcpServer := tcp.Server{
  445. MsgProcessor: xor,
  446. }
  447. dest, err := tcpServer.Start()
  448. common.Must(err)
  449. defer tcpServer.Close()
  450. userID := protocol.NewID(uuid.New())
  451. serverPort := tcp.PickPort()
  452. serverConfig := &core.Config{
  453. Inbound: []*core.InboundHandlerConfig{
  454. {
  455. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  456. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  457. Listen: net.NewIPOrDomain(net.LocalHostIP),
  458. StreamSettings: &internet.StreamConfig{
  459. Protocol: internet.TransportProtocol_HTTP,
  460. TransportSettings: []*internet.TransportConfig{
  461. {
  462. Protocol: internet.TransportProtocol_HTTP,
  463. Settings: serial.ToTypedMessage(&http.Config{
  464. Host: []string{"example.com"},
  465. Path: "/testpath",
  466. }),
  467. },
  468. },
  469. SecurityType: serial.GetMessageType(&tls.Config{}),
  470. SecuritySettings: []*serial.TypedMessage{
  471. serial.ToTypedMessage(&tls.Config{
  472. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  473. }),
  474. },
  475. },
  476. }),
  477. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  478. User: []*protocol.User{
  479. {
  480. Account: serial.ToTypedMessage(&vmess.Account{
  481. Id: userID.String(),
  482. }),
  483. },
  484. },
  485. }),
  486. },
  487. },
  488. Outbound: []*core.OutboundHandlerConfig{
  489. {
  490. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  491. },
  492. },
  493. }
  494. clientPort := tcp.PickPort()
  495. clientConfig := &core.Config{
  496. Inbound: []*core.InboundHandlerConfig{
  497. {
  498. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  499. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  500. Listen: net.NewIPOrDomain(net.LocalHostIP),
  501. }),
  502. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  503. Address: net.NewIPOrDomain(dest.Address),
  504. Port: uint32(dest.Port),
  505. NetworkList: &net.NetworkList{
  506. Network: []net.Network{net.Network_TCP},
  507. },
  508. }),
  509. },
  510. },
  511. Outbound: []*core.OutboundHandlerConfig{
  512. {
  513. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  514. Receiver: []*protocol.ServerEndpoint{
  515. {
  516. Address: net.NewIPOrDomain(net.LocalHostIP),
  517. Port: uint32(serverPort),
  518. User: []*protocol.User{
  519. {
  520. Account: serial.ToTypedMessage(&vmess.Account{
  521. Id: userID.String(),
  522. }),
  523. },
  524. },
  525. },
  526. },
  527. }),
  528. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  529. StreamSettings: &internet.StreamConfig{
  530. Protocol: internet.TransportProtocol_HTTP,
  531. TransportSettings: []*internet.TransportConfig{
  532. {
  533. Protocol: internet.TransportProtocol_HTTP,
  534. Settings: serial.ToTypedMessage(&http.Config{
  535. Host: []string{"example.com"},
  536. Path: "/testpath",
  537. }),
  538. },
  539. },
  540. SecurityType: serial.GetMessageType(&tls.Config{}),
  541. SecuritySettings: []*serial.TypedMessage{
  542. serial.ToTypedMessage(&tls.Config{
  543. AllowInsecure: true,
  544. }),
  545. },
  546. },
  547. }),
  548. },
  549. },
  550. }
  551. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  552. common.Must(err)
  553. defer CloseAllServers(servers)
  554. var errg errgroup.Group
  555. for i := 0; i < 10; i++ {
  556. errg.Go(testTCPConn(clientPort, 1024*1024, time.Second*40))
  557. }
  558. if err := errg.Wait(); err != nil {
  559. t.Error(err)
  560. }
  561. }
  562. func TestGRPC(t *testing.T) {
  563. tcpServer := tcp.Server{
  564. MsgProcessor: xor,
  565. }
  566. dest, err := tcpServer.Start()
  567. common.Must(err)
  568. defer tcpServer.Close()
  569. userID := protocol.NewID(uuid.New())
  570. serverPort := tcp.PickPort()
  571. serverConfig := &core.Config{
  572. Inbound: []*core.InboundHandlerConfig{
  573. {
  574. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  575. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  576. Listen: net.NewIPOrDomain(net.LocalHostIP),
  577. StreamSettings: &internet.StreamConfig{
  578. ProtocolName: "grpc",
  579. TransportSettings: []*internet.TransportConfig{
  580. {
  581. ProtocolName: "grpc",
  582. Settings: serial.ToTypedMessage(&grpc.Config{ServiceName: "🍉"}),
  583. },
  584. },
  585. SecurityType: serial.GetMessageType(&tls.Config{}),
  586. SecuritySettings: []*serial.TypedMessage{
  587. serial.ToTypedMessage(&tls.Config{
  588. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  589. }),
  590. },
  591. },
  592. }),
  593. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  594. User: []*protocol.User{
  595. {
  596. Account: serial.ToTypedMessage(&vmess.Account{
  597. Id: userID.String(),
  598. }),
  599. },
  600. },
  601. }),
  602. },
  603. },
  604. Outbound: []*core.OutboundHandlerConfig{
  605. {
  606. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  607. },
  608. },
  609. }
  610. clientPort := tcp.PickPort()
  611. clientConfig := &core.Config{
  612. Inbound: []*core.InboundHandlerConfig{
  613. {
  614. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  615. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  616. Listen: net.NewIPOrDomain(net.LocalHostIP),
  617. }),
  618. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  619. Address: net.NewIPOrDomain(dest.Address),
  620. Port: uint32(dest.Port),
  621. NetworkList: &net.NetworkList{
  622. Network: []net.Network{net.Network_TCP},
  623. },
  624. }),
  625. },
  626. },
  627. Outbound: []*core.OutboundHandlerConfig{
  628. {
  629. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  630. Receiver: []*protocol.ServerEndpoint{
  631. {
  632. Address: net.NewIPOrDomain(net.LocalHostIP),
  633. Port: uint32(serverPort),
  634. User: []*protocol.User{
  635. {
  636. Account: serial.ToTypedMessage(&vmess.Account{
  637. Id: userID.String(),
  638. }),
  639. },
  640. },
  641. },
  642. },
  643. }),
  644. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  645. StreamSettings: &internet.StreamConfig{
  646. ProtocolName: "grpc",
  647. TransportSettings: []*internet.TransportConfig{
  648. {
  649. ProtocolName: "grpc",
  650. Settings: serial.ToTypedMessage(&grpc.Config{ServiceName: "🍉"}),
  651. },
  652. },
  653. SecurityType: serial.GetMessageType(&tls.Config{}),
  654. SecuritySettings: []*serial.TypedMessage{
  655. serial.ToTypedMessage(&tls.Config{
  656. AllowInsecure: true,
  657. }),
  658. },
  659. },
  660. }),
  661. },
  662. },
  663. }
  664. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  665. common.Must(err)
  666. defer CloseAllServers(servers)
  667. var errg errgroup.Group
  668. for i := 0; i < 10; i++ {
  669. errg.Go(testTCPConn(clientPort, 1024*10240, time.Second*40))
  670. }
  671. if err := errg.Wait(); err != nil {
  672. t.Error(err)
  673. }
  674. }
  675. func TestGRPCMultiMode(t *testing.T) {
  676. tcpServer := tcp.Server{
  677. MsgProcessor: xor,
  678. }
  679. dest, err := tcpServer.Start()
  680. common.Must(err)
  681. defer tcpServer.Close()
  682. userID := protocol.NewID(uuid.New())
  683. serverPort := tcp.PickPort()
  684. serverConfig := &core.Config{
  685. Inbound: []*core.InboundHandlerConfig{
  686. {
  687. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  688. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  689. Listen: net.NewIPOrDomain(net.LocalHostIP),
  690. StreamSettings: &internet.StreamConfig{
  691. ProtocolName: "grpc",
  692. TransportSettings: []*internet.TransportConfig{
  693. {
  694. ProtocolName: "grpc",
  695. Settings: serial.ToTypedMessage(&grpc.Config{ServiceName: "🍉"}),
  696. },
  697. },
  698. SecurityType: serial.GetMessageType(&tls.Config{}),
  699. SecuritySettings: []*serial.TypedMessage{
  700. serial.ToTypedMessage(&tls.Config{
  701. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  702. }),
  703. },
  704. },
  705. }),
  706. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  707. User: []*protocol.User{
  708. {
  709. Account: serial.ToTypedMessage(&vmess.Account{
  710. Id: userID.String(),
  711. }),
  712. },
  713. },
  714. }),
  715. },
  716. },
  717. Outbound: []*core.OutboundHandlerConfig{
  718. {
  719. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  720. },
  721. },
  722. }
  723. clientPort := tcp.PickPort()
  724. clientConfig := &core.Config{
  725. Inbound: []*core.InboundHandlerConfig{
  726. {
  727. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  728. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  729. Listen: net.NewIPOrDomain(net.LocalHostIP),
  730. }),
  731. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  732. Address: net.NewIPOrDomain(dest.Address),
  733. Port: uint32(dest.Port),
  734. NetworkList: &net.NetworkList{
  735. Network: []net.Network{net.Network_TCP},
  736. },
  737. }),
  738. },
  739. },
  740. Outbound: []*core.OutboundHandlerConfig{
  741. {
  742. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  743. Receiver: []*protocol.ServerEndpoint{
  744. {
  745. Address: net.NewIPOrDomain(net.LocalHostIP),
  746. Port: uint32(serverPort),
  747. User: []*protocol.User{
  748. {
  749. Account: serial.ToTypedMessage(&vmess.Account{
  750. Id: userID.String(),
  751. }),
  752. },
  753. },
  754. },
  755. },
  756. }),
  757. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  758. StreamSettings: &internet.StreamConfig{
  759. ProtocolName: "grpc",
  760. TransportSettings: []*internet.TransportConfig{
  761. {
  762. ProtocolName: "grpc",
  763. Settings: serial.ToTypedMessage(&grpc.Config{ServiceName: "🍉", MultiMode: true}),
  764. },
  765. },
  766. SecurityType: serial.GetMessageType(&tls.Config{}),
  767. SecuritySettings: []*serial.TypedMessage{
  768. serial.ToTypedMessage(&tls.Config{
  769. AllowInsecure: true,
  770. }),
  771. },
  772. },
  773. }),
  774. },
  775. },
  776. }
  777. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  778. common.Must(err)
  779. defer CloseAllServers(servers)
  780. var errg errgroup.Group
  781. for i := 0; i < 10; i++ {
  782. errg.Go(testTCPConn(clientPort, 1024*10240, time.Second*40))
  783. }
  784. if err := errg.Wait(); err != nil {
  785. t.Error(err)
  786. }
  787. }
  788. func TestSimpleTLSConnectionPinned(t *testing.T) {
  789. tcpServer := tcp.Server{
  790. MsgProcessor: xor,
  791. }
  792. dest, err := tcpServer.Start()
  793. common.Must(err)
  794. defer tcpServer.Close()
  795. certificateDer := cert.MustGenerate(nil)
  796. certificate := tls.ParseCertificate(certificateDer)
  797. certHash := tls.GenerateCertChainHash([][]byte{certificateDer.Certificate})
  798. userID := protocol.NewID(uuid.New())
  799. serverPort := tcp.PickPort()
  800. serverConfig := &core.Config{
  801. Inbound: []*core.InboundHandlerConfig{
  802. {
  803. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  804. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  805. Listen: net.NewIPOrDomain(net.LocalHostIP),
  806. StreamSettings: &internet.StreamConfig{
  807. SecurityType: serial.GetMessageType(&tls.Config{}),
  808. SecuritySettings: []*serial.TypedMessage{
  809. serial.ToTypedMessage(&tls.Config{
  810. Certificate: []*tls.Certificate{certificate},
  811. }),
  812. },
  813. },
  814. }),
  815. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  816. User: []*protocol.User{
  817. {
  818. Account: serial.ToTypedMessage(&vmess.Account{
  819. Id: userID.String(),
  820. }),
  821. },
  822. },
  823. }),
  824. },
  825. },
  826. Outbound: []*core.OutboundHandlerConfig{
  827. {
  828. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  829. },
  830. },
  831. }
  832. clientPort := tcp.PickPort()
  833. clientConfig := &core.Config{
  834. Inbound: []*core.InboundHandlerConfig{
  835. {
  836. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  837. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  838. Listen: net.NewIPOrDomain(net.LocalHostIP),
  839. }),
  840. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  841. Address: net.NewIPOrDomain(dest.Address),
  842. Port: uint32(dest.Port),
  843. NetworkList: &net.NetworkList{
  844. Network: []net.Network{net.Network_TCP},
  845. },
  846. }),
  847. },
  848. },
  849. Outbound: []*core.OutboundHandlerConfig{
  850. {
  851. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  852. Receiver: []*protocol.ServerEndpoint{
  853. {
  854. Address: net.NewIPOrDomain(net.LocalHostIP),
  855. Port: uint32(serverPort),
  856. User: []*protocol.User{
  857. {
  858. Account: serial.ToTypedMessage(&vmess.Account{
  859. Id: userID.String(),
  860. }),
  861. },
  862. },
  863. },
  864. },
  865. }),
  866. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  867. StreamSettings: &internet.StreamConfig{
  868. SecurityType: serial.GetMessageType(&tls.Config{}),
  869. SecuritySettings: []*serial.TypedMessage{
  870. serial.ToTypedMessage(&tls.Config{
  871. AllowInsecure: true,
  872. PinnedPeerCertificateChainSha256: [][]byte{certHash},
  873. }),
  874. },
  875. },
  876. }),
  877. },
  878. },
  879. }
  880. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  881. common.Must(err)
  882. defer CloseAllServers(servers)
  883. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  884. t.Fatal(err)
  885. }
  886. }
  887. func TestSimpleTLSConnectionPinnedWrongCert(t *testing.T) {
  888. tcpServer := tcp.Server{
  889. MsgProcessor: xor,
  890. }
  891. dest, err := tcpServer.Start()
  892. common.Must(err)
  893. defer tcpServer.Close()
  894. certificateDer := cert.MustGenerate(nil)
  895. certificate := tls.ParseCertificate(certificateDer)
  896. certHash := tls.GenerateCertChainHash([][]byte{certificateDer.Certificate})
  897. certHash[1] += 1
  898. userID := protocol.NewID(uuid.New())
  899. serverPort := tcp.PickPort()
  900. serverConfig := &core.Config{
  901. Inbound: []*core.InboundHandlerConfig{
  902. {
  903. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  904. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  905. Listen: net.NewIPOrDomain(net.LocalHostIP),
  906. StreamSettings: &internet.StreamConfig{
  907. SecurityType: serial.GetMessageType(&tls.Config{}),
  908. SecuritySettings: []*serial.TypedMessage{
  909. serial.ToTypedMessage(&tls.Config{
  910. Certificate: []*tls.Certificate{certificate},
  911. }),
  912. },
  913. },
  914. }),
  915. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  916. User: []*protocol.User{
  917. {
  918. Account: serial.ToTypedMessage(&vmess.Account{
  919. Id: userID.String(),
  920. }),
  921. },
  922. },
  923. }),
  924. },
  925. },
  926. Outbound: []*core.OutboundHandlerConfig{
  927. {
  928. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  929. },
  930. },
  931. }
  932. clientPort := tcp.PickPort()
  933. clientConfig := &core.Config{
  934. Inbound: []*core.InboundHandlerConfig{
  935. {
  936. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  937. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  938. Listen: net.NewIPOrDomain(net.LocalHostIP),
  939. }),
  940. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  941. Address: net.NewIPOrDomain(dest.Address),
  942. Port: uint32(dest.Port),
  943. NetworkList: &net.NetworkList{
  944. Network: []net.Network{net.Network_TCP},
  945. },
  946. }),
  947. },
  948. },
  949. Outbound: []*core.OutboundHandlerConfig{
  950. {
  951. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  952. Receiver: []*protocol.ServerEndpoint{
  953. {
  954. Address: net.NewIPOrDomain(net.LocalHostIP),
  955. Port: uint32(serverPort),
  956. User: []*protocol.User{
  957. {
  958. Account: serial.ToTypedMessage(&vmess.Account{
  959. Id: userID.String(),
  960. }),
  961. },
  962. },
  963. },
  964. },
  965. }),
  966. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  967. StreamSettings: &internet.StreamConfig{
  968. SecurityType: serial.GetMessageType(&tls.Config{}),
  969. SecuritySettings: []*serial.TypedMessage{
  970. serial.ToTypedMessage(&tls.Config{
  971. AllowInsecure: true,
  972. PinnedPeerCertificateChainSha256: [][]byte{certHash},
  973. }),
  974. },
  975. },
  976. }),
  977. },
  978. },
  979. }
  980. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  981. common.Must(err)
  982. defer CloseAllServers(servers)
  983. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err == nil {
  984. t.Fatal(err)
  985. }
  986. }
  987. func TestUTLSConnectionPinned(t *testing.T) {
  988. tcpServer := tcp.Server{
  989. MsgProcessor: xor,
  990. }
  991. dest, err := tcpServer.Start()
  992. common.Must(err)
  993. defer tcpServer.Close()
  994. certificateDer := cert.MustGenerate(nil)
  995. certificate := tls.ParseCertificate(certificateDer)
  996. certHash := tls.GenerateCertChainHash([][]byte{certificateDer.Certificate})
  997. userID := protocol.NewID(uuid.New())
  998. serverPort := tcp.PickPort()
  999. serverConfig := &core.Config{
  1000. Inbound: []*core.InboundHandlerConfig{
  1001. {
  1002. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1003. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  1004. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1005. StreamSettings: &internet.StreamConfig{
  1006. SecurityType: serial.GetMessageType(&tls.Config{}),
  1007. SecuritySettings: []*serial.TypedMessage{
  1008. serial.ToTypedMessage(&tls.Config{
  1009. Certificate: []*tls.Certificate{certificate},
  1010. }),
  1011. },
  1012. },
  1013. }),
  1014. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  1015. User: []*protocol.User{
  1016. {
  1017. Account: serial.ToTypedMessage(&vmess.Account{
  1018. Id: userID.String(),
  1019. }),
  1020. },
  1021. },
  1022. }),
  1023. },
  1024. },
  1025. Outbound: []*core.OutboundHandlerConfig{
  1026. {
  1027. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  1028. },
  1029. },
  1030. }
  1031. clientPort := tcp.PickPort()
  1032. clientConfig := &core.Config{
  1033. Inbound: []*core.InboundHandlerConfig{
  1034. {
  1035. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1036. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  1037. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1038. }),
  1039. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  1040. Address: net.NewIPOrDomain(dest.Address),
  1041. Port: uint32(dest.Port),
  1042. NetworkList: &net.NetworkList{
  1043. Network: []net.Network{net.Network_TCP},
  1044. },
  1045. }),
  1046. },
  1047. },
  1048. Outbound: []*core.OutboundHandlerConfig{
  1049. {
  1050. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  1051. Receiver: []*protocol.ServerEndpoint{
  1052. {
  1053. Address: net.NewIPOrDomain(net.LocalHostIP),
  1054. Port: uint32(serverPort),
  1055. User: []*protocol.User{
  1056. {
  1057. Account: serial.ToTypedMessage(&vmess.Account{
  1058. Id: userID.String(),
  1059. }),
  1060. },
  1061. },
  1062. },
  1063. },
  1064. }),
  1065. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  1066. StreamSettings: &internet.StreamConfig{
  1067. SecurityType: serial.GetMessageType(&tls.Config{}),
  1068. SecuritySettings: []*serial.TypedMessage{
  1069. serial.ToTypedMessage(&tls.Config{
  1070. Fingerprint: "random",
  1071. AllowInsecure: true,
  1072. PinnedPeerCertificateChainSha256: [][]byte{certHash},
  1073. }),
  1074. },
  1075. },
  1076. }),
  1077. },
  1078. },
  1079. }
  1080. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  1081. common.Must(err)
  1082. defer CloseAllServers(servers)
  1083. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  1084. t.Fatal(err)
  1085. }
  1086. }
  1087. func TestUTLSConnectionPinnedWrongCert(t *testing.T) {
  1088. tcpServer := tcp.Server{
  1089. MsgProcessor: xor,
  1090. }
  1091. dest, err := tcpServer.Start()
  1092. common.Must(err)
  1093. defer tcpServer.Close()
  1094. certificateDer := cert.MustGenerate(nil)
  1095. certificate := tls.ParseCertificate(certificateDer)
  1096. certHash := tls.GenerateCertChainHash([][]byte{certificateDer.Certificate})
  1097. certHash[1] += 1
  1098. userID := protocol.NewID(uuid.New())
  1099. serverPort := tcp.PickPort()
  1100. serverConfig := &core.Config{
  1101. Inbound: []*core.InboundHandlerConfig{
  1102. {
  1103. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1104. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(serverPort)}},
  1105. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1106. StreamSettings: &internet.StreamConfig{
  1107. SecurityType: serial.GetMessageType(&tls.Config{}),
  1108. SecuritySettings: []*serial.TypedMessage{
  1109. serial.ToTypedMessage(&tls.Config{
  1110. Certificate: []*tls.Certificate{certificate},
  1111. }),
  1112. },
  1113. },
  1114. }),
  1115. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  1116. User: []*protocol.User{
  1117. {
  1118. Account: serial.ToTypedMessage(&vmess.Account{
  1119. Id: userID.String(),
  1120. }),
  1121. },
  1122. },
  1123. }),
  1124. },
  1125. },
  1126. Outbound: []*core.OutboundHandlerConfig{
  1127. {
  1128. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  1129. },
  1130. },
  1131. }
  1132. clientPort := tcp.PickPort()
  1133. clientConfig := &core.Config{
  1134. Inbound: []*core.InboundHandlerConfig{
  1135. {
  1136. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  1137. PortList: &net.PortList{Range: []*net.PortRange{net.SinglePortRange(clientPort)}},
  1138. Listen: net.NewIPOrDomain(net.LocalHostIP),
  1139. }),
  1140. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  1141. Address: net.NewIPOrDomain(dest.Address),
  1142. Port: uint32(dest.Port),
  1143. NetworkList: &net.NetworkList{
  1144. Network: []net.Network{net.Network_TCP},
  1145. },
  1146. }),
  1147. },
  1148. },
  1149. Outbound: []*core.OutboundHandlerConfig{
  1150. {
  1151. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  1152. Receiver: []*protocol.ServerEndpoint{
  1153. {
  1154. Address: net.NewIPOrDomain(net.LocalHostIP),
  1155. Port: uint32(serverPort),
  1156. User: []*protocol.User{
  1157. {
  1158. Account: serial.ToTypedMessage(&vmess.Account{
  1159. Id: userID.String(),
  1160. }),
  1161. },
  1162. },
  1163. },
  1164. },
  1165. }),
  1166. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  1167. StreamSettings: &internet.StreamConfig{
  1168. SecurityType: serial.GetMessageType(&tls.Config{}),
  1169. SecuritySettings: []*serial.TypedMessage{
  1170. serial.ToTypedMessage(&tls.Config{
  1171. Fingerprint: "random",
  1172. AllowInsecure: true,
  1173. PinnedPeerCertificateChainSha256: [][]byte{certHash},
  1174. }),
  1175. },
  1176. },
  1177. }),
  1178. },
  1179. },
  1180. }
  1181. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  1182. common.Must(err)
  1183. defer CloseAllServers(servers)
  1184. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err == nil {
  1185. t.Fatal(err)
  1186. }
  1187. }