OpenSSL, bilgisayar ağları üzerinden iletişimi gizli dinlemeye karşı güvence altına alan veya diğer uçtaki tarafı tanımlaması gereken uygulamalar için bir yazılım kütüphanesidir. HTTPS web sitelerinin çoğu dahil olmak üzere İnternet sunucuları tarafından yaygın olarak kullanılır.
Bu kütüphane, güvenli bir bağlantı gerektiğinde Indy Library tabanlı bileşenler tarafından gereklidir. Uygulamanız OpenSSL gerektiriyorsa, uygulamanızı dağıtmadan önce dosya sisteminizde gerekli dosyaların bulunması gerekir:
şu anda sgcWebSockets şunları destekler: 1.0.2, 1.1 ve 3.0 ile 3.3 OpenSSL sürümleri.
| Platform | API 1.0 | API 1.1 | API 3.* | Static/Dynamic Linking |
|---|---|---|---|---|
| Windows (32 bit ve 64 bit) | libeay32.dll ve ssleay32.dll | libcrypto-1_1.dll ve libssl-1_1.dll | libcrypto-3.dll ve libssl-3.dll | Dynamic |
| OSX | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamic |
| iOS Cihazı (32-bit ve 64-bit) | libcrypto.a ve libssl.a | libcrypto.a ve libssl.a | libcrypto.a ve libssl.a | Static |
| iOS Simulator | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamic |
| Android Device | libcrypto.so, libssl.so | libcrypto.so, libssl.so | libcrypto.so, libssl.so | Dynamic |
Her platform için OpenSSL'i nasıl yapılandıracağınızı aşağıda bulun:
sgcWebSockets'in Indy tabanlı bileşenleri bazı OpenSSL özelliklerini yapılandırmanıza olanak tanır. Aşağıdaki özelliklere erişin:
API Sürümü
Standart Indy kütüphanesi yalnızca 1.0.2 OpenSSL kütüphanelerinin yüklenmesine izin verir; bu kütüphaneler kullanımdan kaldırılmıştır ve en son OpenSSL sürümleri 1.1.1 API'sini kullanır.
sgcWebSockets Enterprise, 1.1.1 openSSL kitaplıklarını yüklemenize olanak tanır; bu özellikte hangi openSSL API sürümünün yükleneceğini yapılandırabilirsiniz. İşlem başına yalnızca bir API sürümü yüklenebilir (bu nedenle aynı uygulamada openSSL 1.0.2 ve 1.1.1 kitaplıklarını karıştıramazsınız).
LibPath
Bu özellik, openSSL kütüphanelerinin konumunu ayarlamanıza olanak tanır. Bu, openSSL kütüphanelerinin konumunun ayarlanması gereken Android veya OSX projeleri için yararlıdır.
Aşağıdaki değerleri kabul eder:
Varsayılan olarak tanımlanmayan ek OpenSSL işlevlerini yüklemek için bir geri çağırma kullanın. Daha fazlasını OpenSSL Ek İşlevleri Yükleme sayfasında okuyabilirsiniz.
Sunucunuzda TLS 1.2 ve 1.3 desteği sağlamak ve en iyi güvenlik ile performansı kullanmak istiyorsanız, aşağıdaki yapılandırmayı kullanın:
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;
Ve aşağıdaki şifre listesini ayarlayın.
AEAD-AES128-GCM-SHA256:AEAD-AES256-GCM-SHA384:AEAD-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
Test amaçları için kendinden imzalı sertifikalar kullanabilirsiniz. Kendinden imzalı bir sertifika oluşturmak için yalnızca aşağıdaki komutu çalıştırmanız gerekir:
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
2 dosya oluşturur: cert.pem (sertifika) ve key.pem (özel anahtar). Her iki dosyayı tek bir dosyada birleştirebilirsiniz. Sadece yeni bir dosya oluşturun ve her iki dosyanın içeriğini içine kopyalayın. Böylece şöyle bir yapıya sahip olursunuz:
-----BEGIN PRIVATE KEY-----
....
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
SSL_GET_RECORD: wrong version number
Bu hata, sunucu ve istemcinin SSL/TLS protokolünün farklı sürümlerini kullandığı anlamına gelir. Düzeltmek için, sunucu ve/veya istemci bileşeninde doğru sürümü ayarlamayı deneyin.
Server.SSLOptions.Version
Client.TLSOptions.Version
SSL3_GET_RECORD: decryption failed or bad record mac
Genellikle bu hata şu durumlarda oluşur:
1. En son OpenSSL sürümünü kullandığınızı kontrol edin. Çok eskiyse, desteklenen en son sürüme güncelleyin.
2. Bu hata rastgele görünürse, bu genellikle birden fazla iş parçacığının OpenSSL bağlantısına erişmesi nedeniyledir. NotifyEvents = neNoSync ayarlamayı deneyebilirsiniz; bu, OnConnect, OnDisconnect, OnMessage... olaylarının iş parçacığı bağlantısı bağlamında tetikleneceği anlamına gelir, bu da bazı senkronizasyon sorunlarını önler ve daha iyi performans sağlar. Olumsuz yanı olarak, örneğin bir mesaj aldığınızda bir formdaki görsel bir denetimi güncelliyorsanız, görsel denetimler iş parçacığı açısından güvenli olmadığından kendi senkronizasyon yöntemlerinizi uygulamalısınız.