Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Arthnon 30. 08. 2019, 14:52:49

Název: Problém s certifikáty
Přispěvatel: Arthnon 30. 08. 2019, 14:52:49
Zdravím,
snažím se nastavit aplikaci, která bude běhat pouze po lokální síti (v rámci wifi). Aplikace mi běžela v pohodě na localhostu.
Vytvořil jsem si web server na pc (windows) pomocí IIS, nastavil jsem mu ip adresu 192.168.0.113
Můj back-end běží ve springu a na stejném pc jako web server, čili má IP: 192.168.0.113:8443
Mohu se v tuto chvíli načíst loginovou stránku té aplikace na všech zařízeních na té lokální síti...
Nicméně se nemohu přihlásit.
Na back-endu jsem si vytvořil self-signed certificat pomocí keytool (.jks), který používám pro https.
Při použití https mi to vyhazuje tuto chybu:
Mozilla:
CORS error - CORS request did not succeed.
Chrome: OPTIONS https://url.../oauth/token net::ERR_CONNECTION_REFUSED

Když vypnu https na back-endu a používám jenom http, tak se mohu v pohodě normálně přihlásit, ale při použití https ne.
Takže musí být něco špatně s tím certifikátem... dělám to poprvé, takže v tom celkem plavu...
1.) Nějaký způsob jak to vyřešit?
2.) Je zde nějaká možnost, kde si nechat vygenerovat nějaký certifikát zadarmo, aby šel nastavit i jen pro lokální sít? Případně kde?
3.) Můžu nějak rozchodit to, aby mi šlo https i přes self-signed generovaný certifikáty? Webový server běží zatím taky jenom na http, tam já potřebuji taky dostat taky certifikát...

Případně nějaké další rady, jak to vyřešit s těmi certifikáty? Co bych měl udělat? Kde bych měl vzít ten certifikát a jak ho použít pro back-end, webový server?

Děkuji za pomoc
Název: Re:Problém s certifikáty
Přispěvatel: Filip Jirsák 30. 08. 2019, 17:28:22
Problém s CORS znamená, že se pokoušíte přes AJAX něco stáhnout z jiného serveru, než na jakém je ta webové aplikace. Pokud to dělá jen při použití HTTPS, pravděpodobně máte někde v JavaScriptové aplikaci natvrdo danou adresu s protokolem HTTP. S certifikáty to nijak nesouvisí.
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 30. 08. 2019, 17:54:02
Jak to myslíte, na tvrdo danou adresu s protokolem http?

Čili pokud mám zadáno jakožto url v ajaxu:

https://190.160.0.113:8443/oauth/token

tak je to špatně?

Jak jinak by to mělo být napsáno, když spring má tuhle IP adresu a port?
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 30. 08. 2019, 18:08:07
Když jsem zkusil dát pouze /oauth/token, tak to běží na portu 443 ta request a spring běží na 8443, takže to nedojde na ten server...
A spring nejde nastavit na 443, protože na tom portu již běží něco...
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 30. 08. 2019, 18:27:01
Na 443 mi běží totiž ten webový server (https)...
Čili když napišu do ajaxu: oauth/token - tak to vytvoří https://IP_web_serveru:443/oauth/token
Jenže já nemůžu nastavit spring, aby běžel také na portu 443. A opačně to samé...
Název: Re:Problém s certifikáty
Přispěvatel: Filip Jirsák 30. 08. 2019, 18:41:45
Vypadá to, že CORS bere v úvahu protokol, hostname i port – pak by vám to ale mělo hlásit stejnou chybu i při použití HTTP. Každopádně pokud zdrojová weboá stránka, kde se spouští to AJAXové volání, a URL /cíl) toho AJAXového volání nemají tu trojici protokol, hostname a port stejnou, uplatňuje se CORS a server (cíl toho AJAXového volání – váš REST server) musí posílat správné hlavičky. Viz třeba Cross-Origin Resource Sharing (CORS) (https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) na MDN. A dokumentace Springu: Enabling Cross Origin Requests for a RESTful Web Service (https://spring.io/guides/gs/rest-service-cors/).
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 30. 08. 2019, 19:57:07
No, mě to přes http jde i když to tam mám rovnou nandaný takhle přímo:
http://adresa:8080/oauth/token
Jakmile tam dám zpátky ten self-generated certifikát, tak už to nejde.
Všiml jsem si, že při použití toho https vůbec nedojde žádná žádost na server, takže nemůže ani vrátit žádné hlavičky...
Název: Re:Problém s certifikáty
Přispěvatel: Vilith 30. 08. 2019, 21:13:41
Co nasadit pred aplikaci na HTTP frontend reverzni proxy (treba Apache - https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension (https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension)), ktera bude komunikovat s aplikaci na HTTP  a klientum data poskytovat pres HTTPS?

Pak certifikaty resite jen v Apache

Název: Re:Problém s certifikáty
Přispěvatel: Filip Jirsák 30. 08. 2019, 22:44:02
Chtělo by to dát sem celý záznam té komunikace.

Mozilla:
CORS error - CORS request did not succeed.
Chrome: OPTIONS https://url.../oauth/token net::ERR_CONNECTION_REFUSED
Ta chyba Chrome říká, že se prohlížeči vůbec nepodařilo navázat to AJAXové spojení. Zřejmě máte v té JavaScriptové aplikaci špatnou adresu, ale nedokážu to říct jistě, protože jste ten chybový výpis Chrome zřejmě upravil – asi v něm nebylo https://url.../. Respektive pokud tam opravdu bylo tohle, tu adresu určitě máte špatně, protože k hostname url... se prohlížeč určitě nepřipojí, takové doménové jméno neexistuje.
Název: Re:Problém s certifikáty
Přispěvatel: taci 31. 08. 2019, 10:28:01
Možná budeš muset přidělit pro daný web výjimku v prohlížeči, jelikož self-signed ti nepovolí.
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 01. 09. 2019, 15:45:47
Podařilo se mi s tím trošku hnout. Problém byl, že na web-serveru byl jiný, než na serveru.
Nicméně pořád tady mám další problém.

1.) Jak mám nastavit common_name pro lokální sít? Řekněme, že webový server běží na ip: https://192.168.0.162:443 a spring ta samá IP akorát port 8443.
Ptám se proto, že mi ted vyhazuje prohlížeč tuto chybu
Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID

Zkoušel jsem: https://192.168.0.162 a 192.168.0.162 - nic z toho nepomohlo a pořád to vyhazuje tu chybu...
Jaké mám tedy zvolit common name, aby to nevyhazovalo tuto chybu na lokální síti?

Díky
Název: Re:Problém s certifikáty
Přispěvatel: Filip Jirsák 01. 09. 2019, 16:22:10
Raději používejte doménová jména než IP adresy. Doménové jméno musí být v certifikátu v atributu SAN (Subject Alternative Name) – jména ze Subject (část CN, Common Name) už prohlížeče při porovnávání certifikátu s doménovým názvem neberou v úvahu.
Název: Re:Problém s certifikáty
Přispěvatel: Arthnon 01. 09. 2019, 17:02:08
Raději používejte doménová jména než IP adresy. Doménové jméno musí být v certifikátu v atributu SAN (Subject Alternative Name) – jména ze Subject (část CN, Common Name) už prohlížeče při porovnávání certifikátu s doménovým názvem neberou v úvahu.

super, tohle mi moc pomohlo, děkuji. Podařilo se mi tu chybu přejít částečně.
Změnil jsem hosts file a dal tam
192.168.0.103  www.test.com

Udělal jsem certifikát a do SAN dal www.test.com, a přidal ten certifikát do trusted root autorit a web server je v pohodě, ale problém je ted na straně springu, protože když do ajaxu dám:
https://www.test.com:8443/oauth/token, tak se to přeloží na IP adresu https://192.168.0.162 a zase to vyhodí tu stejnou chybu s common_name...
Možná by pomohlo tam přidat ip adresu springu ještě do toho SAN (jestli tam jde teda dát více věcí)?
Název: Re:Problém s certifikáty
Přispěvatel: Filip Jirsák 01. 09. 2019, 17:31:56
AJAXové volání jde z klienta (prohlížeče), Spring na serveru by mohl maximálně poslat přesměrování na tu IP adresu. Bude potřeba zjistit, odkud se ta IP adresa bere, zda z klienta nebo ze serveru. A zda je někde napevno zadaná, nebo odkud se bere. Je možné, že to posílá server jako odkaz na sebe sama – pak by byl problém v tom, že server neumí zjistit své doménové jméno a ani ho nemá nakonfigurované v konfiguraci Springu.