Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer RedditPosledné úpravySend via e-MailPrintPermalink × Toto je staršia verzia dokumentu! Konfigurácia a inštalácia OpenJDK a Jetty Budú sa inštalovať nasledovné verzie softvérov: Java OpenJDK 11 Jetty 9.4 OpenJDK https://openjdk.java.net/ Akú verziu Jetty mám použiť? https://www.eclipse.org/jetty/documentation/current/what-jetty-version.html Inštalácia OpenJDK dnf -y install java-11-openjdk Adresár s nainštalovanou verziou: /usr/lib/jvm Zobrazenie podrobností nainštalovanej verzie: java -version Nastavíme Java_HOME (premennú používajú aplikácie Java na určenie umiestnenia inštalácie Java): vim /etc/profile.d/java.sh Do vytvoreného súboru zapíšeme: Pod “x” sa rozumie aktuálne číselné označenie nainštalovanej verzie, ktorá sa nachádza v adresári “/usr/lib/jvm”. JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.x.x-x.el8_2.x86_64" Po uložení súboru java.sh uplatníme zmeny: source /etc/profile.d/java.sh Skontrolujeme nastavenie: echo $JAVA_HOME Mal by sa zobraziť výsledok: /usr/lib/jvm/java-11-openjdk-11.0.x.x-x.el8_2.x86_64 Inštalácia a konfigurácia Jetty Vytvoríme novú skupinu “idp” a používateľa “idp”. groupadd idp useradd -m -g idp -s /bin/bash idp Stiahneme aktuálnu verziu Jetty (v tomto návode je to jetty-distribution-9.4.31…) Eclipse Jetty Downloads - The latest release https://www.eclipse.org/jetty/download.html wget URL=odkaz-na-stiahnutie-jetty V ďalších krokoch návod pokračuje s verziou jetty použitou v príklade. wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.31.v20200723/jetty-distribution-9.4.31.v20200723.tar.gz Rozbalíme, premiestnime a premenujeme: tar -zxvf jetty-distribution-9.4.31.v20200723.tar.gz mv jetty-distribution-9.4.31.v20200723 /opt/ mv /opt/jetty-distribution-9.4.31.v20200723 /opt/jetty Zmeníme vlastníka adresára: chown -R idp:idp /opt/jetty Vytvoríme konfiguračný súbor: vim /etc/default/jetty S obsahom: JETTY_HOME=/opt/jetty JETTY_BASE=/opt/jetty Ďalej pracujeme pod používateľom “idp” su idp cd /opt/jetty Konfigurácia Jetty: java -jar /opt/jetty/start.jar --create-startd java -jar /opt/jetty/start.jar --add-to-start=http,https,console-capture,deploy,jsp,jstl,plus,servlets,annotations,ext,resources,requestlog,setuid,rewrite,ssl Úprava konfiguračného súboru start.ini: vim /opt/jetty/start.d/start.ini # --------------------------------------- # Module: http # Enables an HTTP connector on the server. # By default HTTP/1 is support, but HTTP2C can # be added to the connector with the http2c module. # --------------------------------------- --module=http jetty.http.host=localhost jetty.http.port=80 # --------------------------------------- # Module: ssl # Enables a TLS(SSL) Connector on the server. # This may be used for HTTPS and/or HTTP2 by enabling # the associated support modules. # --------------------------------------- --module=ssl jetty.ssl.port=443 Úprava konfiguračného súboru “setuid.ini” (spustenie Jetty pod neprivilegovaným používateľom): vim /opt/jetty/start.d/setuid.ini # --------------------------------------- # Module: setuid # Enables the unix setUID configuration so that the server # may be started as root to open privileged ports/files before # changing to a restricted user (eg jetty). # --------------------------------------- --module=setuid ## SetUID Configuration # jetty.setuid.startServerAsPrivileged=false # jetty.setuid.userName=jetty # jetty.setuid.groupName=jetty # jetty.setuid.umask=002 # jetty.setuid.clearSupplementalGroups=false jetty.setuid.startServerAsPrivileged=false jetty.setuid.userName=idp jetty.setuid.groupName=idp jetty.setuid.umask=002 Vytvorenie domovskej stránky pre webový server: mkdir -p /opt/jetty/webapps/root vim /opt/jetty/webapps/root/index.html Príklad obsahu index.html: <html> <head> <title> DemoIdP </title> </head> <body> <h1>DemoIdP</h1> </body> </html> Príprava pre aplikáciu Shibboleth IdP: mkdir /opt/jetty/tmp vim /opt/jetty/webapps/idp.xml Konfiguračný súbor idp.xml obsahuje: <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="war">/opt/shibboleth-idp/war/idp.war</Set> <Set name="contextPath">/idp</Set> <Set name="extractWAR">false</Set> <Set name="copyWebDir">false</Set> <Set name="copyWebInf">true</Set> <Set name="tempDirectory">/opt/jetty/tmp</Set> </Configure> Upravíme konfiguračný súbor start.ini (nastavenia pre zvýšenie bezpečnosti): vim /opt/jetty/start.d/start.ini # --------------------------------------- # Module: server # Enables the core Jetty server on the classpath. # --------------------------------------- --module=server jetty.httpConfig.sendServerVersion=false Konfiguráciu jetty-rewrite.xml doplníme nasledovne: vim /opt/jetty/etc/jetty-rewrite.xml <?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- =========================================================== --> <!-- configure rewrite handler --> <!-- =========================================================== --> <Call name="insertHandler"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <Set name="rewriteRequestURI"><Property name="jetty.rewrite.rewriteRequestURI" deprecated="rewrite.rewriteRequestURI" default="true"/></Set> <Set name="rewritePathInfo"><Property name="jetty.rewrite.rewritePathInfo" deprecated="rewrite.rewritePathInfo" default="false"/></Set> <Set name="originalPathAttribute"><Property name="jetty.rewrite.originalPathAttribute" deprecated="rewrite.originalPathAttribute" default="requestedPath"/></Set> <!-- Set DispatcherTypes --> <Set name="dispatcherTypes"> <Array type="javax.servlet.DispatcherType"> <Item><Call class="javax.servlet.DispatcherType" name="valueOf"><Arg>REQUEST</Arg></Call></Item> <Item><Call class="javax.servlet.DispatcherType" name="valueOf"><Arg>ASYNC</Arg></Call></Item> </Array> </Set> <Get id="Rewrite" name="ruleContainer"/> <!-- see rewrite-compactpath.xml for example how to add a rule --> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">Strict-Transport-Security</Set> <Set name="value">max-age=15768000</Set> </New> </Arg> </Call> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">X-Content-Type-Options</Set> <Set name="value">nosniff</Set> </New> </Arg> </Call> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">X-Xss-Protection</Set> <Set name="value">1; mode=block</Set> </New> </Arg> </Call> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">X-Frame-Options</Set> <Set name="value">DENY</Set> </New> </Arg> </Call> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">Content-Security-Policy-Report-Only</Set> <Set name="value">default-src 'self'; style-src 'self' https://maxcdn.bootstrapcdn.com; script-src 'self' https://maxcdn.bootstrapcdn.com https://ajax.googleapis.com; img-src 'self'; font-src https://maxcdn.bootstrapcdn.com; frame-ancestors 'none'</Set> </New> </Arg> </Call> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> <Set name="pattern">*</Set> <Set name="name">Referrer-Policy</Set> <Set name="value">no-referrer-when-downgrade</Set> </New> </Arg> </Call> </New> </Arg> </Call> </Configure> Konfigurácia SSL Pracujeme pod používateľom “root” Pre webový server budeme potrebovať verejný certifikát vydaný verejnou certifikačnou autoritou (ďalej CA). Vygenerujeme si žiadosť o certifikát (nachádzame sa v domovskom adresári používateľa “root”): mkdir ssl_cert (vytvoríme si adresár, do ktorého budeme ukladať všetko potrebné) cd /root/ssl_cert openssl req -new -newkey rsa:2048 -nodes -keyout demoidp.key -out demoidp.csr Proces generovania prebieha nasledovne (možeme si pripraviť informácie, ktoré potrebujeme vyplniť): Generating a RSA private key .......+++++ ........+++++ writing new private key to 'demoidp.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: V adresári “/root/ssl_cert” by sa mali nachádzať vygenerované súbory: demoidp.csr demoidp.key Súbor demoidp.csr je určený pre vygenerovanie SSL certifikátu verejnou CA. Certifikát, ktorý sme už dostali od verejnej CA si v tomto príklade premenujeme na: “demoidp.crt”. V adresári “/root/ssl_cert” máme spolu sústredené súbory: demoidp.csr demoidp.key demoidp.crt (skopírovaný a premenovaný certifikát od verejnej CA) intermediate.crt (medziľahlý certifikát od verejnej CA doručený spolu s SSL certifikátom - koreňový certifikát verejnej CA nepotrebujeme V prípade, že verejná CA používa medziľahlý certifikát potrebujeme ho zlúčiť s SSL certifikátom vygenerovaným pre webový server: cat demoidp.crt intermediate.crt > jetty-cert.txt Vytvorený súbor jetty-cert.txt prevedieme do formátu PKCS#12. Budeme vyzvaný na zadanie hesla (nezabudneme si ho poznačiť, pre účely tohto návodu ho nazveme Heslo_1) openssl pkcs12 -export -inkey demoidp.key -in jetty-cert.txt -out jetty-cert.pkcs12 V adresári “/root/ssl_cert” by sa mali momentálne spolu nachádzať súbory: demoidp.csr demoidp.key demoidp.crt intermediate.crt jetty-cert.txt jetty-cert.pkcs12 Ďalej importujeme súbor “jetty-cert.pkcs12” do keystore. Pri vytváraní keystore budeme vyzvaný na zadanie nového hesla, ktoré si tiež nezabudneme poznačiť (pre účely tohto návodu ho nazveme Heslo_2). Následne potom budeme vyzvaný na zadanie hesla - Heslo_1, ktoré sme zadali pri vytváraníjetty-cert.pkcs12. $JAVA_HOME/bin/keytool -importkeystore -srckeystore jetty-cert.pkcs12 -srcstoretype PKCS12 -destkeystore keystore Proces prebieha nasledovne: Importing keystore jetty-cert.pkcs12 to keystore... Enter destination keystore password: ------------------> zadávame Heslo_2 Re-enter new password: -------------> zadávame Heslo_2 Enter source keystore password: ----------------> zadávame Heslo_1 Entry for alias 1 successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled V adresáry “/root/ssl_cert” nám pribudol súbor “keystore”. Presunieme ho do umiestnenia “/opt/jetty/etc” a nastavíme mu potrebné oprávnenia: mv keystore /opt/jetty/etc chown idp:idp /opt/jetty/etc/keystore Obsfukácia hesla. Účelom je skomplikovať viditeľnosť hesla “Heslo_2”, ktoré potrebujeme zapísať do konfigurácie start.ini. Uvedený príkaz obsahuje verziu jetty-util súvisiacu s verziou Jetty, ktorá bola nainštalovaná pre účely tohto návodu. java -cp /opt/jetty/lib/jetty-util-9.4.31.v20200723.jar org.eclipse.jetty.util.security.Password Heslo_2 Výstup po úspešnej obsfukácii vyzerá nasledovne (pre príklad sú použité “x”): Heslo_2 OBF:XxxxXxxxXXxxxxXXxxxXXXXxxxxxXXXXxxxxXxxXxXxXxxxxXXxXXxxxxX MD5:XxXxxXXxxxXxxXXxXxx Ďalej pracujeme pod používateľom “idp” Do konfigurácie start.ini doplníme obsfukované Heslo_2 vo formáte OBF: vim /opt/jetty/start.d/start.ini # --------------------------------------- # Module: ssl # Enables a TLS(SSL) Connector on the server. # This may be used for HTTPS and/or HTTP2 by enabling # the associated support modules. # --------------------------------------- --module=ssl jetty.ssl.port=443 ## Keystore password jetty.sslContext.keyStorePassword=OBF:XxxxXxxxXXxxxxXXxxxXXXXxxxxxXXXXxxxxXxxXxXxXxxxxXXxXXxxxxX ## KeyManager password jetty.sslContext.keyManagerPassword=OBF:XxxxXxxxXXxxxxXXxxxXXXXxxxxxXXXXxxxxXxxXxXxXxxxxXXxXXxxxxX ## Truststore password jetty.sslContext.trustStorePassword=OBF:XxxxXxxxXXxxxxXXxxxXXXXxxxxxXXXXxxxxXxxXxXxXxxxxXXxXXxxxxX Zakázanie nedôveryhodných protokolov a slabých šifier Vytvoríme súbor tweak-ssl.xml: vim /opt/jetty/etc/tweak-ssl.xml S obsahom: <?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory"> <!-- Zakázání starých a nedůvěryhodných šifer --> <Call name="addExcludeCipherSuites"> <Arg> <Array type="String"> <Item>.*DES.*</Item> <Item>.*DSS.*</Item> <Item>.*MD5.*</Item> <Item>.*NULL.*</Item> <Item>.*RC4.*</Item> <Item>.*_RSA_.*MD5$</Item> <Item>.*_RSA_.*SHA$</Item> <Item>.*_RSA_.*SHA1$</Item> <Item>TLS_DHE_RSA_WITH_AES_128.*</Item> <Item>TLS_DHE_RSA_WITH_AES_256.*</Item> </Array> </Arg> </Call> <!-- Zakázání nedůvěryhodných protokolů --> <Call name="addExcludeProtocols"> <Arg> <Array type="java.lang.String"> <Item>SSL</Item> <Item>SSLv2</Item> <Item>SSLv2Hello</Item> <Item>SSLv3</Item> </Array> </Arg> </Call> <!-- Povolení Forward Secrecy --> <Set name="IncludeCipherSuites"> <Array type="String"> <Item>TLS_DHE_RSA.*</Item> <Item>TLS_ECDHE.*</Item> </Array> </Set> </Configure> Ďalej pridáme obsah súboru do konfigurácie HTTPS: echo /opt/jetty/etc/tweak-ssl.xml >> /opt/jetty/start.d/https.ini Vytvorenie systemd service file pre Jetty Pracujeme pod používateľom “root” jetty.service https://gist.github.com/canariecaf/0fdd6db9e4f294afca79 vim /usr/lib/systemd/system/jetty.service Vytvoríme súbor jetty.service s obsahom: # # A basic systemd configuration for Jetty to start on boot # # Uses the Service scenario of 'oneshot' run as root # and once the process has run, it is considered successful # regardless of error code (even 'FAILURE') as jetty # may take longer to start than jetty.sh observes it's logs # for. # # [Unit] Description=Jetty Web Application Server After=network.target [Install] WantedBy=multi-user.target Alias=jetty.service [Service] Type=oneshot # Execute pre and post scripts as root PermissionsStartOnly=true # The process will be considered active after it exits RemainAfterExit=yes # Note on the Start we do not wait for successful start. # This is to allow the container to run beyond the jetty shell script # in cases where it takes very long to start and results in jetty.sh # reporting FAILED. It's a false positive on failure. ExecStart=-/opt/jetty/bin/jetty.sh start ExecStop=/opt/jetty/bin/jetty.sh stop ExecReload=/opt/jetty/bin/jetty.sh restart Povolíme službu HTTPS vo firewall: firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --reload firewall-cmd --zone=public --list-services (môžeme skontrolovať zmenu) Nastavíme automatické spustenie služby jetty.service a službu spustíme: systemctl daemon-reload systemctl enable jetty systemctl start jetty systemctl status jetty (môžeme skontrolovať stav) Stav Jetty môžeme skontrolovať aj spustením skriptu: /opt/jetty/bin/jetty.sh check Môžete pokračovať Konfigurácia a inštalácia Shibboleth install/idp/konfiguracia_a_instalacia_openjdk_a_jetty.1617965031 Posledná úprava: 09. 04. 2021 12:43 Prihlásiť sa