Konfigurasikan OpenSSL untuk Linux

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan perencanaan Anda yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Dengan Speech SDK, OpenSSL dikonfigurasikan secara dinamis ke versi sistem host.

Catatan

Artikel ini hanya tersedia saat SDK Ujaran didukung di Linux.

Untuk memastikan konektivitas, verifikasi bahwa sertifikat OpenSSL telah dipasang dalam sistem Anda. Jalankan perintah:

openssl version -d

Output pada sistem berbasis Ubuntu/Debian seharusnya:

OPENSSLDIR: "/usr/lib/ssl"

Periksa apakah ada subdirektori certs di bawah OPENSSLDIR. Dalam contoh di atas, itu akan menjadi /usr/lib/ssl/certs.

  • Jika /usr/lib/ssl/certs ada dan berisi banyak file sertifikat individual (dengan ekstensi .crt atau .pem), tindakan lebih lanjut tidak diperlukan.

  • Jika OPENSSLDIR adalah sesuatu selain /usr/lib/ssl atau ada satu file bundel sertifikat alih-alih beberapa file individual, Anda perlu mengatur variabel lingkungan SSL yang sesuai untuk menunjukkan di mana sertifikat dapat ditemukan.

Contoh

Berikut ini adalah sejumlah contoh variabel lingkungan untuk dikonfigurasi menurut direktori OpenSSL.

  • OPENSSLDIR adalah /opt/ssl. Terdapat subdirektori certs dengan banyak file .crt atau .pem. Menetapkan variabel lingkungan SSL_CERT_DIR agar mengarah ke /opt/ssl/certs sebelum menggunakan SDK Ujaran. Contohnya:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR adalah /etc/pki/tls (seperti pada sistem berbasis RHEL / CentOS). Terdapat subdirektori certs dengan file bundel sertifikat, misalnya ca-bundle.crt. Menetapkan variabel lingkungan SSL_CERT_FILE agar mengarah ke file tersebut sebelum menggunakan SDK Ujaran. Contohnya:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Pemeriksaan pencabutan sertifikat

Saat Speech SDK tersambung ke layanan Ucapan, SDK memeriksa sertifikat Keamanan Lapisan Transportasi (TLS/SSL). SDK Ujaran akan memverifikasi bahwa sertifikat yang dilaporkan oleh titik akhir jarak jauh dipercaya dan tidak dibatalkan. Verifikasi ini memberikan lapisan perlindungan tambahan terhadap serangan yang melibatkan spoofing serta vektor terkait lainnya. Pemeriksaan dilakukan dengan mengambil daftar pencabutan sertifikat (CRL) dari otoritas sertifikat (CA) yang digunakan oleh Azure. Daftar lokasi unduhan Azure CA untuk CRL TLS terbaru dapat ditemukan di dokumen ini.

Jika tujuan yang menyamar sebagai layanan Ucapan melaporkan sertifikat yang telah dicabut dalam CRL yang diambil, SDK mengakhiri koneksi dan melaporkan kesalahan melalui Canceled peristiwa. Keaslian sertifikat yang dilaporkan tidak bisa diperiksa tanpa CRL yang diperbarui. Oleh karena itu, Speech SDK juga memperlakukan kegagalan untuk mengunduh CRL dari lokasi Azure CA sebagai kesalahan.

Peringatan

Jika solusi Anda menggunakan proksi atau firewall, itu harus dikonfigurasi untuk mengizinkan akses ke semua URL daftar pencabutan sertifikat yang digunakan oleh Azure. Perhatikan bahwa banyak URL ini berada di luar microsoft.com domain, sehingga memungkinkan akses *.microsoft.com tidak cukup. Lihat dokumen ini untuk detailnya. Dalam kasus luar biasa, Anda dapat mengabaikan kegagalan CRL (lihat bagian koresponden), tetapi konfigurasi tersebut sangat tidak disarankan, terutama untuk skenario produksi.

File CRL besar (>10MB)

Salah satu penyebab kegagalan terkait CRL adalah penggunaan file CRL yang besar. Kelas kesalahan ini pada umumnya hanya berlaku pada lingkungan khusus dengan rantai CA yang luas. Titik akhir publik standar seharusnya tidak mengalami masalah dengan kelas ini.

Ukuran CRL maksimum default yang digunakan oleh Speech SDK (10MB) dapat disesuaikan per objek konfigurasi. Kunci properti untuk penyesuaian ini adalah CONFIG_MAX_CRL_SIZE_KB dan nilainya, ditentukan sebagai string, secara default "10000" (10MB). Misalnya, saat membuat SpeechRecognizer objek (yang mengelola koneksi ke layanan Ucapan), Anda dapat mengatur properti ini di dalamnya SpeechConfig. Pada cuplikan di bawah ini, konfigurasi disesuaikan untuk memungkinkan ukuran file CRL hingga 15MB.

config.SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config->SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config.setProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
speech_config.set_property_by_name("CONFIG_MAX_CRL_SIZE_KB"", "15000")
speechConfig.properties.SetPropertyByString("CONFIG_MAX_CRL_SIZE_KB", "15000")

Melewatkan atau mengabaikan kegagalan CRL

Jika lingkungan tidak dapat dikonfigurasi untuk mengakses lokasi Azure CA, Speech SDK tidak dapat mengambil CRL yang diperbarui. Anda dapat mengonfigurasi SDK untuk melanjutkan dan mencatat kegagalan pengunduhan atau untuk melewati semua pemeriksaan CRL.

Peringatan

Pemeriksaan CRL adalah tindakan keamanan dan melewatinya akan meningkatkan kerentanan terhadap serangan. Pemeriksaan tersebut tidak boleh dilewati tanpa pertimbangan menyeluruh tentang implikasi keamanan dan mekanisme alternatif untuk melindungi terhadap vektor serangan yang dimitigasi oleh pemeriksaan CRL.

Untuk melanjutkan koneksi saat CRL tidak dapat diambil, atur properti "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" ke "true". Upaya masih dilakukan untuk mengambil CRL dan kegagalan masih dipancarkan dalam log, tetapi upaya koneksi diizinkan untuk melanjutkan.

config.SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config->SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config.setProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
speech_config.set_property_by_name("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

speechConfig.properties.SetPropertyByString("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

Untuk menonaktifkan pemeriksaan pencabutan sertifikat, atur properti "OPENSSL_DISABLE_CRL_CHECK" ke "true". Kemudian, saat menyambungkan ke layanan Ucapan, tidak akan ada upaya untuk memeriksa atau mengunduh CRL dan tidak ada verifikasi otomatis sertifikat TLS/SSL yang dilaporkan.

config.SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config->SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config.setProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
speech_config.set_property_by_name("OPENSSL_DISABLE_CRL_CHECK", "true")
speechConfig.properties.SetPropertyByString("OPENSSL_DISABLE_CRL_CHECK", "true")

Penembolokan dan performa CRL

Secara default, Speech SDK akan men-cache CRL yang berhasil diunduh pada disk untuk meningkatkan latensi awal sambungan di masa mendatang. Ketika tidak ada CRL cache yang ada atau ketika CRL yang di-cache kedaluwarsa, daftar baru diunduh.

Beberapa distribusi Linux tidak memiliki TMP variabel lingkungan atau TMPDIR yang ditentukan, sehingga Speech SDK tidak men-cache CRL yang diunduh. Tanpa TMP variabel lingkungan yang TMPDIR ditentukan, Speech SDK mengunduh CRL baru untuk setiap koneksi. Untuk meningkatkan performa sambungan awal, Anda dapat membuat variabel lingkungan TMPDIR dan mengaturnya ke jalur direktori sementara yang dapat diakses..

Langkah berikutnya