Zabezpečení a omezení SDK serveru
V případech, kdy jsou služby SDK serveru přístupné z internetu bez omezení, je pro zajištění vyšší bezpečnosti webového serveru a služeb samotných proti známým typům útoků, a také vyšších ratingů (A+) u renomovaných nástrojů typu Qualys SSL Labs a Mozilla Observatory, třeba provést několik konfiguračních nastavení.
V některých prostředích klienta se také řeší omezení a (nebo) výkonnost služeb poskytovaných v rámci SDK a jeho komponent či rozhraní.
Tato jsou popsána v následujícím textu.
Vracení či nevracení hodnot HTTP hlaviček
Aby SDK server vystavený do internetu prošel otestováním bezpečnosti na úroveň hodnocení A nebo A+, jsou třeba provést určitá nastavení HTTP hlaviček, a to buď nastavením konkrétní vrácené hodnoty nebo jejím odstraněním (vracením prázdné).
Nastavení hlaviček do HTTP response v IIS je detailně popsáno v návodu společnosti Microsoft.
Doporučené nastavení je skrze URL Rewrite modul (viz body 3. resp. 2. a opět 2. na výše uvedeném návodu od Microsoft), který se stáhne a do IIS instaluje samostatně. Nastavení lze také provést úpravami C:\Windows\System32\inetsrv\Config\applicationHost.config
a Web.config
dané webové aplikace, viz dále.
Jedná se o tyto HTTP hlavičky:
-
Server
-
Odstranit hodnotu, tedy vracet prázdnou.
-
-
X-Powered-By
-
Odstranit hodnotu, tedy vracet prázdnou.
-
-
X-AspNet-Version.
-
Odstranit hodnotu, tedy vracet prázdnou
-
-
-
Vracet:
default-src 'none'; frame-ancestors 'none'
-
-
HTTP Public Key Pinning (optional)
-
HTTP Strict Transport Security
-
Od IIS verze 10 je HSTS nastavení u dané website (v pravém panelu), případně je možné nastavit hlavičku Strict-Transport-Security s hodnotou
max-age=63072000
.
-
-
Referrer Policy (optional)
-
-
Vracet: nosniff
-
-
-
Vracet: DENY
-
-
-
Vracet:
1; mode=block
.
-
Nastavení názvů hlaviček přes applicationHost.config
:
-
Definuje se v rámci elementů system.webServer a rewrite; element system.webServer již může existovat!
-
Stačí vložit pod odpovídající location path, dle odpovídajícího <nazvu_website>.
-
Před úpravami se doporučuje provést záloha stávajícího .config (nesprávné úpravy mohou rozbít funkčnost celého webserveru).
<location path="<nazev_website>"> <system.webServer> <rewrite> <allowedServerVariables> <add name="RESPONSE_X-Content-Type-Options" /> <add name="RESPONSE_X-Frame-Options" /> <add name="RESPONSE_X-XSS-Protection" /> <add name="RESPONSE_SERVER" /> <add name="RESPONSE_X-ASPNET-VERSION" /> <add name="RESPONSE_X-POWERED-BY" /> <add name="RESPONSE_Content-Security-Policy" /> </allowedServerVariables> </rewrite> </system.webServer> </location>
Nastavení hodnot hlaviček přes WebService\Web.config
:
-
Definuje se v rámci elementů system.webServer a rewrite; element system.webServer již může existovat!
<system.webServer> <rewrite> <outboundRules> <rule name="REMOVE_RESPONSE_X-POWERED-BY"> <match serverVariable="RESPONSE_X-POWERED-BY" pattern=".*" /> <action type="Rewrite" /> </rule> <rule name="REMOVE_RESPONSE_SERVER"> <match serverVariable="RESPONSE_SERVER" pattern=".*" /> <action type="Rewrite" /> </rule> <rule name="REMOVE_RESPONSE_X-ASPNET-VERSION"> <match serverVariable="RESPONSE_X-ASPNET-VERSION" pattern=".*" /> <action type="Rewrite" /> </rule> <rule name="SET_RESPONSE_X-Content-Type-Options"> <match serverVariable="RESPONSE_X-Content-Type-Options" pattern=".*" /> <action type="Rewrite" value="nosniff" /> </rule> <rule name="SET_RESPONSE_X-Frame-Options"> <match serverVariable="RESPONSE_X-Frame-Option" pattern=".*" /> <action type="Rewrite" value="DENY" /> </rule> <rule name="SET_RESPONSE_X-XSS-Protection"> <match serverVariable="RESPONSE_X-XSS-Protection" pattern=".*" /> <action type="Rewrite" value="1; mode=block" /> </rule> <rule name="SET_RESPONSE_Content-Security-Policy"> <match serverVariable="RESPONSE_Content-Security-Policy" pattern=".*" /> <action type="Rewrite" value="default-src 'none'; frame-ancestors 'none'" /> </rule> </outboundRules> </rewrite> <httpRedirect enabled="false" destination="" exactDestination="true" httpResponseStatus="Temporary" /> </system.webServer>
TLS a šifrovací sady
Pro zajištění vysoké úrovně šifrované komunikace mezi klientem a serverem je v dnešní době striktně doporučováno použití nejvyšších verzí kryptografického protokolu TLS 1.2, případně 1.3, a šifrovacích sad, které pro výměnu klíčů využívají eliptické křivky (ECDHE) a vyšší úrovně autentizace a hash algoritmů.
Nastavení je možné provést pomocí nástroje IISCrypto (od Nartac/Qualys SSLLabs) způsobem:
-
Na server stáhnout a spustit IISCrypto.exe.
-
Přejít do Advanced a provést Backup registry (uložit aktuální nastavení regdb do .reg souboru).
-
Přejít do Templates, vybrat PCI 4.0, zaškrtnout Reboot a dát Apply.
-
Restartovat Windows server.
WebServices (Webové služby)
Některá nastavení ovlivňují primárně webové služby a jejich využití.
Výchozí stránka webové služby
Výchozí stránku webové služby:
je možné vypnout zápisem hodnot protocols do system.web části webServices:
<system.web>
<webServices>
<protocols>
<add name="AnyHttpSoap"/>
<remove name="Documentation"/> <!-- Zakazat dokumentacni stranky -->
</protocols>
</webServices>
</system.web>
Následně je pro nevypisování zásobníku při chybě služby vhodné do části system.web nastavit:
<customErrors mode="On"/> <!-- Nevracet vypisy zasobniku pri chybe -->
Omezení velikosti požadavku a souboru
Ze strany SDK služeb jsou jistá konfigurační (ASP.NET) omezení v max. velikosti celého požadavku, a to je ve výchozím stavu ve WebService\web.config
nastaveno na cca 130MB požadavek resp. 100MB soubor:
<system.webServer>
…
<security>
<requestFiltering>
<!-- Max. velikost pozadavku 130MB, tady cca 100MB max velikost souboru -->
<requestLimits maxAllowedContentLength="136314880" />
</requestFiltering>
</security>
</system.webServer>
<!-- maxAllowedContentLength je v jednotkách B -->
Lze definovat také jiným způsobem:
Správce IIS > nazev_WebSite > nazev_Aplikace > Filtrování požadavků (Request Filtering):
<system.web>
…
<httpRuntime maxRequestLength="102400" executionTimeout="360" targetFramework="4.7.2"/>
</system.web>
<!-- maxRequestLenght je v jednotkách kB -->
Elementy <system.webServer> a <system.web> již mohou existovat, proto je nejprve vyhledejte a případně odkomentujte a upravte, než abyste přidávali další. Duplicita elementů není možná a služby budou nefunkční. |
Další nastavení, které ovlivňuje velikost nahrávaného souboru, je součástí samotného webového serveru IIS. Pokud není dostatečné, může se např. při vzdáleném podepisování s vizuálním podpisem díky obrázku v signatureParams volajícímu vracet chybová odpověď služby: 413 (Request Entity Too Large).
Postup pro navýšení:
-
Správce IIS > nazev_WebSite > nazev_Aplikace > Konfigurace (Configuration Editor) > v prostředním okně nahoře přepnout na system.webServer/serverRuntime a tam navýšit hodnotu:
uploadReadAheadSize
(byte; výchozí 49152)
AdES (java komponenta)
Některá nastavení skrze webovou službu ovlivňují funkčnost v jí využívané interní java komponentě AdES.
AdES jako HTTP server
Java komponenta (od verze 3.0) běží jako HTTP server, který se automaticky spouští při volání komponenty. Pokud je více služeb na serveru, pak si každá služba používá vlastní instanci AdES serveru.
Pro zjištění, zda AdES server běží v pořádku jako HTTP server, je možné použít /info, tedy například: http://127.0.0.1:49153/status.
Dále je možné použít adresu /server-info, která vrací informace o serveru. Například: http://127.0.0.1:49153/server-info.
Konfigurace komunikace .NET SDK a Java AdES
Pro úpravy konfigurace komunikace .NET SDK a Java AdES jsou k dispozici tyto klíče:
-
Nastavení intervalu, jak dlouho se má čekat mezi jednotlivými kontrolami, zda AdES server předal číslo portu, lze určit pomocí klíče:
<add key="AdESHttpAssignedPortNumberCheckSleepTimeMs" value="500" />
Hodnota se zadává v milisekundách, výchozí hodnota je 500 ms.
-
Nastavení timeoutu pro kontrolu předání čísla portu AdES serverem lze určit pomocí klíče:
<add key="AdESHttpAssignedPortNumberCheckTimeout" value="40" />
Po uplynutí času dojde k výjimce. Uvádí se v sekundách, výchozí hodnota je 40 s.
-
Časový interval určující, jak dlouho se čeká mezi jednotlivými kontrolami, zda AdES server již běží, lze určit pomocí klíče:
<add key="AdESHttpRunningServerCheckSleepTimeMs" value="500" />
Hodnota se zadává v milisekundách, výchozí hodnota je 500 ms.
-
Nastavení timeoutu pro kontrolu spuštění AdES HTTP Serveru lze určit pomocí klíče:
<add key="AdESHttpRunningServerCheckTimeout" value="40" />
Po odeslání příkazu na spuštění serveru se kontroluje, jestli tento běží. Po uplynutí času dojde k výjimce. Uvádí se v sekundách, výchozí hodnota je 40 s.
Fragmentace technického logování
Technické logování do souboru je možné fragmentovat – rozdělit po dnech. K tomu slouží konfigurační klíč AdesLogFragments (výchozí hodnota je 0). Pokud je nastavena hodnota vyšší, než 0, rozděluje se LOG po dnech dle zvolené hodnoty a s tím, že se ponechávají vždy nejnovější log soubory – příklad: Když je nastavena hodnota AdesLogFragments na 14 (dnů), potom log z patnáctého dne vymaže (nahradí) log z prvního dne.
Výchozí maska AdesLogFragments souboru je yyyy-MM-dd (příklad AdES_2020-07-10.log). Masku lze nastavit pomocí klíče AdesLogFragmentsMask.
Stejným způsobem je možné použít fragmentaci i pro transakční logy AdESu pomocí klíčů AdesTxLogFragments a konfigurovat masku pomocí AdesTxLogFragmentsMask.
Zpracování větších souborů
V rámci SDK služeb lze za určitých podmínek – dostatečných hardwarových prostředků a konfiguračních nastavení – zpracovávat i soubory typu XML ve větších velikostech. K tomu slouží jednak výše uvedená nastavení pro přijetí požadavku a souboru v určité velikosti ve webové službě, tak také další potřebná nastavení pro interní java komponentu AdES.
Java komponenta si pro svou práci alokuje v RAM určité množství paměti. Při výchozím nastavení je to 1GB paměti. Pokud je z výše uvedených důvodů potřeba alokaci navýšit, lze to provést v konfiguraci webové služby (Web.config
) pomocí klíče:
<add key="JVMOptions" value="-Xmx3072m" /> <!-- velikost alokace pameti (v MB) pro proces java.exe; vychozi 1024m (tj. 1 GB) -->
Při takovém nastavení se naopak doporučuje snížit počet pracovních procesů, aby nedošlo k zahlcení serveru:
<add key="AdES_WP_MaxProcesses" value="2"/> <!-- max. pocet spustenych procesu java.exe; vychozi 5 -->
Obojí je však závislé na tom, kolik hardwarových prostředků je dostupných a také případně na složitosti zpracovávaného souboru. Výše uvedené nastavení může pomoci zpracovat XML soubor ve velikosti do 100 MB při cca 12 GB RAM, ze kterých je cca 4 GB RAM alokováno jako volných (např. pro systém nebo další aplikace). Ovšem snížením WP (pracovních procesů) může dojít ke snížení výkonu SDK. Pro možnost zpracování větších souborů je ovšem nutné nakonfigurovat i klíče, které jsou uvedené v kapitole Omezení velikosti požadavku a souboru.