package transport import ( "crypto/tls" "fmt" "net" "time" ) // UpgradeTLS 在 X.224 协商后升级为 TLS,RDP 自签证书由堡垒机侧 TOFU 处理 // Logan.Li func UpgradeTLS(conn net.Conn, serverName string, timeout time.Duration) (*tls.Conn, error) { _ = conn.SetDeadline(time.Now().Add(timeout)) tlsConn := tls.Client(conn, &tls.Config{ ServerName: serverName, InsecureSkipVerify: true, // RDP 常见自签证书,后续可落库校验指纹 // Logan.Li MinVersion: tls.VersionTLS10, MaxVersion: tls.VersionTLS12, }) if err := tlsConn.Handshake(); err != nil { return nil, err } _ = tlsConn.SetDeadline(time.Time{}) return tlsConn, nil } // TLSCipherSuiteName 返回 TLS cipher suite 名称,旧版本未命名时回退十六进制 // Logan.Li func TLSCipherSuiteName(id uint16) string { for _, suite := range tls.CipherSuites() { if suite.ID == id { return suite.Name } } for _, suite := range tls.InsecureCipherSuites() { if suite.ID == id { return suite.Name } } return fmt.Sprintf("0x%04x", id) }