Fórum Root.cz

Hlavní témata => Server => Téma založeno: M25artin 03. 08. 2020, 20:40:19

Název: Tomcat + HTTPS
Přispěvatel: M25artin 03. 08. 2020, 20:40:19
Zdravim linuxové borce. Mám následující problém. Po instalaci Tomcat serveru (Ubuntu distro) mi běží služba na portu 8080. Což nechci a chci, aby mi běžela na HTTPS. Mám certifikáty (CA.crt, .key, .crt). Nevím už co dělám špatně, ale nedaří se mi to rozjet. Postupuji následujícím způsobem:
Pomocí příkazu jsem si prevedl oba certikáty (.key, .crt) do keystore

openssl pkcs12 -export -in <path/to/cert>.crt -inkey
<path/to/key>.key -out <keystore-name> -name <alias>

Pak jsem provedl pomocí příkazu import CA certu do keystore

 keytool -import -alias root -keystore <your_keystore_filename>
    -trustcacerts -file <filename_of_the_chain_certificate>

A nakonec upravil server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS"
      keystoreFile="<path/to/keystore>" keystorePass="<keystore_pass_from_above>"
      keystoreAlias="<alias>" keystoreType="PKCS12" />

Pak restart serveru a nic se neděje :( Díky moc
Název: Re:Tomcat + HTTPS
Přispěvatel: Vilith 03. 08. 2020, 21:05:31
Použij Apache nebo nginx jako frontend https://confluence.atlassian.com/adminjiraserver/integrating-jira-with-apache-using-ssl-938847754.html
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 03. 08. 2020, 22:03:40
Jiný lehčí způsob není? Nedělám někde nějakou stupidní chybu?
Název: Re:Tomcat + HTTPS
Přispěvatel: Vilith 04. 08. 2020, 06:37:19
Nastavit Tomcat přímo na HTTPS, ale to není doporučovaná varianta
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 04. 08. 2020, 08:32:30
Pokud Tomcat po restartu neposlouchá na portu 8443, evidentně se ta vaše konfigurace neuplatnila. Pokud ale Tomcat nastartoval, asi v konfiguračním souboru není žádná chyba, takže nejspíš needitujete ten správný konfigurační soubor.

Nastavit Tomcat přímo na HTTPS, ale to není doporučovaná varianta
To platilo tak před dvaceti lety…
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 04. 08. 2020, 08:41:16
Editoval jsem server.xml což je správný soubor. Když si vytvořím takové to generic uložiště certifikátů:

keytool -genkey -keysize 2048 -keyalg RSA -sigalg SHA256withRSA -alias tomcat -keystore era6.jks -keypass tajneHeslo -storepass tajneHeslo -dname "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown"

tak mi to server naběhne na https. Pokud převedu certifikáty co jsem obdržel do PKCS12 + importnu tam CA. Tak nenaběhne :D Opravdu nevím co dělam už špatně googlim jak o život a zatím nic.
Název: Re:Tomcat + HTTPS
Přispěvatel: Vilith 04. 08. 2020, 09:25:02
https://confluence.atlassian.com/adminjiraserver/running-jira-applications-over-ssl-or-https-938847764.html

Sekce Troubleshooting něco nenapoví?
Název: Re:Tomcat + HTTPS
Přispěvatel: jvavra2 04. 08. 2020, 09:36:37
org.apache.coyote.http11.Http11NioProtocol je java connector, proto je třeba do keystoreFile dát jks keystore vyrobený právě pomocí keytool, který do .jks umí zkonvertovat .p12

Viz https://tomcat.apache.org/tomcat-8.5-doc/ssl-howto.html

Nocméně doporučoval bych spíše apr connector
https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_Connector_-_NIO_and_NIO2
org.apache.coyote.http11.Http11AprProtocol
Ten sice vyžaduje zkompilované openssl knihovny atd.

Já jsem narazil na limity, kdy jsem chtěl v tomcatu virtuální ssl weby s autentizací klientským certifikátem, tak jsem skončil s Apache Server - mod ajp reversní proxy - tomcat. Prostě jinak to nefungovalo, což nebude Váš případ.
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 04. 08. 2020, 11:43:31
https://confluence.atlassian.com/adminjiraserver/running-jira-applications-over-ssl-or-https-938847764.html

Sekce Troubleshooting něco nenapoví?

Já bych vám napověděl, že Jira je něco jiného než Tomcat.  ::)
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 04. 08. 2020, 11:48:00
tak mi to server naběhne na https. Pokud převedu certifikáty co jsem obdržel do PKCS12 + importnu tam CA. Tak nenaběhne :D Opravdu nevím co dělam už špatně googlim jak o život a zatím nic.
To, že nenaběhne, je dobrá zpráva. Znamená to, že je někde chyba a že editujete ty správné soubory. Chyba by měla být vypsaná v logu.

Máte v tom úložišti certifikátů certifikáty správně pojmenované a máte tam správné heslo? Musí to být shodné s tím, co používá Tomcat. Osobně raději pro práci s Java KeyStore používám KeyStore Explorer (https://keystore-explorer.org/), používání je intuitivnější než používání té řádkové utility.
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 04. 08. 2020, 18:25:33
Po použití connectoru <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
a restartu serveru vidím tohle v logu :(

tomcat8[21657]: Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
tomcat8[21657]: Command line argument: -Dignore.endorsed.dirs=
tomcat8[21657]: Command line argument: -Dcatalina.base=/var/lib/tomcat8
tomcat8[21657]: Command line argument: -Dcatalina.home=/usr/share/tomcat8
tomcat8[21657]: Command line argument: -Djava.io.tmpdir=/tmp
tomcat8[21657]: Loaded APR based Apache Tomcat Native library [1.2.21] using APR version [1.6.5].
tomcat8[21657]: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
tomcat8[21657]: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
tomcat8[21657]: OpenSSL successfully initialized [OpenSSL 1.1.1d  10 Sep 2019]
tomcat8[21657]: Initializing ProtocolHandler ["https-openssl-nio-8443"]
Název: Re:Tomcat + HTTPS
Přispěvatel: Andrej Kvasnica 04. 08. 2020, 22:24:53
Netrap sa a daj pred toho tomcata nginx v reverse proxy mode ako radil niekto vyssie. Strata vykonu limitne nulova, ale usetri to strasne vela nervov.
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 04. 08. 2020, 23:33:52
Po použití connectoru <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
a restartu serveru vidím tohle v logu :(
Nerozumím tomu smutnému smajlíku. V tom logu žádná chyba není. Funguje to takhle nebo ne? Mimochodem, doufám, že zkoušíte přístup na port 8443, který tam máte nakonfigurovaný, a ne na standardní HTTPS port 443.
Název: Re:Tomcat + HTTPS
Přispěvatel: Standa Blábol 05. 08. 2020, 11:37:26
To bude nejaka ptakovina, SSL na Tomcatu normalne funguje.

Nejpve si over, zda to neco vraci na: curl -k https://127.0.0.1:8443

Pokud ano, zkontroluj lokalni firewall.
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 05. 08. 2020, 19:34:20
Když si vytvořím self-signed cert do keystore uložiště tak mi tomcat najede na portu 8443. Pokud si vytvořím viz první příspěvek ze svých certů (jeden .key a jeden .crt) jeden pkc12 soubor, ktery ihned importnu do noveho keystore a vzapeti tam importnu CA cert. Pak zadam cestu k tomu keystore do stejne konfigurace tak mi tomcat s tim mym certem nenajede.
Postupoval jsem podle této stránky: https://faqs.cascadecms.com/en/articles/2142280-enabling-ssl-via-tomcat-with-an-existing-certificate
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 05. 08. 2020, 20:21:47
Když server nenastartuje, co je v logu za chybu? KeyStore Explorer vám to úložiště otevře a je tam vše správně?

Importovat zvlášť certifikát serveru a zvlášť certifikát CA podle mne přes keytool nejde, nespojí se to do jednoho záznamu. Buď je potřeba vložit i ten certifikát CA do PFX a to pak naimportovat v jednom kroku přes keystore. A nebo použijte ten KeyStore Explorer, tam to můžete přidat postupně, a rovnou vidíte, zda je ten certifikační řetězec správně.
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 05. 08. 2020, 22:16:16
Moc děkuji!!! KeyStore Explorer mi pomohl. Tomcat na portu 8843 funguje i s certifikatem. Teď už jen musím nastavit, aby jel jen na 443 a problém vyřešen :)
Název: Re:Tomcat + HTTPS
Přispěvatel: Vočko Szyslak 05. 08. 2020, 23:38:39
https://confluence.atlassian.com/adminjiraserver/running-jira-applications-over-ssl-or-https-938847764.html

Sekce Troubleshooting něco nenapoví?

Já bych vám napověděl, že Jira je něco jiného než Tomcat.  ::)

To by ste sa divil, ale JIRA bezi ako webapp na Tomcate a ten navod z JIRA je aplikovatelny aj na tazatelovu situaciu...
Název: Re:Tomcat + HTTPS
Přispěvatel: Vočko Szyslak 05. 08. 2020, 23:48:35
Moc děkuji!!! KeyStore Explorer mi pomohl. Tomcat na portu 8843 funguje i s certifikatem. Teď už jen musím nastavit, aby jel jen na 443 a problém vyřešen :)

Na kontrolu spravnosti vygenerovaneho keystoru odporucam tuto utilitku: https://github.com/MichalHecko/SSLPoke (https://github.com/MichalHecko/SSLPoke)

Teraz este vyriesit privilegovane porty - odporucam sa pozriet po utilitke authbind (Debian) napr. aj modifikovanim startup.sh, napr.:

Kód: [Vybrat]
1) Install authbind
2) Make port 443 available to authbind (you need to be root):
touch /etc/authbind/byport/443
  chmod 500 /etc/authbind/byport/443
  chown tomcat /etc/authbind/byport/443
3) Change /usr/share/tomcat/bin/startup.sh
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
  # OLD: exec "$PRGDIR"/"$EXECUTABLE" start "$@"


alebo v pripade napr. Redhat odporucam:

Kód: [Vybrat]
setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/bin/java

ktory mne na Redhatoch a Centosoch nikdy nefungoval poriadne, nakolko je tam problem s:

Kód: [Vybrat]
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

treba povolit loadovanie kniznice

Kód: [Vybrat]
sudo vim /etc/ld.so.conf.d/java.conf

Jeho obsah je napr. tento riadok: /usr/java/jdk1.8.0_191-amd64/lib/amd64/jli

sudo ldconfig

idealne je to pekne riesit na urovni SystemD, rovno v unite povolit capabilities:
Kód: [Vybrat]
AmbientCapabilities=CAP_NET_BIND_SERVICE

Ale inak, zlaty Debian
Název: Re:Tomcat + HTTPS
Přispěvatel: Vočko Szyslak 05. 08. 2020, 23:58:51
Netrap sa a daj pred toho tomcata nginx v reverse proxy mode ako radil niekto vyssie. Strata vykonu limitne nulova, ale usetri to strasne vela nervov.

Tiez som si kedysi myslel, ale najdu sa pripady, kedy zdanie klame:

Uplne bezna situacia, v spojeni s kontainermi, kde samozrejme Docker nie uplne funguje tak, ze dependsOn neznamena, ze kontainer je v 100% stave ready a dochadza k tomu, ze NGINX nabehne skor, ako je mozne resolvnut DNS kontainera, ktory je v "proxy_pass"...

Netestoval som na Docker Swarm alebo Kubernates, tam moze byt situacia mierne odlisna.

Vo vysledku je to error pri nabehu nginx....ako, toto sa Vam stane vzdy, ked vam NGINX nabehne skor, ako je mozne resolvnut DNS zaznam targetu v proxy_pass, aj mimo kontainery,ale tam sa to deje vzdy....

Riesenia:

1. extendnut NGINX image, a doplnit utilitku, ktora pocka na nabeh ostatnych kontainerov (ble, a co ak niektory z kontainerov nenabehne nikdy ?) - https://github.com/eficode/wait-for (https://github.com/eficode/wait-for)
2. nastavit restart policy pre NGINX - opat, co ak nenabehne niektory z proxy_pass targetov vobec ?
3. odrbat nginx, nastavenim aliasov alebo nejakeho ineho DNS resolvera...

Tejto teme (3) sa dost venuju tu, zial, mne sa to nikdy nepodarilo takto odrbat:
- https://stackoverflow.com/questions/32845674/setup-nginx-not-to-crash-if-host-in-upstream-is-not-found (https://stackoverflow.com/questions/32845674/setup-nginx-not-to-crash-if-host-in-upstream-is-not-found)
- https://stackoverflow.com/questions/50248522/nginx-will-not-start-with-host-not-found-in-upstream/50358455 (https://stackoverflow.com/questions/50248522/nginx-will-not-start-with-host-not-found-in-upstream/50358455)

Ak vie niekto, ako to vyriesit bodom 3 alebo aj nejako inak, sem s radou - mne premenne nesli.

Zlaty Apache
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 06. 08. 2020, 07:59:10
To by ste sa divil, ale JIRA bezi ako webapp na Tomcate a ten navod z JIRA je aplikovatelny aj na tazatelovu situaciu...
Nedivil. Vím, že Jira používá Tomcat. Akorát jsem se na ten návod díval, a je tam dost věcí specifických pro Jiru. Tazatele by to jen mátlo.
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 06. 08. 2020, 08:01:29
Teď už jen musím nastavit, aby jel jen na 443 a problém vyřešen :)
V systemd jednotce, kterou Tomcat spouštíte, nastavíte:

Kód: [Vybrat]
[Service]
CapabilityBoundingSet=cap_net_bind_service

Tím pádem bude moci služba naslouchat na nízkých portech, i když neběží pod rootem. Pak už jen v konfiguráku Tomcatu přepíšete port 8443 na port 443.
Název: Re:Tomcat + HTTPS
Přispěvatel: M25artin 06. 08. 2020, 08:41:30
Vyřešeno. Díky moc Filip Jirsák!!!

Připsat v systemd jednotce pomohlo.

[Service]
CapabilityBoundingSet=cap_net_bind_service

Zase jsem se něco naučil :D Ještě jednou moc díky.
Název: Re:Tomcat + HTTPS
Přispěvatel: Filip Jirsák 06. 08. 2020, 10:25:03
To je dobře. Rádo se stalo.  :)
Název: Re:Tomcat + HTTPS
Přispěvatel: jvavra2 10. 08. 2020, 11:18:59
Odkazoval jsem Vás na tomcat doc: https://tomcat.apache.org/tomcat-8.5-doc/ssl-howto.html

Změnťe protokol na ...apr...: a připravte si p12 certifikát v server.crt a klíč v server.pem, tady v příkladu bez hesla:

<!-- Define an SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11AprProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           SSLCertificateFile="/usr/local/ssl/server.crt"
           SSLCertificateKeyFile="/usr/local/ssl/server.pem"
           SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>