Windows - SSL/TLS teljesítménybeli szempontok

SSL/TLS 5. rész

Az SSL/TLS kódoló-dekódoló műveletek jelentős terhelést jelentenek a processzornak. Ha oldalunkon a szolgáltatás bekapcsolását tervezzük és kellően nagy forgalommal rendelkező weboldalról van szó, akkor érdemes megfontolni, hogy hogyan ellensúlyozhatjuk a titkosítás teljesítményre kifejtett hatását. Cikkünkben ismertetjük a különféle módszereket.
Ha az SSL titkosítást használjuk adattovábbításra az Interneten, akkor teljesítményben ennek meg kell fizetnünk az árát. Az SSL jelentősen le tud lassítani egy alkalmazást, vagy egy weboldalt. A legkézenfekvőbb teljesítménybeli csökkenés az, amikor SSL/TLS-t használva, idő szükséges egy viszony felépítéséhez, adatkódoláshoz, dekódoláshoz, és valamennyi művelet jelentősen terheli a processzort.
Léteznek módszerek, amelyekkel ezeket a hatásokat csökkenteni lehet. Cikkünkben foglalkozunk azokkal a teljesítménybeli kérdésekkel, amelyek a kriptográfiával kapcsolatosak, és azokkal a hardver megoldásokkal, amelyek növelik a teljesítményt a nyílt kulcsú SSL/TLS műveleteknél. Egyben áttekintjük az SSL/TLS-t használó weboldalak, valamint a Windows 2003 szerverben található Schannel teljesítménybeli opcióit.
Aszimmetrikus kódolás
Az SSL/TLS kulcscsere teljesítménybeli árat követel. Hamarosan minden kereskedelmi Web-kiszolgáló és -kliens tartalmazni fog RSA-t, mint aszimmetrikus kulcscsere-megvalósítást és -támogatást. Habár más kulcscsere-algoritmusokat is támogat az SSL/TLS, az RSA a legszélesebb körben alkalmazott algoritmus.
Hardveres műveleti előnyök
A nagy számítási költséggel járó RSA nyílt kulcsú kódoló algoritmus vonzóvá teszi a hardveres kódfeldolgozást. A hardveres feldolgozás kétféle előnnyel jár az RSA szoftveres megoldásához képest:
  • Optimalizált feldolgozás. Az általános célú processzorok a számítógépekben általában nagyon jól működnek. Ezzel szemben a speciális, RSA műveletekre optimalizált processzorok a szükséges matematikai műveleteket sokkal eredményesebben képesek elvégezni.
  • Csökkenti a rendszerműveleteket. Ha átruházzuk a nagy igénybevételt jelentő RSA műveletek feldolgozását specializált processzorra, akkor az általános célú processzor foglalkozhat általános műveletekkel, mint pl. weblap kiszolgálása más klienseknek, miközben a dekódolás zajlik.
Az általános processzort kiváltó eszközök
Háromfajta eszköz létezik, amely átveheti az RSA műveletek végrehajtását: RSA művelet átvevők, Hardver biztonsági modulok (HSM-ek), és Internet hardvereszközök. Az első két típus általában kártya kiszerelésű (mint pl. PCI kártyák) és alaplapba illeszthetők. A Windows 2003 szerver operációs rendszerrel a Crypto API (CAPI) segítségével kommunikálnak. Az Internet hardvereszközök hálózati eszközök.
  • Csak RSA műveletvégző eszközök. Ennek az eszköztípusnak az a feladata, hogy átvegye az RSA műveleteket a kiszolgáló CPU-tól. Ezek az eszköztípusok olyan kártyák, amelyek könnyen telepíthetők és szinte semmi, vagy nagyon minimális beállítást igényelnek. Csak az RSA műveletek végrehajtását veszik át, és nem rendelkeznek egyéb szolgáltatásokkal, mint pl. fejlett kulcsbiztonság.
  • Hardver biztonsági modulok (HSM). Ezeket az eszközöket elsősorban azokon a helyeken alkalmazzák, ahol a nyílt kulcsú biztonság az elsődleges. Alapértelmezésben a nyílt kulcsok szoftverben tárolódnak. A HSM-ek nem csak az RSA műveletek átvételére képesek, hanem a privát kulcs sohasem marad a HSM-ben. Ezek az eszközök általában törésmentesek és sokféle biztonsági, kódolási szintet ismernek.
  • Internet hardvereszközök. Ezek a határozatlanul definiált osztályú eszközök általában sokféle probléma megoldására készülnek az elektronikus kereskedelmi és Internetes megvalósításokkal kapcsolatban. Ezek az eszközök teljesen átveszik az SSL műveleteket a Web szervertől, leállítva az SSL kapcsolatokat az eszközön és ezután proxy-ként kiszolgálva a kérést, mint egyszerű HTTP. A legtöbb eszköz egyéb funkciókkal is rendelkezik, mint pl. tartalom gyorsítótárazás és terheléselosztás.
Szimmetrikus kódolás
A szimmetrikus kódolás még hatékonyabb, így a művelet átruházása egy speciális hardvereszközre szükségtelenné válik. A legtöbb szimmetrikus algoritmusnál kevesebb órajel-ciklus szükséges a kódolási, dekódolási adatfeldolgozáshoz a fő processzoron, mint átmozgatni az adatot a memóriából az I/O buszon keresztül egy speciális hardverbe, majd vissza a buszon át a memóriába. Ha ehhez még hozzáadjuk a szükséges körutat a hálózati adapterhez, akkor világos lesz, hogy miért hívjuk ezt háromlépéses problémának. Mivel mindezek a lépések önmagukban erőforrást igényelnek, és mivel a legtöbb szimmetrikus algoritmus számítógépes feldolgozásra optimalizált, messzemenően hatásosabb egyszerűsíteni a feldolgozást a processzoron.
Méretezési megfontolások, amikor SSL-t használunk
Egy weboldal méretezése azt jelenti, hogy újabb szervereket adunk hozzá és a kéréseket ezekhez az újabb gépekhez küldjük, így növelve a teljesítményét az oldalnak. Ez gyakran megvalósítható a szoftver vagy hardver terheléselosztással, és DNS ciklus időkiosztással. A hagyományos méretezési megoldás megvalósítható az SSL/TLS segítségével, de alkut kell kötnünk egy szükséges speciális SSL/TLS kényszerrel.
Amint egy SSL/TLS viszony létrejön a meghatározott kliens és szerver között, csak az adott szerver képes kódolni és dekódolni az adatot, és válaszolni a kliensnek. Következésképpen egy SSL/TLS viszony alatt egy kliens nem tud SSL választ küldeni más szervernek, mint amelyikkel a megállapodást már megvalósította. Ez hibát eredményezne és egy új SSL/TLS viszony felállítását eredményezne a kliens és az új kiszolgáló között. Ezért, amikor egy SSL/TLS oldalt nagyobbra méretezünk, használnunk kell valamilyen megoldást, ami lehetővé teszi egy kliensnek, hogy fenntartsa a viszonyt ugyanazzal az SSL/TLS szerverrel. Ez a szükséglet akkor elégül ki, amikor a hálózati terheléselosztást használjuk a Windows 2003 szerverben, egyedi, vagy C osztályú rokonságot megadva. Az egyedi opció megadja, hogy a hálózati terheléselosztás több kérést irányít ugyanarról a kliens IP címről ugyanarra a fürt kiszolgálóra. A C osztályú rokonság meghatározza, hogy a terhelés elosztás több kérést irányít ugyanabból a C osztályú IP címtartományból ugyanarra a fürt kiszolgálóra.
Például vegyünk egy SSL/TLS oldalt, amely egy többprocesszoros szerveren fut és csak 100 tranzakciót képes másodpercenként feldolgozni (Tx/Sec), de nekünk szükséges lenne 300 tranzakció másodpercenként. Ahhoz, hogy elérjük ezt a követelményt, létre kell hoznunk egy hálózati terheléselosztó fürtöt, két újabb szervert használva ugyanazzal a beállítással, és egyedi, vagy C osztályú rokonságra beállítva a fürtöt. Elméletileg növelhetjük az oldal teljesítményét 300 tranzakció/másodpercre. Valójában számolnunk kell némely konfigurációs különbséggel és a terheléselosztás műveleti igényével. Lehetséges növelni az oldal teljesítményét egészen addig, hogy túlhaladjuk az SSL/TLS műveletek által felemésztett teljesítménycsökkenést.
Másik technika, a teljesítmény növelésére egy SSL/TLS oldalnál a szerver felfelé skálázása. Használhatunk több processzort, vagy hozzáadott SSL/TLS gyorsítót a környezetünkben. A felfelé skálázás nagyobb műveleti sebességet jelent a megnövelt hardver-erőforrásoknak köszönhetően.
Teljesítménynövelő paraméterek az SSL/TLS-nél
A Windows 2003 szerver rendszergazdái számos Schannel paraméter állításával tudnak javítani a teljesítményen, hogy vezéreljék a viszony újrakapcsolódásait. Ezek a paraméterek használhatók a teljesítmény növelésére vagy memória-megtakarításra némely alkalmazási környezetben.
Az Schannel gyorsítótár
Az SSL/TLS támogat egy újrakapcsolódási műveletet, amely lehetővé teszi a kliensnek és a szervernek, hogy folytasson egy korábbi megállapodásban rögzített viszonyt. Ez sok esetben kívánatos, mivel az újrakapcsolódás nem igényli a teljes RSA megállapodáshoz szükséges időt. Vannak esetek, amikor az újrakapcsolódás problémás lehet, mint pl. teljesítményteszt esetén, vagy amikor egy oldal kapcsolatmintája olyan, hogy ugyanaz a kliens soha nem kapcsolódik újra ugyanahhoz a szerverhez.
Az újrakapcsolódást az Schannel cache teszi lehetővé, amely egy listát őriz a korábbi SSL/TLS viszonyokról, amelyeket az aktuális kezelő megbízásából hozott létre. A viszonyokra az SSL/TLS viszony ID-val hivatkozik. Az Schannel jelenleg 10.000 eltárolt viszonyt tud kezelni, maximálisan 10 órán át fenntartva.
Az Schannel gyorsítótár értékek az alábbi registry kulcs alatt találhatók meg:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]
Az alábbi REG_DWORD bejegyzéseket hozhatjuk létre a megadott kulcs alatt:
  • MaximumCacheSize: A maximális SSL/TLS viszonyok száma, amelyet a gyorsítótár kezel. Az alapértelmezett érték 10.000
  • ClientCacheTime: Az egyedi kliens oldali tár lejárati ideje ezredmásodpercben. Az alapértelmezett érték 10 óra.
  • ServerCacheTime: A szerver oldali gyorsítótár lejárati ideje ezredmásodpercben. Az alapértelmezett érték 10 óra.
Akár a MaximumCacheSize vagy a ServerCacheTime érték nullára állítása kikapcsolja a szerver oldali viszony-tárolót és meggátolja az újrakapcsolódást. A két érték alapértelmezés feletti növelésével az LSASS.EXE több memóriát fog felhasználni. Minden viszony cache elem tipikusan 2-4KB memóriát foglal le.

SSL/TLS cikksorozat