Skip to content

cWinsock TLS/SSL 支持

概述

cWinsock 支持通过链式函数配置 TLS,实现加密 TCP 通信。内部已将 cAsyncSocket 替换为 cTlsSocket(严格超集,TLS 未启用时行为完全一致)。

链式函数

Tls — 客户端 TLS(无需证书)

客户端连接 TLS 服务器时使用,只需启用加密,无需本地证书。

vb
Public Function Tls() As cWinsock

适用场景: 连接 wss:// 服务器、https:// 网站、TLS TCP 服务器等。

TlsCertFile — 证书文件模式

服务端 Listen 时出示证书,最常用方式。

vb
Public Function TlsCertFile( _
    ByVal CertFile As String, _
    Optional ByVal Password As String, _
    Optional ByVal AlpnProtocols As String = "http/1.1") As cWinsock

参数:

参数类型必要说明
CertFileString证书文件路径。PFX/P12 或 PEM 格式,PEM 支持用 | 分隔多文件
PasswordString证书密码,PEM 无加密私钥时留空
AlpnProtocolsStringALPN 协议协商,默认 "http/1.1"

TlsCertSubject — Windows 证书存储模式

从 Windows 系统证书库查找证书。

vb
Public Function TlsCertSubject( _
    ByVal CertSubject As String, _
    Optional ByVal AlpnProtocols As String = "http/1.1") As cWinsock

TlsCertMemory — 内存证书集合模式

高级用法,从内存中的 Collection 加载证书。

vb
Public Function TlsCertMemory( _
    ByVal Certificates As Collection, _
    ByVal PrivateKey As Collection, _
    Optional ByVal AlpnProtocols As String = "http/1.1") As cWinsock

新增事件

ServerCertificateVerify

客户端连接 TLS 服务器时,用于验证服务器证书。

vb
Event ServerCertificateVerify(Client As cWinsock, Issuers As Object, ByRef Confirmed As Boolean)
  • Issuers:服务器证书链信息
  • Confirmed:设为 True 信任证书,设为 False 拒绝连接
  • 默认行为:自动信任(Confirmed = True

使用示例

客户端 TLS 连接

vb
Dim ws As New cWinsock
ws.Tls.Connect "example.com", 443

服务端 TLS 监听

vb
Dim svr As New cWinsock
svr.TlsCertFile("C:\certs\server.pfx", "password").Listen 443

条件启用

vb
If Config.UseTLS Then
    ws.Tls
End If
ws.Connect Config.Host, Config.Port

链式配置

vb
Dim svr As New cWinsock
svr.TlsCertFile("cert.pem").Delimiter(vbCrLf).AutoHeartbeat = True
svr.Listen 9000

同步 TLS 连接

vb
Dim ws As New cWinsock
ws.Tls
If ws.SyncConnect("example.com", 443, 5000) Then
    ' TLS 连接成功
End If

证书验证(自定义)

vb
Private Sub m_oSocket_ServerCertificateVerify(Client As cWinsock, Issuers As Object, ByRef Confirmed As Boolean)
    ' 仅信任特定证书
    If 检查证书是否可信 Then
        Confirmed = True
    Else
        Confirmed = False
    End If
End Sub

证书来源说明

三种证书模式的详细介绍,参见 TLS 证书配置总览

证书模式详见
TlsCertFile(证书文件)证书文件模式
TlsCertSubject(Windows 证书存储)Windows 证书存储模式
TlsCertMemory(内存证书集合)内存证书集合模式

内部机制

TLS 模式枚举

vb
Private Enum EnumTlsMode
    TlsNone          ' 未启用(默认,纯 TCP)
    TlsModeClient    ' 客户端 TLS(Connect 时启用加密)
    TlsModeCertFile  ' 证书文件(Listen 时出示证书)
    TlsModeSubject   ' Windows 证书存储
    TlsModeMemory    ' 内存证书集合
End Enum

核心替换

  • cAsyncSocketcTlsSocket:所有 New cAsyncSocket 改为 New cTlsSocket
  • Connect:TLS 模式时传 UseTls:=True
  • Listen:TLS 模式时先调用 InitServerTls 初始化证书
  • AcceptFrom:参数类型改为 cTlsSocket,Accept 传 UseTls 标志
  • SyncConnect:TLS 模式时传 UseTls:=True
  • Close_:重置 TLS 状态

向后兼容

不调用任何 Tls 函数时,行为与改造前完全一致。cTlsSocket 在 TLS 未启用时,与 cAsyncSocket 行为完全相同。

注意事项

  1. UDP 不受影响:TLS 仅适用于 TCP,UDP 模式下 Tls 函数调用无效
  2. AcceptFrom 跨类访问:使用 TlsModeInternal Friend Property 读取父级 TLS 状态
  3. 编译依赖:项目需包含 cTlsSocket.cls 及其依赖的 TLS 模块
  4. 向后兼容:不调用任何 Tls 函数时,行为与改造前完全一致
  5. 证书来源优先级:内存集合 > 证书文件 > Windows 证书存储

VB6及其LOGO版权为微软公司所有