OpenSSL

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:

 

 

openSSL Yapılandırmaları

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:

 

 

 

Ek OpenSSL İşlevlerini Yükleme

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.

 

Ciphers

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

 

Self-Signed Certificates

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-----

 

Yaygın Hatalar

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.