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 教程。