ZetCode

Dart TlsProtocolVersion

last modified October 18, 2026

The TlsProtocolVersion class in Dart represents the TLS protocol versions supported by dart:io. It is used to configure the minimum TLS version for secure connections.

TlsProtocolVersion exposes the static constants tls1_2 and tls1_3. It has no public constructor and does not implement ordering; versions are compared by equality.

Basic Definition

TlsProtocolVersion is an immutable class representing a TLS version. Dart's dart:io library currently defines the constants tls1_2 and tls1_3.

The version is applied through SecurityContext.minimumTlsProtocolVersion. There is no public API for constructing arbitrary versions or comparing them with relational operators.

Basic TlsProtocolVersion Usage

This example shows basic usage of TlsProtocolVersion constants.

main.dart
import 'dart:io';

void main() {
  const tls12 = TlsProtocolVersion.tls1_2;
  const tls13 = TlsProtocolVersion.tls1_3;

  print('TLS 1.2 available: ${tls12 == TlsProtocolVersion.tls1_2}');
  print('TLS 1.3 available: ${tls13 == TlsProtocolVersion.tls1_3}');
  print('TLS 1.2 and TLS 1.3 are distinct: ${tls12 != tls13}');
}

We access the built-in constants and compare them with equality. The class does not provide < or > operators.

$ dart main.dart
TLS 1.2 available: true
TLS 1.3 available: true
TLS 1.2 and TLS 1.3 are distinct: true

Setting the Minimum TLS Version

This example demonstrates configuring the minimum TLS version on a SecurityContext.

main.dart
import 'dart:io';

void main() {
  var context = SecurityContext();

  print('Default minimum is TLS 1.2: '
      '${context.minimumTlsProtocolVersion == TlsProtocolVersion.tls1_2}');

  context.minimumTlsProtocolVersion = TlsProtocolVersion.tls1_3;

  print('Minimum is now TLS 1.3: '
      '${context.minimumTlsProtocolVersion == TlsProtocolVersion.tls1_3}');
}

A new SecurityContext defaults to TLS 1.2. Assigning minimumTlsProtocolVersion ensures that older protocol versions are rejected for new connections.

$ dart main.dart
Default minimum is TLS 1.2: true
Minimum is now TLS 1.3: true

Checking Version Equality

This example shows how to compare version constants and test membership.

main.dart
import 'dart:io';

void main() {
  var tls12 = TlsProtocolVersion.tls1_2;
  var tls13 = TlsProtocolVersion.tls1_3;
  var versions = [tls12, tls13];

  print('tls12 == tls13: ${tls12 == tls13}');
  print('tls12 != tls13: ${tls12 != tls13}');
  print('tls12 is in the list: '
      '${versions.contains(TlsProtocolVersion.tls1_2)}');
  print('Identical tls13 constants: '
      '${identical(tls13, TlsProtocolVersion.tls1_3)}');
}

TlsProtocolVersion supports equality and identity comparisons but does not implement Comparable. Use == or list membership when validating a version.

$ dart main.dart
tls12 == tls13: false
tls12 != tls13: true
tls12 is in the list: true
Identical tls13 constants: true

Using with SecureServerSocket

This example shows TlsProtocolVersion in a real SecureServerSocket context.

main.dart
import 'dart:io';

void main() async {
  var context = SecurityContext()
    ..useCertificateChain('cert.pem')
    ..usePrivateKey('key.pem')
    ..minimumTlsProtocolVersion = TlsProtocolVersion.tls1_3;

  var server = await SecureServerSocket.bind(
    InternetAddress.loopbackIPv4,
    0,
    context,
  );

  print('Server running with TLS 1.3 minimum');

  await server.close();
}

We configure a SecurityContext with a certificate chain and private key, set TLS 1.3 as the minimum version, and bind a SecureServerSocket. TLS version selection belongs to SecurityContext, not to the ALPN supportedProtocols list, which takes protocol name strings.

$ dart main.dart
Server running with TLS 1.3 minimum

Version Validation

This example demonstrates a security policy based on supported versions.

main.dart
import 'dart:io';

bool isSupported(TlsProtocolVersion version) {
  return version == TlsProtocolVersion.tls1_2 ||
      version == TlsProtocolVersion.tls1_3;
}

void main() {
  var minimum = TlsProtocolVersion.tls1_3;
  var context = SecurityContext()
    ..minimumTlsProtocolVersion = minimum;

  print('TLS 1.2 supported: ${isSupported(TlsProtocolVersion.tls1_2)}');
  print('TLS 1.3 supported: ${isSupported(TlsProtocolVersion.tls1_3)}');
  print('Minimum policy is TLS 1.3: '
      '${context.minimumTlsProtocolVersion == minimum}');
}

We implement a security policy by accepting only the TLS versions that dart:io supports and by enforcing a minimum on the context. Because TlsProtocolVersion has no ordering operators, compare it with equality.

$ dart main.dart
TLS 1.2 supported: true
TLS 1.3 supported: true
Minimum policy is TLS 1.3: true

Best Practices

Source

Dart TlsProtocolVersion Documentation

This tutorial covered Dart's TlsProtocolVersion class with practical examples showing version handling, comparison, and secure socket configuration.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Dart tutorials.