Aggiungere https alla mia applicazione locale usando un certificato gratuito

di il
23 risposte

Aggiungere https alla mia applicazione locale usando un certificato gratuito

Sto valutando di implementare queste 2 guide nella mia WebApp perché voglio realizzare un’applicazione che utilizzi una connessione https:
https://o7planning.org/11867/configure-spring-boot-to-redirect-http-to-https
https://o7planning.org/12885/install-a-free-lets-encrypt-ssl-certificate-for-spring-boot
L’obiettivo è non vedere l’avviso “Non sicuro” visualizzato dal browser quando il client naviga tra le pagine dell’applicazione.
Lo scopo di questo post non è un aiuto ad implementare queste 2 pagine che per la verità non ho ancora letto nulla ma capire cosa significa usare https e non http.
Vi pregherei di non usare parole complesse o troppo tecniche (non sono un informatico con la i maiuscola) in modo che possa capire la filosofia che sta dietro questo https.
1) Una cosa che non capisco è perché devo passare attraverso un sito esterno alla mia WebApp (www.sslforfree.co) per ottenere https.
2) Altra cosa che non capisco è cosa fa fisicamente sslforfree quando i vari client navigano sulla mia applicazione. Non capisco neppure cosa fanno fisicamente questi file prodotti dal sito (criptano password, uova al padellino, ecc…).
3) Se ho capito bene, guardando rapidamente la guida, dovrò aggiungere alla mia applicazione 2 serie di file, la prima serie per localhost (sviluppo) e la seconda per www . nomedelmioprimodominio . com (sviluppo). L’operazione è fattibile anche per localhost (il mio pc) oppure serve assolutamente un dominio reale (un server vero) se decido di usare questa guida?
4) Posso usare in locale i file prodotti sul sito www . sslforfree . com usando come nome a dominio il link www . nomedelmioprimodominio . com, un nome di fantasia oppure esattamente localhost altrimenti l'ide non produce un .war visibile localmente nel browser?
5) Nella prima parte della guida leggo:
“2- Redirect HTTP to HTTPS (Way 2)
The main purpose of configuring Spring Boot for it to support both HTTP and HTTPS protocols is to entitle the application to receive incoming requests via HTTP and automatically redirect them to HTTPS.”
“3- Redirect HTTP to HTTPS (Way 3)
In some cases you want Spring Boot to support both HTTP and HTTPS protocols, and only automatically redirect from HTTP to HTTPS with the specified paths. It is absolutely doable with Interceptor.”
Non riesco a capire bene la differenza tra questi 2 approcci. Ritenete meglio il 2 oppure il 3? Se vado su http://www.google.co vengo reindirizzato su https://www.google.co, io pensavo di fare una cosa simile.
Per la verità pensavo di realizzare un pannello di controllo in cui l'utente principale del sito sceglie il tipo di connessione da utilizzare.
6) L’https serve a mascherare le password che client e server si scambiano oppure ha anche altri scopi?
7) Quando acquisterò un server dovrò configurare tomcat o linux in modo opportuno per l'https oppure è una problematica/scelta esclusivamente del programmatore?
8) C'è altro da sapere in merito a questo https?
trovo questo argomento complicatissimo...

23 Risposte

  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Compra un certificato SSL e installalo sul tuo server. Finito.

    Ogni volta che scade, in genere ogni anno, lo rinnovo.
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Per sapere qualcosa in più di Https leggi qua https://it.wikipedia.org/wiki/HTTP
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Versione breve: usa Let’s Encrypt

    iBaffiPro ha scritto:


    Sto valutando di implementare (...) capire cosa significa usare https e non http.
    1) Una cosa che non capisco è perché devo passare attraverso un sito esterno alla mia WebApp (www.sslforfree.co) per ottenere https.
    Non devi
    2) Altra cosa che non capisco è cosa fa fisicamente sslforfree quando i vari client navigano sulla mia applicazione. Non capisco neppure cosa fanno fisicamente questi file prodotti dal sito (criptano password, uova al padellino, ecc…).
    Non ti interessa, non usarli
    ... L’operazione è fattibile anche per localhost (il mio pc) oppure serve assolutamente un dominio reale (un server vero) ...
    No, non ti serve.
    Basta che manipoli il file hosts (windows? Linux? unix?)
    4) Posso usare in locale i file prodotti sul...
    Non devi usarli
    5) Nella prima parte della guida leggo:
    ...
    Non riesco a capire bene la differenza tra questi 2 approcci.
    Nessuno dei due
    Se vado su http://www.google.co vengo reindirizzato su https://www.google.co, io pensavo di fare una cosa simile
    E fai bene, è facile da fare con Apache o Nginx
    Per la verità pensavo di realizzare un pannello di controllo in cui l'utente principale del sito sceglie il tipo di connessione da utilizzare.
    ??? Non si fa mai
    6) L’https serve a mascherare le password che client e server si scambiano oppure ha anche altri scopi?
    Serve a "mascherare" il traffico tra client e server, comprese le password.
    Ha senso se e solo se si utilizzano reti non sicure.
    Esempio: tu, da casa tua, usi il tuo wi fi e il tuo router e metti le password in chiaro del tuo homebanking.
    Non c'è problema, il livello di sicurezza è ottimo
    Esempio2: ti connetti col tuo telefonino al wifi mio o del comune o di un'azienda o della metro o di un albergo...
    Il traffico può essere facilmente intercettato da un malevolo, e se la tua password è in chiaro la vedrà
    7) Quando acquisterò un server dovrò configurare tomcat o linux in modo opportuno per l'https oppure è una problematica/scelta esclusivamente del programmatore?
    In realtà dovrai configurare il server http, che normalmente sarà Apache o Nginx o alla peggio ISS (ce ne sono anche altri, non molto diffusi in realtà)
    C'è altro da sapere in merito a questo https?
    trovo questo argomento complicatissimo...
    C'è tantissimo, diciamo 2 corsi universitari per un 6 mesi grosso modo di studio

    Però la versione breve è sempre quella: usa Let's Encrypt (se non vuoi pagare).
    Se vuoi pagare (una trentina di euro all'anno) fai un certificato stella "dimmerda" e vivi felice
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Piccola aggiunta: siccome il certificato è un elemento delicatissimo (chi lo possiede può intercettare tutto il tuo traffico e decriptarlo, in realtà non è facile blablabla -cuttone) va acquistato, o "affittato", da organizzazioni sicure, ecco perchè consiglio EFF, difficilmente "affiliata" a qualche "guardone"

    Essenzialmente, sempre alla stragrossissima, tutto si basa su un paio di file di testo (in realtà possono essere 3 o più, ma ha chiesto la versione banale) reperiti i quali vanno "impostati" dentro il server .
    Questo si fa, normalmente, modificandone i file di configurazione (del browser, o meglio nel server che poi andrà a "colloquiare" col browser. i file di configurazione possono essere anche molto lunghi e articolati [apache] o corti ma incomprensibili [nginx]) scrivendo delle righe del tipo
    "usa il certificato preso dal file pippone.crt", "usa il certificato preso dal file plutone.crt" e così via per w ww.ilmiobelsito.com
    Qualche altra cosa del tipo "abilita SSL", "apri la porta 443" e poco altro.

    A quel punto se da remoto vai sul sito
    
    http ://www.ilmiobelsito.com
    
    NON si attiverà il meccanismo SSL, perchè verrà richiesta la pagina sulla porta 80 in "normale" http (non criptato).
    Se vai invece su
    
    https ://www.ilmiobelsito.com
    
    "partirà" la modalità SSL.


    Come si fa a fare in modo che scrivendo "http ://" si finisca su "https ://", in modo da forzare l'uso sempre di SSL?

    Ci sono tanti modi, versione "banale" è quella - sempre nella configurazione del server - di mettere qualcosa del tipo
    qualsiasi richiesta che arriva e che inizia per http://ilrest la trasformi in https://ilrest
    Questo è un approccio (diciamo stile Nginx)

    Oppure
    qualsiasi richiesta che arriva da http://ilrest rispondi che la pagina è spostata su https://ilrest. Il browser riceve questa risposta, capisce che la pagina è spostata, rifà la richiesta su https://ilrest e parte il circo

    Questo è un approccio diciamo così all'Apache
    - cuttone sui motivi storici, i perchè i percome, cosa cambia, qual'è meglio etc -
    Ce ne sono anche altri, che però non scrivo
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Nota: se il messaggio sopra sembra scrito da un dislessico è perchè questo forum s'incazza di brutto quando si mettono dei link, massimo 5, o qualcosa del genere.
    spero si capisca lo stesso
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    oregon ha scritto:


    Compra un certificato SSL e installalo sul tuo server. Finito.

    Ogni volta che scade, in genere ogni anno, lo rinnovo.
    Sembra che esistano dei certificati gratuiti:
    https://letsencrypt.org
    usati da aziende famose. Per il mio sito l’https non serve a nulla. L’unica cosa utile è evitare che il client legga “non sicuro” nel browser. In buona sostanza l’https, nel mio caso, ha solo scopo di marketing. Inoltre, l’https non è sinonimo di sicurezza, se la mia webapp è fatta male, non sono un alto esperto di informatica, posso essere distrutto con estrema semplicità.
    Può avere senso l’acquisto di un certificato di prestigio solo in un secondo momento quando ricevo visite e passo dal classico hosting o VPS ad un server vero e proprio. Inizialmente bisogna sempre cercare di limitare le spese.
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    gian82 ha scritto:


    Per sapere qualcosa in più di Https leggi qua https://it.wikipedia.org/wiki/HTTP
    Ho letto la pagina di Wikipedia ma non tutta perché da un certo punto in avanti si mette a parlare di Tor e a me interessa molto poco il discorso legato a questo browser.
    Non riesco a capire a cosa serve l’ente certificatore e cosa facciano di preciso questi certificati che devono essere periodicamente aggiornati.
    Faccio un esempio molto stupido e limitativo:
    Se il client invia “ciao” al server con http il server riceve “ciao” mentre con https il server riceve “cKiKaKo”.
    Il certificato ha il compito di definire il metodo di offuscamento del messaggio (es.: “cKiKaKo” al posto di “c8i8a8o”)?
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Copme ti ha detto +m2+ Https://letsencrypt.org fornisce un certificato gratuito ma della durata di 90 giorni ,poi bisogna rifarlo , vai sul sito se vuoi informazioni più dettagliate,
    dai un occhio anche qua https://www.register.it/assistenza/guida-lets-encrypt
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    +m2+ ha scritto:


    Piccola aggiunta: siccome il certificato è un elemento delicatissimo (chi lo possiede può intercettare tutto il tuo traffico e decriptarlo, in realtà non è facile blablabla -cuttone) va acquistato, o "affittato", da organizzazioni sicure, ecco perchè consiglio EFF, difficilmente "affiliata" a qualche "guardone"

    Essenzialmente, sempre alla stragrossissima, tutto si basa su un paio di file di testo (in realtà possono essere 3 o più, ma ha chiesto la versione banale) reperiti i quali vanno "impostati" dentro il server .
    Questo si fa, normalmente, modificandone i file di configurazione (del browser, o meglio nel server che poi andrà a "colloquiare" col browser. i file di configurazione possono essere anche molto lunghi e articolati [apache] o corti ma incomprensibili [nginx]) scrivendo delle righe del tipo
    "usa il certificato preso dal file pippone.crt", "usa il certificato preso dal file plutone.crt" e così via per w ww.ilmiobelsito.com
    Qualche altra cosa del tipo "abilita SSL", "apri la porta 443" e poco altro.

    A quel punto se da remoto vai sul sito
    
    http ://www.ilmiobelsito.com
    
    NON si attiverà il meccanismo SSL, perchè verrà richiesta la pagina sulla porta 80 in "normale" http (non criptato).
    Se vai invece su
    
    https ://www.ilmiobelsito.com
    
    "partirà" la modalità SSL.


    Come si fa a fare in modo che scrivendo "http ://" si finisca su "https ://", in modo da forzare l'uso sempre di SSL?

    Ci sono tanti modi, versione "banale" è quella - sempre nella configurazione del server - di mettere qualcosa del tipo
    qualsiasi richiesta che arriva e che inizia per http://ilrest la trasformi in https://ilrest
    Questo è un approccio (diciamo stile Nginx)

    Oppure
    qualsiasi richiesta che arriva da http://ilrest rispondi che la pagina è spostata su https://ilrest. Il browser riceve questa risposta, capisce che la pagina è spostata, rifà la richiesta su https://ilrest e parte il circo

    Questo è un approccio diciamo così all'Apache
    - cuttone sui motivi storici, i perchè i percome, cosa cambia, qual'è meglio etc -
    Ce ne sono anche altri, che però non scrivo
    Grazie mille per i tuoi commenti. Quindi i certificati contengono la regola per decriptare i messaggi all’interno della rete, giusto? Mi serve che tu mi conferma questo fatto? Se uso letsencrypt, il mio “ciao” diventa “cAiAaAoA”, se ne uso un altro la stringa diventa “ciDDDao”, se uso un certificato a pagamento trasformo il messaggio in qualcosa di molto più complesso da decriptare “cb23d32ou434cdoc345dsu. Detto in altro modo i certificati sono il cuore del https e contengono il nome “dell’esperto” che lo ha prodotto, in modo che il brower possa scrivere "la connessione è sicura" è più o meno corretto?
    Il mio obiettivo è far fare alla webapp il reindirizzamento verso https e non dare al server questo compito anche se forse è più complesso. Questo perché se cambio server, hosting, ecc… mi devo preoccupare di questo passaggio o il sistemista lo deve fare per me. A mio avviso è meglio inglobare tutto (reindirizzamento + certificati) nel file .war e non delegare il compito al server. Sul server devo fare meno possibile anche perché sono un sistemista molto inesperto.
    Andare a cambiare i certificati SSL ogni 90 giorni è improponibile, devo trovare assolutamente una soluzione. Questa soluzione deve esistere perché alcuni hosting provider offrono letsencrypt e parlano di un rinnovo automatico. Caricare il .war via ftp con dentro i certificati ogni 90 giorni è improponibile.
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Qua i client: https://letsencrypt.org/docs/client-options
    sicuramente alcuni hanno già la possibilità di eseguire in modo temporizzato il rinnovo del certificato ad esempio https://www.win-acme.com/manual/automatic-renewa
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    A cosa servono questi 2 link?
    Io sto facendo un'applicazione in Spring Boot.
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    iBaffiPro ha scritto:


    Quindi i certificati contengono la regola per decriptare i messaggi all’interno della rete, giusto?
    No, diciamo la "password" per farlo
    Se uso letsencrypt, il mio “ciao” diventa “cAiAaAoA”, se ne uso un altro la stringa diventa “ciDDDao”, se uso un certificato a pagamento trasformo il messaggio in qualcosa di molto più complesso da decriptare “cb23d32ou434cdoc345dsu.
    Assolutamente NO.

    Qui lo spiegone sarebbe molto lungo, diciamo (entro in modalità per ingegneri e forummisti) che c'è una password divisa in due tronconi.
    Una la tiene il server, una la tiene il client.
    Qualsiasi dato (in realtà no ma abbiamo detto siamo in modalità forum) viene criptato tra client e server mediante la "combinazione" delle due semichiavi (ovviamente NON è così)

    Essenzialmente, alla grossissima, l'autenticazione del server (cioè il fatto che l'IP 1.2.3.4 corrisponda a www.ilmiobelsito.co) avviene con una "catena di trust".

    In pratica esistone dei "supercertificati" (fisicamente sono file da qualche KB) che sono INGLOBATI fisicamente nel codice eseguibile dei browser, non sono esterni, sono proprio hardcoded.

    Quando un browser interroga un sito, il sito spedirà il suo (suo del sito) certificato.
    Questo sarà composto, tipicamente, da una serie di certificati "concatenati" da varie organizzazioni, le quali a loro volta hanno dei certificati, via via fino a uno di quelli "supercertificati".

    Chiaro?

    Vabbè diciamo (in analogia) che tu conosca la firma autografa di Tizio. La conosci perchè ne hai una fotocopia.

    Vedi un documento firmato da Stefano e ti chiedi, ma sarà vero?

    Stefano mette la sua firma su un foglio su cui c'è la firma di Andrea che dice "la firma di Stefano è vera".
    Ma chi è Andrea?
    Andrea ha un foglio su cui c'è scritto "la firma di Andrea è vera", ed è firmata da Tizio.

    Dunque tu vedrai una sorta di "catena" in cui Tizio dice che Andrea è affidabile, Andrea dice che Stefano è affidabile, e siccome tu ritieni che Tizio si affidabile, concludi che Stefano lo sia


    Vabbè dopo una cosa del genere si riprendono indietro la laurea e le danno fuoco in pubblica piazza


    Il mio obiettivo è far fare alla webapp il reindirizzamento verso https e non dare al server questo compito anche se forse è più complesso.
    Non ha il minimo senso
    Questo perché se cambio server, hosting, ecc… mi devo preoccupare di questo passaggio o il sistemista lo deve fare per me.
    La seconda
    A mio avviso è meglio inglobare tutto (reindirizzamento + certificati) nel file .war e non delegare il compito al server.
    Dire di no
    Sul server devo fare meno possibile anche perché sono un sistemista molto inesperto.
    Si era intuito
    Andare a cambiare i certificati SSL ogni 90 giorni è improponibile, devo trovare assolutamente una soluzione. Questa soluzione deve esistere perché alcuni hosting provider offrono letsencrypt e parlano di un rinnovo automatico. Caricare il .war via ftp con dentro i certificati ogni 90 giorni è improponibile.
    1) si usano crontab (operazioni pianificate) fa da solo, non devi fare nulla
    2) se sei "timido" comprane uno per una trentina di euro\anno (a memoria)
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    iBaffiPro ha scritto:


    A cosa servono questi 2 link?
    Io sto facendo un'applicazione in Spring Boot.
    Applicazione non significa nulla, potresti farla funzionare anche su socket.
    Magari un server email etc.

    Se ipotizziamo, come del tutto ragionevole, trattarsi di un programma fruibile da browser, farsi le "seghe mentali" che ti stai facendo non è proprio il caso.
    Il certificato (in realtà I, minimo due) si installano (configurano) nel server HTTP che "servirà" le tue pagine java ai client browser, nel modo che ho sopra tratteggiato
  • Re: Aggiungere https alla mia applicazione locale usando un certificato gratuito

    Faccio una piccola aggiunta: perchè tutta questa manfrina?
    Perchè tu potresti benissimo usare un certificato autofirmato (bastano pochi secondi) installandolo.
    Dunque avresti il certificato firmato da iBaffiPro.

    Ma chi ti conosce? Come fa uno a fidarsi?
    Non può

    Serve una "catena" che, partendo dal certificato finale, risalga via via verso un "superente" che sia ritenuto affidabile
    Se ti chiedi, così per dire, perchè i vecchissimi Internet Explorer non riescano a navigare sui siti moderni (Internet Explorer di Windows XP originale, per capirci), è proprio per questo motivo.
    Dentro il codice eseguibile di questi IE NON c'è un certificato di un "superente" affidabile odierno, dunque tutti i siti risultano firmati da non si sa chi.
Devi accedere o registrarti per scrivere nel forum
23 risposte