ZetCode

Dart TlsProtocolVersion

最后修改于 2025 年 4 月 4 日

Dart 中的 TlsProtocolVersion 类代表用于安全通信的 TLS 协议版本。它对于网络安全至关重要。

TlsProtocolVersion 提供了标准 TLS 版本的常量以及比较版本的方法。它是 Dart 的 dart:io 库的一部分。

基本定义

TlsProtocolVersion 是一个表示 TLS 版本的不可变类。它包括 TLSv1、TLSv1_1、TLSv1_2 和 TLSv1_3 等常量。

主要功能包括版本比较、字符串表示和验证。它用于安全套接字配置和安全策略定义。

TlsProtocolVersion 的基本用法

此示例展示了 TlsProtocolVersion 常量的基本用法。

main.dart
import 'dart:io';

void main() {
  var tls1 = TlsProtocolVersion.tls1;
  var tls12 = TlsProtocolVersion.tls1_2;
  
  print('TLS 1.0: $tls1');
  print('TLS 1.2: $tls12');
  
  print('Is TLS 1.2 newer than TLS 1.0? ${tls12 > tls1}');
}

我们使用内置常量创建协议版本对象并进行比较。该类提供了 TLS 版本的自然排序。

$ dart main.dart
TLS 1.0: TlsProtocolVersion:0x0301
TLS 1.2: TlsProtocolVersion:0x0303
Is TLS 1.2 newer than TLS 1.0? true

创建自定义协议版本

此示例演示了创建自定义协议版本对象。

main.dart
import 'dart:io';

void main() {
  var customVersion = TlsProtocolVersion(3, 4);
  
  print('Custom version: $customVersion');
  print('Is standard: ${customVersion.isStandard}');
  
  var ssl30 = TlsProtocolVersion(3, 0);
  print('SSL 3.0: $ssl30');
  print('Is standard: ${ssl30.isStandard}');
}

我们通过指定主版本号和次版本号来创建非标准 TLS 版本。`isStandard` 属性用于检查版本是否为公认的标准。

$ dart main.dart
Custom version: TlsProtocolVersion:0x0304
Is standard: false
SSL 3.0: TlsProtocolVersion:0x0300
Is standard: true

比较协议版本

此示例展示了详细的版本比较操作。

main.dart
import 'dart:io';

void main() {
  var tls11 = TlsProtocolVersion.tls1_1;
  var tls13 = TlsProtocolVersion.tls1_3;
  
  print('Comparison results:');
  print('tls11 < tls13: ${tls11 < tls13}');
  print('tls11 <= tls13: ${tls11 <= tls13}');
  print('tls11 == tls13: ${tls11 == tls13}');
  print('tls11 >= tls13: ${tls11 >= tls13}');
  print('tls11 > tls13: ${tls11 > tls13}');
  
  print('Hash codes:');
  print('tls11: ${tls11.hashCode}');
  print('tls13: ${tls13.hashCode}');
}

TlsProtocolVersion 实现了 `Comparable` 接口,支持完整的比较操作。哈希码与相等性比较一致。

$ dart main.dart
Comparison results:
tls11 < tls13: true
tls11 <= tls13: true
tls11 == tls13: false
tls11 >= tls13: false
tls11 > tls13: false
Hash codes:
tls11: 769
tls13: 772

与 SecureSocket 一起使用

此示例在实际的 SecureSocket 上下文中展示了 TlsProtocolVersion。

main.dart
import 'dart:io';

void main() async {
  var server = await SecureServerSocket.bind(
    'localhost', 0,
    context: SecurityContext()
      ..useCertificateChain('cert.pem')
      ..usePrivateKey('key.pem'),
    supportedProtocols: [TlsProtocolVersion.tls1_3]
  );
  
  print('Server running with TLS 1.3 only');
  print('Supported version: ${server.supportedProtocols}');
  
  server.close();
}

我们配置了一个 SecureServerSocket,使其仅接受 TLS 1.3 连接。`supportedProtocols` 参数使用 TlsProtocolVersion 值。

$ dart main.dart
Server running with TLS 1.3 only
Supported version: [TlsProtocolVersion:0x0304]

版本验证

此示例演示了版本验证和范围检查。

main.dart
import 'dart:io';

void main() {
  var minVersion = TlsProtocolVersion.tls1_2;
  var current = TlsProtocolVersion.tls1_3;
  var old = TlsProtocolVersion.tls1;
  
  print('Is current acceptable? ${current >= minVersion}');
  print('Is old acceptable? ${old >= minVersion}');
  
  var rangeCheck = (TlsProtocolVersion version) {
    return version >= TlsProtocolVersion.tls1_1 &&
           version <= TlsProtocolVersion.tls1_3;
  };
  
  print('TLS 1.0 in range: ${rangeCheck(TlsProtocolVersion.tls1)}');
  print('TLS 1.2 in range: ${rangeCheck(TlsProtocolVersion.tls1_2)}');
}

我们通过检查版本范围来实现安全策略。这在需要最低 TLS 版本以符合安全要求的应用程序中很常见。

$ dart main.dart
Is current acceptable? true
Is old acceptable? false
TLS 1.0 in range: false
TLS 1.2 in range: true

最佳实践

来源

Dart TlsProtocolVersion 文档

本教程介绍了 Dart 的 TlsProtocolVersion 类,并通过实际示例展示了版本处理、比较和安全套接字配置。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 Dart 教程