Táto kapitola obahuje postup inštalácie SmartWeb aplikácie relevantný pre D2000 do verzie 12.0.61 vrátane, kedy sa pre Smart Web nasadzoval s aplikačným serverom Wildfly AS. |
SmartWeb platforma je implementovaná v Java EE a preto potrebuje na svoj beh aj nainštalovane a nakonfigurované Java Runtime Environment verzie 8.
Postup inštalácie je nasledovný:
Postup pri inštalácii aplikačného servera Wildfly je je nasledovný:
D2000_EXE/web sa nachádzajú zazipované inštalačné súbory aplikačného servera Wildfly (wildfly.zip) ako aj Java EE aplikácie SmartWeb (smartweb.zip) a tutorial javascriptovej aplikácie (tutorial-application.zip). Všetky tieto archívy je potrebné rozpakovať do toho istého adresára.D2000_EXE/web/installWildfly.bat sa automaticky nainštaluje aplikačný server ako Windows Service s menom: D2000 SmartWeb.D2000_EXE/web/installSmartWeb.bat sa automaticky deployne (nakopíruje) SmartWeb aplikácia aj s preddefinovanou konfiguráciou javacriptovej tutorial aplikácie na aplikačný server.D2000_EXE/web/install_files/D2000.SmartWeb platforma je implementovaná v Java EE a preto potrebuje na svoj beh aj nainštalovane a nakonfigurované Java Runtime Environment verzie 8. Na linuxe sa inštaluje príkazmi cez package manager pod root používateľom. Pre Ubuntu distribúciu sú príkazy nasledovné :
add-apt-repository ppa:webupd8team/java # nalinkovanie repozitára s java balíčkami apt-get update apt-get install oracle-java8-set-default |
Pre použitie silných šifier v HTTPS protokole je potrebné nainštalovať aj Java Cryptography Extension (JCE) rozšírenie nasledovným príkazom:
apt install oracle-java8-unlimited-jce-policy |
Postup pri inštalácii aplikačného servera Wildfly je je nasledovný:
Rozbaliť inštalačné súbory v inštalačnom adresári /opt/D2000/web (alebo v inom, závisí od miesta inštalácie D2000, resp. nakopírovania adresára web). V tomto adresári sa nachádzajú zazipované inštalačné súbory aplikačného servera Wildfly (wildfly.zip) ako aj Java EE aplikácie SmartWeb (smartweb.zip) a tutorial javascriptovej aplikácie (tutorial-application.zip). Všetky tieto archívy je potrebné rozpakovať do toho istého adresára, napríklad príkazom:
cd /opt/D2000/web unzip *.zip -d . |
Vytvoriť používateľa wildfly. Kvôli bezpečnosti je vhodné aby Wildfly na Linuxe bežal pod samostatným používateľom ktorého je potrebné najskôr vytvoriť. V nasledujúcom skripte vytvoríme groupu a používateľa wildfly, a priradíme ho ako ownera adresára /opt/D2000/web.
groupadd -r wildfly useradd -r -g wildfly -d /opt/D2000/web -s /sbin/nologin wildfly. chown -R wildfly:wildfly /opt/D2000/web |
Nainštalovať aplikačný server Wildfly spustením inštalačného skriptu /opt/D2000/web/installWildfly.sh s parametrami jednoslovný identifikator servicu (napr DEMO) a port offset (posunutie portov pre prípad že na serveri beží viacero aplikačných serverov). Spustenie skriptu je možné vykonať nasledovne:
cd /opt/D2000/web chmod +x *.sh ./installWildfly.sh DEMO 0 |
/opt/D2000/web/installSmartWeb.sh sa automaticky deployne (nakopíruje) SmartWeb aplikácia aj s preddefinovanou konfiguráciou javacriptovej tutorial aplikácie na aplikačný server. /opt/D2000/web/install_files/D2000.Spustiť SELF.DCS (D2Connector) a aplikačný server Wildfly cez príkaz:
systemctl start wildfly-DEMO |
Všeobecný rozdiel medzi konfiguráciou Wildfly na Linuxe a Windows je ten že na Linuxe nemôže process aplikačného servera obsadiť priamo porty 80/443 (HTTP/HTTPS) kvoli security. Rieši sa to presmerovaním default portov 8080/8443 cez IPTABLES nasledovne:
Iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j REDIRECT --to-port 8080 Iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 443 -j REDIRECT --to-port 8443 |
SmartWeb aplikácia sa inštaluje a upgraduje ako štandardná Java EE aplikácia na aplikačný server Wildfly. Postup je nasledovný:
D2000_EXE/web/smartweb.zip. SmartWeb sa distribuuje v rámci patchov až od verzie D2000 11.2.57.install_files/smartWeb.war do adresára aplikačného servera Wildfly: D2000_EXE/web/wildfly13/standalone/deployments.smartWeb.war na <xxx>.war, kde <xxx> môže byť ľubovoľné meno vystihujúce názov aplikácie. Pod týmto menom bude aplikácia dostupná po spustení aplikačného servera: na URL ceste http://<serverDomena.sk>/xxx.Premenovaním archívu aplikácie ( Pozor, pre správne fungovanie aplikácie je nevyhnutné názov .war súboru aplikácie premenovať iba s použitím alfanumerických znakov a bez diakritiky. |
Súbor standalone.xml je hlavný konfiguračný súbor aplikačného servera Wildfly a nachádza sa v adresári /standalone/configuration. SmartWeb server ma implementovanú funkciu automatickej konfigurácie pri deploymente aplikácie aplikačným serverom Wildfly. Z tohto dôvodu pre beh SmartWeb aplikácie ako takej nie je potrebné súbor standalone.xml editovať. Editácia je nevyhnutná iba v prípade úpravy konfigurácie samotného aplikačného servera - napr. zmena portov, konfigurácia zabezpečenia komunikácie HTTPS a HTTP hlavičiek, zapnutie overovania cez klientské certifikáty, kompresia komunikácie atď.
Pozor, editáciu konfiguračného súboru standalone.xml vykonávame zásadne pri vypnutom aplikačnom serveri, z dôvodu že počas jeho behu si ju on sám spravuje a môže prepísať zmeny uložené cez editor. |
Pre optimálny beh SmartWeb servera a základné zabezpečenie cez HTTP hlavičky odporúčame nasledovnú konfiguráciu:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:4.2">
...
<profile>
<subsystem xmlns="urn:jboss:domain:logging:3.0">
...
<!-- Vypnutie zbytočných info hlášok o ukončení websocket spojenia -->
<logger category="org.cometd.websocket.server.WebSocketTransport$WebSocketScheduler$1">
<level name="WARN"/>
</logger>
...
</subsystem>
...
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
<server name="default-server">
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="gzipFilter" predicate="not min-content-size(450)"/>
<filter-ref name="Strict-Transport-Security-header"/>
<filter-ref name="Vary-header"/>
<filter-ref name="X-Frame-Options"/>
<filter-ref name="X-Content-Type-Options"/>
<filter-ref name="X-XSS-Protection"/>
<filter-ref name="Referrer-Policy"/>
<filter-ref name="Content-Security-Policy"/>
</host>
</server>
...
<filters>
<response-header name="Vary-header" header-name="Vary" header-value="Accept-Encoding"/>
<response-header name="Strict-Transport-Security-header" header-name="Strict-Transport-Security" header-value="max-age=31536000; includeSubDomains"/>
<!-- Nastavenia pre Cross-Origin Resource Sharing (nepoužívané/zakázané) -->
<response-header name="Access-Control-Allow-Origin" header-name="Access-Control-Allow-Origin" header-value="*"/>
<response-header name="Access-Control-Allow-Methods" header-name="Access-Control-Allow-Methods" header-value="GET, POST, OPTIONS, PUT"/>
<response-header name="Access-Control-Allow-Headers" header-name="Access-Control-Allow-Headers" header-value="accept, authorization, content-type, x-requested-with"/>
<response-header name="Access-Control-Allow-Credentials" header-name="Access-Control-Allow-Credentials" header-value="true"/>
<response-header name="Access-Control-Max-Age" header-name="Access-Control-Max-Age" header-value="1"/>
<!-- Zakázané vkladanie stránok do frame (starší spôsob) -->
<response-header name="X-Frame-Options" header-name="X-Frame-Options" header-value="DENY"/>
<!-- Vynútené použitie MIME typu nastaveného v HTTP hlavičke -->
<response-header name="X-Content-Type-Options" header-name="X-Content-Type-Options" header-value="nosniff"/>
<!-- Zakázané zobrazenie stránky, ak bol detekovaný cross-site scripting (XSS) útok -->
<response-header name="X-XSS-Protection" header-name="X-XSS-Protection" header-value="1; mode=block"/>
<!-- Neodosielanie referrer informácií -->
<response-header name="Referrer-Policy" header-name="Referrer-Policy" header-value="no-referrer"/>
<!-- Nastavenie bezpečnostnej politiky obsahu:
- zakázané vkladanie do frame (nový spôsob)
- predvolene povolený zdroj obsahu z hostiteľskej domény
- pre CSS štýly povolené aj zabezpečené https odkazy a inline
- pre súbory písiem povolené aj google písma
- pre skripty povolené inline aj evaluácia
- zakázané plugin objekty (flash a pod.)
- povolené pripájanie z ľubovolnej lokality
-->
<response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="frame-ancestors 'none'; default-src 'self'; style-src https: 'self' 'unsafe-inline'; font-src 'self' https://themes.googleusercontent.com https://fonts.gstatic.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'none'; connect-src *"/>
<gzip name="gzipFilter"/>
</filters>
</subsystem>
</profile>
...
<interfaces>
...
<interface name="public">
<!-- Nastavenie bind adresy na vsetky sietove interface, kvoli tomu aby bol Wildfly pristupny aj z vonku -->
<inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
...
<!-- Nastavenie portov pre HTTP a HTTPS na všeobecne používané hodnoty, pozor toto nemeniť pri inštalácii na Linuxe, viď kapitola o inštalácii na Linuxe nižšie -->
<socket-binding name="http" port="${jboss.http.port:80}"/>
<socket-binding name="https" port="${jboss.https.port:443}"/>
...
</socket-binding-group>
</server>
|
Nasledujúce zmeny v standalone.xml konfigurujú zapnutie silných šifier pre HTTPS protokol. Podmienkou je inštalácia Java Cryptography Extensions popísaná v kapitole Inštalácia JRE 1.8 a Git klienta.
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:4.2">
...
<system-properties>
<!-- Minimálna dĺžka Diffie-Helman kľúča -->
<property name="jdk.tls.ephemeralDHKeySize" value="2048"/>
</system-properties>
<management>
<security-realms>
...
<!-- Security realn undertowTLSRealm je potrebné nastaviť iba v prípade konfigurácie HTTPS, zároveň aj pre overovanie cez klientské certifikáty -->
<security-realm name="undertowTLSRealm">
<server-identities>
<ssl protocol="TLS">
<!-- Cesta/heslo ku keystore kde je uložený SSL certifikát pre HTTPS s definovaným aliasom, napr. nb1mgre1.ipesoft-int.sk -->
<keystore path="server.jks" relative-to="jboss.server.config.dir" keystore-password="secret" alias="nb1mgre1.ipesoft-int.sk" key-password="secret"/>
</ssl>
</server-identities>
<!-- Časť "authentication" je potrebné nastaviť iba pre overovanie cez klientské certifikáty -->
<authentication>
<truststore path="client-certificates.jks" relative-to="jboss.server.config.dir" keystore-password="secret"/>
</authentication>
</security-realm>
</security-realms>
...
</management>
<profile>
...
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
...
<server name="default-server">
...
<!-- !!! Atribút verify-client je potrebné nastaviť na hodnotu REQUESTED v prípade ak je potrebná autentifikácia cez klientské certifikáty, inak ho netreba meniť -->
<https-listener name="https" socket-binding="https" security-realm="undertowTLSRealm" verify-client="NOT_REQUESTED"
enabled-protocols="TLSv1.2,TLSv1.1"
enabled-cipher-suites="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"
enable-http2="true"/>
</subsystem>
</profile>
</server> |
Uvedené zmeny konfigurácie majú nastavený zoznam povolených protokolov a šifier tak, aby bol bezpečný, podporené sú len novšie prehliadače - IE11 a Android >= 4.4.3, Safari >= 7. V prípade potreby podpory ešte starších prehliadačov treba nastavit inak tieto atribúty:
enabled-protocols="TLSv1.2,TLSv1.1,TLSv1"
enabled-cipher-suites="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA"
V prípade že Wildfly AS je dostupný z vonku priamo cez ním otvorené porty a doménu je potrebná nasledovná konfigurácia:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:4.2">
...
<profile>
...
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
...
<server name="default-server">
<!-- Atribút redirect-socket nastaviť iba v prípade výhradnej komunikácie cez HTTPS -->
<http-listener name="default" socket-binding="http" redirect-socket="https"/>
</server>
...
</subsystem>
</profile>
</server> |
V prípade že Wildfly AS je dostupný cez samostatný proxy server alebo IPTABLES rerouting je potrebná nasledovná konfigurácia:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:4.2">
...
<profile>
...
<subsystem xmlns="urn:jboss:domain:undertow:3.1">
...
<server name="default-server">
...
<host name="default-host" alias="localhost">
...
<!-- Atribút predicate treba nastaviť na HTTP port definovaný v poslednej časti standalone.xml-->
<filter-ref name="http-to-https" predicate="equals(%p,8080)"/>
...
</host>
...
<filter-ref name="http-to-https" predicate="equals(%p,8080)"/>
</server>
...
<filters>
<!-- Atribút target treba nastaviť na finálnu doménu a port, %U je placeholder pre zvyšnú časť otváranej url linky-->
<rewrite name="http-to-https" redirect="true" target="https://myhostname:8443%U"/>
</filters>
</subsystem>
</profile>
</server> |