193 lines
5.2 KiB
Markdown
193 lines
5.2 KiB
Markdown
|
|
# TestEcho-SSL-Console 演示程序
|
|||
|
|
|
|||
|
|
这是一个基于HP-Socket的SSL服务器和客户端控制台演示程序。
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
TestEcho-SSL-Console/
|
|||
|
|
├── Server/ # SSL服务器控制台程序
|
|||
|
|
│ ├── main.cpp
|
|||
|
|
│ └── Server.vcxproj
|
|||
|
|
├── Client/ # SSL客户端控制台程序
|
|||
|
|
│ ├── main.cpp
|
|||
|
|
│ └── Client.vcxproj
|
|||
|
|
├── TestEcho-SSL-Console.sln # VS2022解决方案文件
|
|||
|
|
└── README.md # 本文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
### 服务器端 (Server)
|
|||
|
|
- 监听端口:5555
|
|||
|
|
- 绑定地址:0.0.0.0(所有网络接口)
|
|||
|
|
- SSL/TLS加密通信
|
|||
|
|
- 接收客户端消息并在控制台显示
|
|||
|
|
- 自动向客户端发送响应消息
|
|||
|
|
- 按 'Q' 键停止服务器
|
|||
|
|
|
|||
|
|
### 客户端 (Client)
|
|||
|
|
- 连接到:127.0.0.1:5555
|
|||
|
|
- SSL/TLS加密通信
|
|||
|
|
- 交互式命令界面
|
|||
|
|
- 命令:
|
|||
|
|
- **1** - 发送 "hello" 消息到服务器
|
|||
|
|
- **Q** - 断开连接并退出
|
|||
|
|
|
|||
|
|
## 编译和运行
|
|||
|
|
|
|||
|
|
### 前提条件
|
|||
|
|
- Visual Studio 2022
|
|||
|
|
- HP-Socket源码库
|
|||
|
|
- OpenSSL库(已包含在 `Windows/Dependent/openssl/` 目录中)
|
|||
|
|
|
|||
|
|
### 编译步骤
|
|||
|
|
|
|||
|
|
1. 打开 Visual Studio 2022
|
|||
|
|
2. 打开解决方案文件:`TestEcho-SSL-Console.sln`
|
|||
|
|
3. 选择配置(Debug 或 Release)和平台(x86 或 x64)
|
|||
|
|
4. 生成解决方案(Ctrl+Shift+B)
|
|||
|
|
|
|||
|
|
编译成功后,可执行文件将生成在:
|
|||
|
|
- `Windows/Demo/Debug/x64/` 或 `Windows/Demo/Release/x64/`(64位)
|
|||
|
|
- `Windows/Demo/Debug/x86/` 或 `Windows/Demo/Release/x86/`(32位)
|
|||
|
|
|
|||
|
|
### 运行步骤
|
|||
|
|
|
|||
|
|
#### 方式1:使用命令行
|
|||
|
|
|
|||
|
|
1. **启动服务器**
|
|||
|
|
```
|
|||
|
|
cd Windows\Demo\Debug\x64
|
|||
|
|
TestEcho-SSL-Console-Server.exe
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **启动客户端**(在另一个命令行窗口)
|
|||
|
|
```
|
|||
|
|
cd Windows\Demo\Debug\x64
|
|||
|
|
TestEcho-SSL-Console-Client.exe
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 方式2:从Visual Studio运行
|
|||
|
|
|
|||
|
|
1. 右键点击 Server 项目 -> 设为启动项目
|
|||
|
|
2. 按 F5 或 Ctrl+F5 运行服务器
|
|||
|
|
3. 右键点击 Client 项目 -> 设为启动项目
|
|||
|
|
4. 按 F5 或 Ctrl+F5 运行客户端
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
### 服务器端输出示例:
|
|||
|
|
```
|
|||
|
|
========================================
|
|||
|
|
HP-Socket SSL Server 控制台演示程序
|
|||
|
|
========================================
|
|||
|
|
|
|||
|
|
[服务器] 正在初始化SSL环境...
|
|||
|
|
[服务器] SSL环境初始化成功
|
|||
|
|
[服务器] 正在启动服务器...
|
|||
|
|
[服务器] 准备监听: 0.0.0.0:5555
|
|||
|
|
[服务器] 服务器启动成功,监听端口: 5555
|
|||
|
|
[服务器] 按 'Q' 键停止服务器...
|
|||
|
|
|
|||
|
|
[服务器] 客户端连接: ID=1, 地址=127.0.0.1:12345
|
|||
|
|
[服务器] SSL握手完成: ID=1
|
|||
|
|
[服务器] 接收到消息: ID=1, 内容="hello from client"
|
|||
|
|
[服务器] 发送响应: "hello!"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 客户端输出示例:
|
|||
|
|
```
|
|||
|
|
========================================
|
|||
|
|
HP-Socket SSL Client 控制台演示程序
|
|||
|
|
========================================
|
|||
|
|
|
|||
|
|
[客户端] 正在初始化SSL环境...
|
|||
|
|
[客户端] SSL环境初始化成功
|
|||
|
|
[客户端] 正在连接服务器 127.0.0.1:5555 ...
|
|||
|
|
[客户端] 连接成功: 本地地址=127.0.0.1:12345
|
|||
|
|
[客户端] SSL握手完成
|
|||
|
|
[客户端] 已连接到服务器,可以开始发送消息
|
|||
|
|
|
|||
|
|
----------------------------------------
|
|||
|
|
命令菜单:
|
|||
|
|
1 - 发送 'hello' 到服务器
|
|||
|
|
Q - 断开连接并退出
|
|||
|
|
----------------------------------------
|
|||
|
|
请输入命令: 1
|
|||
|
|
[客户端] 发送消息: "hello"
|
|||
|
|
[客户端] 收到服务器响应: "hello!"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## SSL证书说明
|
|||
|
|
|
|||
|
|
本程序使用的SSL证书已经内嵌在代码中(来自 `TestEcho-SSL` 示例项目):
|
|||
|
|
- 服务器证书:`server.cer` / `server.key`
|
|||
|
|
- 客户端证书:`client.cer` / `client.key`
|
|||
|
|
- CA证书:`ca.crt`
|
|||
|
|
- 密钥密码:123456
|
|||
|
|
|
|||
|
|
这些证书仅用于演示目的,**不应在生产环境中使用**。
|
|||
|
|
|
|||
|
|
## 技术细节
|
|||
|
|
|
|||
|
|
### 核心类和接口
|
|||
|
|
- **CSSLServer**:SSL服务器类
|
|||
|
|
- **CSSLClient**:SSL客户端类
|
|||
|
|
- **CTcpServerListener**:服务器事件监听器接口
|
|||
|
|
- **CTcpClientListener**:客户端事件监听器接口
|
|||
|
|
|
|||
|
|
### SSL配置
|
|||
|
|
- **服务器验证模式**:SSL_VM_PEER | SSL_VM_FAIL_IF_NO_PEER_CERT
|
|||
|
|
- **客户端验证模式**:SSL_VM_PEER
|
|||
|
|
- **加密方式**:使用内存中的PEM格式证书
|
|||
|
|
|
|||
|
|
### 依赖库
|
|||
|
|
- `crypt32.lib` - Windows加密API
|
|||
|
|
- `libssl.lib` - OpenSSL SSL/TLS库
|
|||
|
|
- `libcrypto.lib` - OpenSSL加密库
|
|||
|
|
- `ws2_32.lib` - Windows套接字库
|
|||
|
|
|
|||
|
|
## 故障排除
|
|||
|
|
|
|||
|
|
### 编译错误
|
|||
|
|
|
|||
|
|
1. **找不到OpenSSL头文件**
|
|||
|
|
- 检查 `Windows/Dependent/openssl/v143/` 目录是否存在
|
|||
|
|
- 确认项目属性中的包含目录设置正确
|
|||
|
|
|
|||
|
|
2. **链接错误:找不到libssl.lib**
|
|||
|
|
- 检查 `Windows/Dependent/openssl/v143/[x86|x64]/lib/` 目录
|
|||
|
|
- 确认项目属性中的库目录设置正确
|
|||
|
|
|
|||
|
|
### 运行时错误
|
|||
|
|
|
|||
|
|
1. **服务器启动失败:端口已被占用**
|
|||
|
|
- 检查端口5555是否被其他程序占用
|
|||
|
|
- 使用 `netstat -ano | findstr 5555` 查看端口占用情况
|
|||
|
|
|
|||
|
|
2. **客户端连接失败**
|
|||
|
|
- 确保服务器已经启动
|
|||
|
|
- 检查防火墙设置
|
|||
|
|
- 确认服务器监听的地址和端口正确
|
|||
|
|
|
|||
|
|
3. **SSL握手失败**
|
|||
|
|
- 检查证书配置是否正确
|
|||
|
|
- 确认OpenSSL DLL文件在系统路径中
|
|||
|
|
|
|||
|
|
## 相关链接
|
|||
|
|
|
|||
|
|
- HP-Socket项目:https://github.com/ldcsaa/HP-Socket
|
|||
|
|
- OpenSSL官网:https://www.openssl.org/
|
|||
|
|
|
|||
|
|
## 版本信息
|
|||
|
|
|
|||
|
|
- HP-Socket版本:6.0.7
|
|||
|
|
- Visual Studio版本:2022
|
|||
|
|
- 平台工具集:v143
|
|||
|
|
- Windows SDK:10.0
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
本演示程序遵循HP-Socket项目的Apache License 2.0许可证。
|