2016-02-19 22 views
6

Perl's Mojolicious supporta Server Name Identification (SNI), che alcuni server Web utilizzano per ospitare diversi siti con un certificato HTTPS. Sto lavorando su un sistema che non è impostato per usarlo, e googling un po 'non mostra nulla che rende il processo chiaro e le varie parti apparenti. La domanda StackOverflow Perl LWP GET or POST to an SNI SSL URL menziona alcune cose.Come si configura il supporto SNI per Mojolicious?

Quindi, cosa devo fare?

+0

Penso che la tua domanda dovrebbe chiarire se stai chiedendo informazioni sul supporto client per SNI (ad esempio l'invio del nome del server in ClientHello) o sul supporto del server, ovvero che un server Mojolicious multi-sito fornisce certificati diversi a seconda del sito del cliente richiesto. Mentre quest'ultimo può essere implementato con IO :: Socket :: SSL non sono sicuro che Mojolicious fornisca un modo per usarlo. –

+0

Le risposte per client e server sarebbero le migliori. –

risposta

6

In primo luogo, non è Mojolicious (o LWP o qualsiasi altra cosa) che supporti SNI. È IO::Socket::SSL, ma non proprio, perché è Net::SSLeay, ma non proprio perché è la tua versione di openssl.

  • Installare openssl 1.0 o successivo. Probabilmente vuoi usare l'opzione --prefix per configurarla per installarla in una nuova directory in modo da non disturbare ciò che hai già e da quale altra cosa dipende.
  • Aggiornamento Net::SSLeay per compilarlo contro il nuovo openssl. Hai bisogno della versione 1.50 o successiva. Il problema qui è che un successivo Net::SSLeay funzionerà felicemente con un vecchio openssl. L'aggiornamento del modulo non ti dà il nuovo openssl.
  • Aggiornamento IO::Socket::SSL a 1,56 o successivo. La prima versione è del 2012, quindi dovresti comunque aggiornarla.
  • Mojolicious 2.83 (rilasciato nel 2012, così vecchio) ha aggiunto il supporto SNI per i client e Mojolicious 6.40 (un mese fa) lo ha aggiunto per tutti i server web.

È possibile trovare queste informazioni, cercando nel file diModifiche per ogni modulo, ma mentre siamo qui, veniamo Net::SSLeay risolto con non è così semplice come l'installazione del modulo.

Alcune cose che devono prestare attenzione a:

  • è necessario compilare perl, OpenSSL, e Net::SSLeay con gli stessi strumenti in modo che siano compatibili a livello binario.

utilizzare la variabile OPENSSL_PREFIX raccontare cpan (e la roba si corre) dove trovare il giusto openssl.

$ export OPENSSL_PREFIX=/usr/local/ssl 
$ cpan Net::SSLeay IO::Socket::SSL 

Se hai già l'ultima Net::SSLeay ma compilato contro una vecchia versione di OpenSSL, è possibile forzare l'installazione del modulo di ricompilare esso anche se cpan pensa il suo up-to-date:

$ cpan -f Net::SSLeay IO::Socket::SSL 

IO::Socket::SSL ha metodi per controllare questo (aggiunti a 1.84):

$ /usr/local/ssl/bin/openssl version 
OpenSSL 1.0.1r 28 Jan 2016 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->VERSION' 
2.024 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->can_client_sni' 
1 
+0

IO :: Socket :: SSL da solo non può farlo. Ha bisogno di conoscere l'hostname che dovrebbe aggiungere all'handshake SSL. Se il nome è dato come PeerAddr, verrà utilizzato ma se viene fornito solo l'indirizzo IP o se viene aggiornato un socket TCP esistente, il nome deve essere fornito in modo esplicito con 'SSL_hostname'. Ed è ciò che Mojo :: IOLoop :: Client sta effettivamente facendo. –

+0

Non ho ancora finito con la risposta. Tuttavia, non sono preoccupato di come accade in realtà, solo quello che ho bisogno di installare e configurare perché accada. –

-1

Non è una risposta diretta alla domanda, ma un forse meglio così luzione.

Dalla mia esperienza come amministratore di hosting condiviso di ~ 400 domini, è più comodo configurare SSL in Apache e avere Mojolicious in esecuzione su mod_perl2.

Mettere troppa configurazione (di rete) nell'applicazione è sempre un problema a lungo termine. In molti casi anche le applicazioni multidominio possono diventare scomode.

La configurazione in Apache consente la gestione mediante script standard, ad es. rinnovo di certificati SSL da LetCrypt.

Naturalmente ci possono essere motivi validi e requisiti speciali per altre configurazioni che meritano il lavoro extra.

+0

Non sto cercando altre soluzioni o soluzioni alternative. –

+1

Thx per downvoting. –