Securizare aplicatie web

Salutare
am o aplicatie winform care se conecteaza la o baza de date remote de pe un VPS(windows 2016 server),conexiunea este facuta prin OpenVpn
pentru ca era nevoie ca anumite functii sa fie folosite si de pe telefonul mobil,s-a facut o extensie a sa cu Angular+.NET Core,neexistand un domeniu,accesul se face
prin browser direct pe baza ip ului,autentificarea se face cu JWT.Browser ul arata in bara semnul exclamarii si la detalii ‘Your connection site is not secure’
Aplicatia nu este neaparat publica,numarul de useri este mic<10.Nu ma pricep la SSH si am zis sa va cer o parere,se poate securiza si aplicatia web fara a fi necesar un domeniu?exista ceva free?
multumesc

Nu e vorba de securizare, e vorba de certificat SSL.
Da, se poate crea certificat pentru nginx, apache sau ce folositi ca sa serviti fisierele de la angular.

Exista mai multe script-uri care fac asta total automat, trebuie sa setezi doar un cron.
Cauta dupa nginx letsencrypt, apache letsencrypt sau iis letsencrypt…

O alta optiune e sa creezi un certificat semnat local, il setezi si il servesti pe server ca sa se poata descarca. Iar pe dispozitive descarci si instalezi certificatul emis de tine.

1 Like

Let’s Encrypt nu oferă certificate doar pe IP, ai nevoie de un domeniu:

2 Likes

Am trecut total peste faptul ca se acceseaza doar prin IP :smiley:

Cred ca e valabil sa iti semnezi propriul certificat pe ip (vezi https://1.1.1.1), dar trebuie descarcat pe fiecare dispozitiv si instalat.

2 Likes

Poți folosi subdomenii de la un domeniu pe care îl ai deja.

URL-ul introdus în browser și subdomeniul către care faci request-uri AJAX (spre SQL server înțeleg că) ar trebui sa fie sub/domenii pe același domeniu că să eviți problemele de CORS.

Plus: noi practicam subdomeniu/domeniu cu IP privat cu aplicația web accesibilă doar la noi in VPN și lăsat IP public vizibil de pe internet să se poată face validarea și reinnoirea periodica a certificatului Let’s Encrypt.

2 Likes

da,am un domeniu sa-i zicem mydomeniu.ro,e o pagina web gazduita in alta parte si in acelasi timp as putea pt VPS sa pun app.mydomeniu.ro ? ms

Da, singurul lucru pe care trebuie sa il tii minte, e ca backend-ul trebuie sa seteze domeniul tau in lista de CORS Allow Origin ca sa mearga autentificarea/GET/POST-urile. Respectiv in angular sa nu ai in loc de domeniu redirect pe ip.

Daca platforma nu e accesibila pe internet, atunci trebuie sa gasesti un mecanism prin care va avea acces la internet ca sa faca innoire la certificat. (sau actualizezi manual, dar daca uiti o sa fie si mai urat decat daca n-ai fi avut certificat)

Poti cumpara ceva certificat ieftin ca sa actualizezi doar o data pe an. Daca domeniul are deja certificat, poti sa il refolosesti pe subdomeniu daca e pe wildcard.

1 Like

am gasit in cpanelul paginii web: Certificate:(CRT),Private Key (KEY) si Certificate Authority Bundle (CABUNDLE)

 Domains: 	
    mail.mydomain.ro
    mydomain.ro
    www.mydomain.ro
Issuer: 	Let's Encrypt
Expiration: 	Jul 30, 2021 4:20:28 PM

sa adaug subdomeniul in VPS(windows server 2016) am cautat pe net,am gasit ca ar trebui sa instalez DNS Server,l-am instalat,dar mai departe m-am pierdut :frowning:

Trebuie configurat openvpn-ul sa iti ia dns serverul de pe server, iar in ala adaugi subdomeniul spre ip-ul intern. E complicat de facut asta pe windows daca nu stii ce faci exact, s-ar putea sa iti mearga doar adaugand ip-ul serverului ca si dns server in config-ul de openvpn.

1 Like

Eu pentru o situație de genul am generat certificate ssl client side și le folosesc la autentificare. N-ai certificatul, nu te lasă să te conectezi. E simplu de configurat.

1 Like

Da,pare destul de complicata problema :frowning: .ma cam gandesc sa renunt

daca te referi la OpenVpn,aici am generat certificate client si le folosesc

Nu, mă refer simplu cu nginx fără nici un vpn.

Așa cum e site-ul finanțelor de ex. Îți generezi autoritatea ta de certificare și gata.

Caută pe google nginx client side ssl authentication

1 Like

Salutare
azi am generat cu openssl certificatul,urmand pasii de aici

create_RootCA.cmd

openssl genrsa -des3 -out RootCA.key 4096
openssl req -x509 -new -nodes -sha256 -days 2730 -key RootCA.key -out RootCA.crt -config rootca-config.cnf
openssl pkcs12 -export -out RootCA.p12 -inkey RootCA.key -in RootCA.crt
openssl pkcs12 -export -out RootCA.pem -inkey RootCA.key -in RootCA.crt
openssl pkcs12 -export -out RootCA.pfx -inkey RootCA.key -in RootCA.crt

rootca-config.cnf:

[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=US
ST=New York
L=Rochester
O=Developer
OU=CodeSigner
CN=188.xx.xx.xx

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 188.xx.xx.xx

create_Server.cmd:

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server-config.cnf
openssl x509 -req -in server.csr -CA RootCA.crt -CAkey RootCA.key -CAcreateserial -out server.crt -days 2730 -sha256 -extfile v3.ext
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -chain -CAfile RootCA.crt
openssl pkcs12 -export -out server.pem -inkey server.key -in server.crt -chain -CAfile RootCA.crt
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -chain -CAfile RootCA.crt

server-config.cnf:

[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=US
ST=New York
L=Rochester
O=Developer
OU=Test & Learn
CN=188.xx.xx.xx

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 188.xx.xx.xx

v3.ext:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 188.xx.xx.xx

pe server si client in cmd mmc.exe importam la Trusted Root Certification Authourity RootCA.crt (Computer account)
doar pe server importam si server.pfx dar la Personal->Certificates

in IIS la bindings adaugam https pe portul 443,alegem si certificatul

la client in Chromep e W10 conexiunea este secure,in Firefox nu:

This website does not supply ownership information

in Chrome din Android 10(unde ma intereseaza ce mai mult) nu merge desi am importat si aici certificatul si il selectez la accesarea paginii:

The identity of this website has not been verified. Server’s certificate is not trusted

mai exista vreo solutie?
ms

How to install an SSL Certificate on Android? | by Roman Munteanu | Medium asa ai incercat pe Android ?

1 Like

da,il gasesc la User certificates si cand accesez aplicatia ma pune sa-l selectez,cu toate astea imi apare cu semnul exclamarii la detalii,pe detalii:
Connection is not secure,The identity of this website has not been verified. Server’s certificate is not trusted
Stop using invalid certicate
Your connection to 188.xx.xx.xx is encrypted using a modern cipher suite.The connection uses TSL 1.2...

Mai este o solutie foarte eleganta: tailscale.com/ Daca o sa fie un numar limitat de deviceuri de pe care se acceseaza siteul, cu Tailscale poti crea un mesh VPN automagic intre ele si atunci stii ca accesul la aplicatie e securizat, chiar daca in browser apare “HTTP” si Chrome arata ca “Not safe”.

Tailscale merge pe Windows, Linux, Mac, Android si iOS.

2 Likes