Dart SecureServerSocket
最后修改于 2025 年 4 月 4 日
Dart 中的 SecureServerSocket 类使用 SSL/TLS 协议提供安全网络通信。它对于客户端-服务器应用程序中的加密数据传输至关重要。
SecureServerSocket 创建加密套接字服务器,这些服务器对客户端进行身份验证并保护数据完整性。它是 Dart 的 dart:io 库的一部分。
基本定义
SecureServerSocket 是一个服务器套接字,通过 SSL/TLS 提供安全通信。它需要安全上下文配置。
主要功能包括加密、证书管理和安全连接处理。它通过安全功能扩展了 ServerSocket。
基本的 SecureServerSocket 用法
此示例展示了基本的安全套接字服务器创建。
main.dart
import 'dart:io';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem');
var server = await SecureServerSocket.bind(
'localhost', 4040, context);
print('Secure server listening on port 4040');
await for (var socket in server) {
socket.write('Secure hello!');
await socket.close();
}
}
我们使用证书文件创建一个安全上下文,然后绑定一个安全服务器。服务器接受连接,并向每个客户端发送安全消息。
$ dart main.dart Secure server listening on port 4040
处理客户端连接
此示例演示了安全客户端连接处理。
main.dart
import 'dart:io';
import 'dart:convert';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem');
var server = await SecureServerSocket.bind(
'localhost', 4040, context);
await for (var socket in server) {
socket.transform(utf8.decoder).listen((data) {
print('Received: $data');
socket.write('Secure echo: $data');
});
}
}
服务器以安全的方式将接收到的数据回显。我们使用转换器进行流处理。每个连接都会自动加密。
$ dart main.dart Received: Test message
客户端身份验证
此示例展示了服务器端客户端证书验证。
main.dart
import 'dart:io';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem')
..setClientAuthorities('ca.pem');
var server = await SecureServerSocket.bind(
'localhost', 4040, context,
requestClientCertificate: true);
await for (var socket in server) {
var cert = socket.peerCertificate;
if (cert == null) {
print('Client failed authentication');
await socket.close();
continue;
}
print('Client authenticated: ${cert.subject}');
socket.write('Welcome authenticated client!');
}
}
服务器需要客户端证书进行身份验证。我们在处理连接之前检查对等证书。这提供了双向身份验证。
$ dart main.dart Client authenticated: CN=Client1
自定义安全参数
此示例演示了自定义 SSL/TLS 协议配置。
main.dart
import 'dart:io';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem')
..setAlpnProtocols(['h2', 'http/1.1'], true);
var server = await SecureServerSocket.bind(
'localhost', 4040, context,
supportedProtocols: ['TLSv1.3']);
print('Server using TLS 1.3 with ALPN support');
await for (var socket in server) {
print('Negotiated protocol: ${socket.selectedProtocol}');
socket.write('Secure connection established');
}
}
我们配置 ALPN 协议并限制为 TLS 1.3。服务器报告每个连接协商的协议。这支持现代安全功能。
$ dart main.dart Server using TLS 1.3 with ALPN support Negotiated protocol: h2
安全 Web 服务器
此示例创建了一个基本的安全 HTTP 服务器。
main.dart
import 'dart:io';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem');
var server = await SecureServerSocket.bind(
'localhost', 4433, context);
await for (var socket in server) {
socket.write('HTTP/1.1 200 OK\r\n'
'Content-Type: text/plain\r\n'
'\r\n'
'Secure Hello from Dart!');
await socket.close();
}
}
服务器使用简单的消息响应 HTTPS 请求。请注意正确的 HTTP 标头和响应格式。这展示了安全 Web 通信。
$ dart main.dart (Server running, accessible via https://:4433)
最佳实践
- 证书管理: 使用来自受信任 CA 的有效证书
- 协议选择: 首选 TLS 1.2 或更高版本以保证安全
- 错误处理: 为连接问题实现适当的错误处理
- 资源清理: 始终正确关闭套接字和服务器
- 配置: 定期更新安全上下文设置
来源
本教程介绍了 Dart 的 SecureServerSocket 类,并提供了实际示例,展示了安全通信、身份验证和现代协议配置。
作者
列出 所有 Dart 教程。