Skip to main content

flutter_ssl_pinning_client 2.0.0 copy "flutter_ssl_pinning_client: ^2.0.0" to clipboard
flutter_ssl_pinning_client: ^2.0.0 copied to clipboard

HTTPS client with certificate and SPKI SHA256 pinning, runtime pin updates and audit callbacks. Validates the TLS socket before sending HTTP data.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_ssl_pinning_client/flutter_ssl_pinning_client.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SSL Pinning Client Demo',
      theme: ThemeData.dark(useMaterial3: true),
      home: const SslPinningScreen(),
    );
  }
}

class SslPinningScreen extends StatefulWidget {
  const SslPinningScreen({super.key});

  @override
  State<SslPinningScreen> createState() => _SslPinningScreenState();
}

class _SslPinningScreenState extends State<SslPinningScreen> {
  late final SslPinningHttpClient _client;
  String _status =
      'Configure your API host and verified pin before sending a request.';

  @override
  void initState() {
    super.initState();
    final config = SslPinningConfig(
      mode: EnforceMode.strict,
      onPinningFailure: (domain, presented) {
        debugPrint(
            '⚠️ SSL Pinning MITM Alert on $domain! Fingerprint: $presented');
      },
      domainConfigs: {
        'jsonplaceholder.typicode.com': const DomainPinConfig(
          domain: 'jsonplaceholder.typicode.com',
          allowedSHA256Pins: {
            'REPLACE_WITH_VERIFIED_CERTIFICATE_HEX_OR_SPKI_PIN',
          },
        ),
      },
    );

    _client = SslPinningHttpClient(config: config);
  }

  Future<void> _makeRequest() async {
    setState(() => _status = 'Executing secure request...');
    try {
      final response = await _client.get(
        Uri.parse('https://jsonplaceholder.typicode.com/todos/1'),
      );
      if (!mounted) return;
      setState(() => _status = 'Response status: ${response.statusCode}');
    } catch (e) {
      if (!mounted) return;
      setState(() => _status = 'Request failed: $e');
    }
  }

  @override
  void dispose() {
    _client.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('flutter_ssl_pinning_client Demo')),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Icon(Icons.security, size: 64, color: Colors.greenAccent),
              const SizedBox(height: 16),
              Text(_status, textAlign: TextAlign.center),
              const SizedBox(height: 24),
              ElevatedButton(
                onPressed: _makeRequest,
                child: const Text('Send SSL Pinned Request'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
160
points
295
downloads

Documentation

API reference

Publisher

verified publisherolamilekanadeyemi.com

Weekly Downloads

HTTPS client with certificate and SPKI SHA256 pinning, runtime pin updates and audit callbacks. Validates the TLS socket before sending HTTP data.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

crypto, flutter, http

More

Packages that depend on flutter_ssl_pinning_client