Tanio

Fix SQL Server SSL Provider [SSL routines::unsupported protocol]


Intro

Artikel ini membahas penyelesaian masalah koneksi database Microsoft SQL Server yang menghasilkan error:

SSL Provider: [SSL routines::unsupported protocol]

Error ini umumnya terjadi karena perbedaan versi protokol SSL/TLS antara client dan server, atau karena konfigurasi security level yang terlalu ketat pada sistem operasi yang lebih baru.

Masalah

Ketika mencoba melakukan koneksi ke database Microsoft SQL Server, Anda akan mendapatkan error yang mirip seperti ini:

Error SSL Provider Screenshot

Error ini dapat muncul pada berbagai aplikasi yang menggunakan koneksi database, seperti:

  • Aplikasi Laravel/PHP
  • Tools database management
  • Script custom yang menggunakan ODBC/FreeTDS

Akar Masalah

Error SSL routines::unsupported protocol disebabkan oleh:

  1. Security Level yang Terlalu Tinggi: Versi Ubuntu yang lebih baru memiliki default security level yang lebih ketat
  2. Kompatibilitas Protocol: Microsoft SQL Server versi lama menggunakan protokol SSL/TLS yang sudah deprecated
  3. Konfigurasi OpenSSL: Pengaturan cipher string yang tidak kompatible

Ubuntu 22.04

Environment

Alat dan bahan yang digunakan:

  • OS: Ubuntu 22.04
  • PHP: 8.3
  • Database: Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
  • Framework: Laravel 12

Langkah Langkah

  1. Buka file konfigurasi OpenSSL:

    sudo nano /etc/ssl/openssl.cnf
  2. Cari bagian CipherString:

    OpenSSL Config Before Ubuntu 22.04

  3. Ubah nilai CipherString: Ganti dari:

    CipherString = DEFAULT@SECLEVEL=2

    Menjadi:

    CipherString = DEFAULT@SECLEVEL=0
  4. Simpan dan restart service:

    sudo systemctl restart apache2
    # atau
    sudo systemctl restart nginx

Mengapa Ini Bekerja

Mengubah SECLEVEL=2 ke SECLEVEL=0 akan:

  • Menurunkan tingkat keamanan OpenSSL dari level 2 ke level 0
  • Mengizinkan penggunaan algoritma enkripsi yang lebih lama
  • Memungkinkan koneksi ke server SSL yang menggunakan protokol deprecated

⚠️ Catatan Keamanan: Solusi ini menurunkan level keamanan SSL. Pastikan jaringan Anda aman dan pertimbangkan untuk upgrade SQL Server jika memungkinkan.

Ubuntu 24.04

Environment

Alat dan bahan yang digunakan:

  • OS: Ubuntu 24.04
  • PHP: 8.3
  • Database: Microsoft SQL Server 2014 - 12.0.2000.8 (X64)

Langkah Langkah

  1. Buka file konfigurasi OpenSSL:

    sudo nano /etc/ssl/openssl.cnf
  2. Scroll ke bagian paling bawah file:

    OpenSSL Config Before Ubuntu 24.04

  3. Tambahkan konfigurasi berikut di bagian paling bawah:

    [ssl_sect]
    system_default = system_default_sect
    
    [system_default_sect]
    CipherString = DEFAULT:@SECLEVEL=0
  4. Konfigurasi akhir akan terlihat seperti ini:

    OpenSSL Config After Ubuntu 24.04

  5. Simpan file dan restart service:

    sudo systemctl restart apache2
    # atau
    sudo systemctl restart nginx

Mengapa Ini Bekerja

Pada Ubuntu 24.04, konfigurasi OpenSSL menggunakan section-based configuration yang lebih terstruktur. Dengan menambahkan section [ssl_sect] dan [system_default_sect], kita:

  • Membuat konfigurasi SSL yang spesifik untuk sistem
  • Mengatur CipherString dengan SECLEVEL=0 secara terpisah
  • Mempertahankan kompatibilitas dengan konfigurasi OpenSSL yang lebih baru

Verifikasi

Setelah menerapkan salah satu solusi di atas, Anda dapat memverifikasi koneksi dengan cara:

Testing Sederhana

<?php
try {
    $serverName = "your-server-ip";
    $connectionOptions = [
        "Database" => "your_database",
        "Uid" => "your_username",
        "PWD" => "your_password",
        "Encrypt" => true,
        "TrustServerCertificate" => true
    ];

    $conn = sqlsrv_connect($serverName, $connectionOptions);

    if ($conn) {
        echo "Connection successful!";
    } else {
        print_r(sqlsrv_errors());
    }
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Troubleshooting Tambahan

Jika Masih Bermasalah

  1. Restart sistem setelah mengubah konfigurasi OpenSSL

  2. Periksa log error:

    tail -f /var/log/apache2/error.log
    # atau
    tail -f /var/log/nginx/error.log
  3. Verifikasi konfigurasi OpenSSL:

    openssl version -a
  4. Test koneksi dengan telnet:

    telnet your-server-ip 1433

Other Possible Errors

  • Certificate verification failed: Tambahkan TrustServerCertificate=true pada connection string
  • Login timeout expired: Periksa firewall dan network connectivity
  • Protocol version not supported: Pastikan SQL Server support TLS 1.0+

Konklusi

Error SSL Provider SSL routines::unsupported protocol dapat diatasi dengan menurunkan security level OpenSSL. Meski solusi ini efektif, penting untuk mempertimbangkan implikasi keamanan dan jika memungkinkan, lakukan upgrade pada SQL Server untuk mendukung protokol SSL/TLS yang lebih modern.

Ringkasan Solusi:

  • Ubuntu 22.04: Ubah CipherString = DEFAULT@SECLEVEL=2 menjadi CipherString = DEFAULT@SECLEVEL=0
  • Ubuntu 24.04: Tambahkan section SSL configuration baru dengan CipherString = DEFAULT:@SECLEVEL=0

Kedua solusi telah ditest dan berfungsi dengan baik pada environment yang disebutkan di atas.

Catatan

Artikel ini berdasarkan pengalaman troubleshooting pada environment production. Selalu lakukan backup konfigurasi sebelum melakukan perubahan.

Referensi

  1. [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]
  2. SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol]