Skip to content

Latest commit

 

History

261 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go TLCP

Github CI Documentation GitHub go.mod Go version GitHub tag (latest SemVer)

在使用 GoTLCP 前,请务必悉知 《Go TLCP 免责声明》!

GoTLCP 采用 Go 语言实现的国密传输层密码协议套件,同时支持以下两个协议标准:

  • TLCP 遵循 GB/T 38636-2020《信息安全技术 传输层密码协议(TLCP)》 ,并依据 GM/T 0024-2023《SSL VPN 技术规范》 扩展支持基于 SM9 的标识密码(IBC)密码套件;基于 TCP(net.Conn)提供可靠传输,适用于 Web 服务、API 网关等基于 TCP 的国密安全通信场景。

  • DTLCP 遵循 GM/T 0128-2023《数据报传输层密码协议规范(DTLCP)》,基于 UDP(net.PacketConn)提供数据报传输层密码保护,适用于需要国密安全通信但无法依赖 TCP 可靠传输的场景。

协议关系

GoTLCP 实现了记录层协议、握手协议族以及密钥计算,支持完整握手、会话重用、传输保护、单向身份认证(认证服务端)和双向身份认证。

全面支持国产商用密码全系列密码套件

  • SM2系列:ECC_SM4_GCM_SM3、ECC_SM4_CBC_SM3、ECDHE_SM4_GCM_SM3、ECDHE_SM4_CBC_SM3
  • SM9系列:IBC_SM4_GCM_SM3、IBC_SM4_CBC_SM3、IBSDH_SM4_GCM_SM3、IBSDH_SM4_CBC_SM3

兼容适配各类Web框架,包括Gin、Fiber、go http。

若 clone 和文档预览存在困难,请移步 https://gitee.com/Trisia/gotlcp

若您想快速实现TLCP(国密)HTTPS代理,可以考虑使用 tlcpchan工具 . https://github.com/Trisia/tlcpchan

安装

为了安装使用 GoTLCP,您需要首先安装 Go 并且设置您的 Go 环境,GoTLCP 至少需要您的 Go 版本在 1.25 及以上。

通过下面命令就可以安装 GoTLCP:

go get -u gitee.com/Trisia/gotlcp

GoTLCP 将持续保证 API 的向下兼容,您可以放心的升级 GoTLCP 库至最新版本。

TLCP 快速开始

客户端

package main

import (
	"fmt"
	"gitee.com/Trisia/gotlcp/tlcp"
)

func main() {
	conn, err := tlcp.Dial("tcp", "127.0.0.1:8443", &tlcp.Config{InsecureSkipVerify: true})
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	buff := make([]byte, 516)
	n, err := conn.Read(buff)
	if err != nil {
		panic(err)
	}
	fmt.Printf(">> %s\n", buff[:n])
}

服务端

package main

import (
	"gitee.com/Trisia/gotlcp/tlcp"
	"net"
)

func main() {
	config := &tlcp.Config{
		Certificates: []tlcp.Certificate{sigCert, encCert},
	}
	listen, err := tlcp.Listen("tcp", ":8443", config)
	if err != nil {
		panic(err)
	}
	var conn net.Conn
	for {
		conn, err = listen.Accept()
		if err != nil {
			panic(err)
		}
		_, _ = conn.Write([]byte("Hello Go TLCP!"))
		_ = conn.Close()
	}
}

若您需要同时支持 TLCP/TLS 协议,请参考 GoTLCP 协议适配器 相关内容。

若您需要使用基于 SM9 的标识密码(IBC/IBSDH)密码套件,请参考 IBC 快速入门 与 IBC 配置与使用指南。

DTLCP 快速开始

客户端

package main

import (
	"fmt"
	"gitee.com/Trisia/gotlcp/dtlcp"
)

func main() {
	conn, err := dtlcp.Dial("udp", "127.0.0.1:8443", &dtlcp.Config{InsecureSkipVerify: true})
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	_, err = conn.WriteTo([]byte("Hello DTLCP Server!"), conn.RemoteAddr())
	if err != nil {
		panic(err)
	}
	buff := make([]byte, 516)
	n, addr, err := conn.ReadFrom(buff)
	if err != nil {
		panic(err)
	}
	fmt.Printf(">> %s (来自 %s)\n", buff[:n], addr)
}

服务端

package main

import (
	"gitee.com/Trisia/gotlcp/dtlcp"
)

func main() {
	config := &dtlcp.Config{
		Certificates: []dtlcp.Certificate{sigCert, encCert},
	}
	ln, err := dtlcp.Listen("udp", ":8443", config)
	if err != nil {
		panic(err)
	}
	defer ln.Close()

	for {
		conn, err := ln.Accept()
		if err != nil {
			panic(err)
		}
		go func() {
			defer conn.Close()
			buf := make([]byte, 1024)
			n, addr, _ := conn.(*dtlcp.Conn).ReadFrom(buf)
			conn.(*dtlcp.Conn).WriteTo([]byte("Hello DTLCP Client!"), addr)
			_ = buf[:n]
		}()
	}
}

文档

TLCP

  • 关于 TLCP 协议 — TLCP 协议介绍、握手流程、密码套件说明,适合了解 TLCP 协议原理
  • 数字证书及密钥 — 签名证书与加密证书的解析和构造方法,以及 SM9/IBC 标识密钥与公共参数,用于准备 TLCP/DTLCP 双证书或 IBC 配置
  • 客户端配置 — TLCP 客户端 Config 字段详解,用于开发 TLCP 客户端应用
  • 服务端配置 — TLCP 服务端 Config 字段详解,用于开发 TLCP 服务端应用
  • HTTPS 配置 — TLCP HTTPS 客户端和 Gin/Fiber 服务端配置,用于搭建国密 HTTPS 服务
  • 协议适配器 — TLCP/TLS 自适应监听器,用于同时提供 TLCP 和 TLS 服务

IBC(标识密码)

  • IBC 快速入门 — IBC 密码套件概述、KGC 公共参数与用户私钥准备、可运行的服务端/客户端示例(TLCP 与 DTLCP),适合快速上手
  • IBC 配置与使用指南 — IBC 相关 Config 字段、信任池、双向认证、会话重用、安全模型与告警映射(TLCP 与 DTLCP 通用)

DTLCP

  • DTLCP 快速入门 — DTLCP 协议概述、服务端/客户端快速启动,适合快速上手 DTLCP
  • DTLCP 配置与使用指南 — DTLCP Config 字段详解、安全配置建议,用于开发 DTLCP 应用
  • DTLCP 设计文档 — 协议栈架构、记录层、握手协议、Flight 机制、重传状态机、Cookie 防 DoS 等原理说明

其他

致谢

  • 项目中的 SM 系列算法由 emmansun/gmsm 项目实现,其项目中通过 CPU 指令集优化了算法效率。
  • 项目 TLCP 协议代码裁剪自 go 1.19 版本 golang/src/crypto/tls 模块。

About

Go语言实现的传输层密码协议(TLCP GMSSL),TLCP协议遵循 GB/T 38636-2020 Information security technology Transport Layer Cryptography Protocol (TLCP)

Topics

Resources

Stars

101 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages