sgcWebSockets'te Yerel Apple TLS: iOS ve macOS'ta TLS 1.3, OpenSSL Yok

· Bileşenler

Delphi veya C++Builder ile oluşturulan bir iOS ya da macOS uygulamasında TLS göndermek, eskiden OpenSSL paketlemek anlamına gelirdi: uygulamayla birlikte paketlenen, sizin tarafınızdan sürümü eşleştirilip yamalanmış bir libssl.dylib ve bir libcrypto.dylib. sgcWebSockets bu gereksinimi ortadan kaldırır. Yeni bir yerel TLS arka ucu olan iohAppleTLS, Apple'ın kendi TLS'ini kullanır; böylece uygulamanız dağıtılacak hiçbir OpenSSL .dylib olmadan güvenli bir şekilde bağlanır. Enterprise sürümünde mevcuttur.

Dahası, modern sistemlerde size TLS 1.3 sunar. Arka uç, cihaz için en iyi sistem API'sini, tek bir ayarın arkasında otomatik olarak seçer; böylece OS sürümüne göre dallanma yapmazsınız ve kodunuz her yerde aynı kalır.

Geçiş için tek satır

TLS arka ucu TLSOptions.IOHandler aracılığıyla seçilir. Apple'ın yerel TLS'ini kullanmak için bunu iohAppleTLS olarak ayarlayın. Ağ kodunuzun geri kalanı değişmez.

uses
  sgcWebSocket, sgcWebSocket_Types;

WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;

Diğer platformlarda size uyan arka ucu korursunuz: iohOpenSSL her yerde çalışır, iohSChannel Windows'ta yereldir ve iohAndroidTLS, Android'de hiçbir şey dağıtmayan yerel seçenektir. Küçük bir koşullu ifade, tek bir istemci bileşenini her hedefte doğru tutar.

WSClient.TLS := True;
{$IF Defined(IOS) or Defined(MACOS)}
WSClient.TLSOptions.IOHandler := iohAppleTLS;     // native, no OpenSSL .dylib
{$ELSEIF Defined(ANDROID)}
WSClient.TLSOptions.IOHandler := iohAndroidTLS;   // native, no OpenSSL .so
{$ELSEIF Defined(MSWINDOWS)}
WSClient.TLSOptions.IOHandler := iohSChannel;     // native on Windows
{$ELSE}
WSClient.TLSOptions.IOHandler := iohOpenSSL;      // OpenSSL elsewhere
{$ENDIF}
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;

Dağıtılacak OpenSSL .dylib yok

Yerel arka uçla, paketlenecek, sürümü eşleştirilecek ya da yamalanacak hiçbir OpenSSL yoktur. TLS yığını işletim sistemiyle birlikte gelir; böylece uygulama daha hafif ve üçüncü taraf bir kripto bağımlılığından arınmış olur. App Store gönderimleri için bu, aynı zamanda gerekçelendirilecek bir yerel kütüphanenin daha az olması anlamına gelir ve TLS politikanız aylar önce dondurduğunuz bir kütüphane derlemesi yerine Apple'ınkini izler. Güvenlik düzeltmeleri OS güncellemeleri aracılığıyla gelir.

Otomatik geri dönüşlü TLS 1.3

Tek iohAppleTLS ayarı, cihaz başına doğru sistem API'sini seçer. macOS 10.14+ ve iOS 12+ üzerinde, TLS 1.3 getiren Network.framework'ü kullanır. Daha eski sistemlerde, en fazla TLS 1.2'ye çıkan Secure Transport'a geri döner. Hiçbir sürüm denetimi yazmazsınız; arka uç yolu seçer ve kodunuz her ikisinde de aynıdır.

Eksiksiz bir TLS istemcisi

Bu, kırpılmış değil, tam bir istemcidir. Sistem güven deposunu kullanır, SNI ve ana bilgisayar adı doğrulaması gerçekleştirir ve sertifikayı kendiniz inceleyip kabul veya reddedebilmeniz için bir OnAppleTLSVerifyPeer geri çağrısı sunar. RootCertFile aracılığıyla özel bir CA kökü ile özel bir yetkiliye güvenebilir, CertFile ve Password ile karşılıklı TLS için bir istemci sertifikası sunabilir ve ALPN aracılığıyla http/1.1 gibi uygulama protokollerini duyurabilirsiniz.

WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.TLSOptions.RootCertFile := '';   // optional custom CA (PEM/DER)
WSClient.TLSOptions.CertFile := '';       // optional client cert (PKCS#12) for mTLS
WSClient.TLSOptions.Password := '';       // client cert password
WSClient.OnAppleTLSVerifyPeer := DoVerifyPeer;  // optional custom validation
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;

Verify-peer geri çağrısı size sertifika konusunu ve SHA-256 parmak izini, güven değerlendirmesi sonucunu ve bağlantıya izin vermek ya da onu engellemek için ayarladığınız bir Accept bayrağını verir. Bir sertifikayı sabitlemek (pin) veya sistem güven kararının üzerine kendi politikanızı uygulamak için doğal bir yerdir.

Zaten kullandığınız bileşenlerle çalışır

Arka uç, paylaşılan TLSOptions'ın arkasında yer alır; bu nedenle WebSocket istemcisiyle sınırlı değildir. TCP ve HTTP/2 istemcileri ve TLSOptions sunan diğer bileşenler onu aynı şekilde seçer. Kodunuz TLSOptions'ı zaten yapılandırıyorsa, yerel Apple TLS'i etkinleştirmek, nasıl bağlandığınızda veya veri alışverişi yaptığınızda hiçbir değişiklik olmadan tek bir atamadır.

Android'de aynı fikir

Android'i de hedefliyorsanız, eşlik eden iohAndroidTLS arka ucu orada aynı işi yapar: Android'in kendi TLS'ini platformun SSLEngine'i aracılığıyla, dağıtılacak hiçbir OpenSSL .so olmadan kullanır. Desen aynıdır; platform başına yerel işleyiciyi seçersiniz. Ayrıntılar Yerel Android TLS sayfasındadır.

Erişilebilirlik

Yerel Apple TLS (iohAppleTLS), sgcWebSockets'in Enterprise sürümünde gelir. Dört TLS arka ucunun tam dökümü için (her platformda OpenSSL, Windows'ta SChannel ve yerel Android ve Apple işleyicileri) SSL / TLS bölümüne ve Yerel Apple TLS sayfasına bakın.

sgcWebSockets indirme sayfasından indirin ya da GetIt veya kayıtlı hesabınız aracılığıyla edinin.

Bir iOS veya macOS uygulamasını OpenSSL'den taşıma konusunda sorularınız, geri bildiriminiz veya yardıma mı ihtiyacınız var? İletişime geçin; kodu yazan kişilerden yanıt alacaksınız.