Problém s certifikáty

Problém s certifikáty
« kdy: 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


Re:Problém s certifikáty
« Odpověď #1 kdy: 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í.

Re:Problém s certifikáty
« Odpověď #2 kdy: 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?

Re:Problém s certifikáty
« Odpověď #3 kdy: 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...
« Poslední změna: 30. 08. 2019, 18:10:55 od Arthnon »

Re:Problém s certifikáty
« Odpověď #4 kdy: 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é...


Re:Problém s certifikáty
« Odpověď #5 kdy: 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) na MDN. A dokumentace Springu: Enabling Cross Origin Requests for a RESTful Web Service.

Re:Problém s certifikáty
« Odpověď #6 kdy: 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...

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Problém s certifikáty
« Odpověď #7 kdy: 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), ktera bude komunikovat s aplikaci na HTTP  a klientum data poskytovat pres HTTPS?

Pak certifikaty resite jen v Apache


Re:Problém s certifikáty
« Odpověď #8 kdy: 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.

Re:Problém s certifikáty
« Odpověď #9 kdy: 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í.

Re:Problém s certifikáty
« Odpověď #10 kdy: 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

Re:Problém s certifikáty
« Odpověď #11 kdy: 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.

Re:Problém s certifikáty
« Odpověď #12 kdy: 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í)?

Re:Problém s certifikáty
« Odpověď #13 kdy: 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.