2013-10-07 20 views
5

NOTA: se si desidera visualizzare il comportamento di questa app dimostrativa, visitare www.collaborativepowernowinternational.us. Qui, seleziona testssl.PersonController e puoi creare una persona. Quindi vai e modifica la persona, dove è designato il canale SSL, che darà un ciclo di reindirizzamento.molo 9: impostazione SSL/https di base

Sembra che con Jetty 9 altri elementi di configurazione siano entrati nel file start.ini, ho la versione 9.05.

Al fine di testare le più elementari SSL/HTTPS, sto decommentando le seguenti righe in start.ini:

#=========================================================== 
# SSL Context 
# Create the keystore and trust store for use by 
# HTTPS and SPDY 
#----------------------------------------------------------- 
jetty.keystore=etc/keystore 
jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 
jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g 
jetty.truststore=etc/keystore 
jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4 
jetty.secure.port=8443 
etc/jetty-ssl.xml 

#=========================================================== 
# HTTPS Connector 
# Must be used with jetty-ssl.xml 
#----------------------------------------------------------- 
jetty.https.port=8443 
etc/jetty-https.xml 

Nessun altro cambiamento di configurazione Jetty. Poi ho creato l'app di Grails più elementare (ha una classe Person) in cui ho impostato alcune azioni del controller da proteggere, il che funziona bene sulla mia macchina di sviluppo utilizzando una versione di Jetty incorporata più vecchia (che include Grails). Questo viene fatto semplicemente inserendo la primavera-security-core e quindi aggiungendo le seguenti righe in un file di configurazione:

grails.plugins.springsecurity.secureChannel.definition = [ 
    '/person/list': 'REQUIRES_INSECURE_CHANNEL', 
    '/person/delete/**': 'REQUIRES_SECURE_CHANNEL', 
    '/person/edit/**': 'REQUIRES_SECURE_CHANNEL', 
    '/person/show': 'REQUIRES_INSECURE_CHANNEL' 
] 

grails.plugins.springsecurity.portMapper.httpPort=80 
grails.plugins.springsecurity.portMapper.httpsPort=443 

Quando accedo l'azione persona/modificare ottengo un loop di reindirizzamento nel browser (utilizzando file WAR distribuito al Jetty 9 su una macchina dedicata CentOs 6). Questo sta usando il keystore fornito con Jetty 9, semplicemente decommentando le righe in start.ini per usarlo.

La pagina di configurazione principale di Jetty SSL che sto leggendo è here. Ciò che non mi è chiaro è, è sufficiente aggiornare il file start.ini? Se no, come esattamente si fa a aggiungere le linee in molo-https.xml descritti in questo link precedente, vale a dire le linee:

<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory"> 
    <Set name="KeyStorePath"><Property name="jetty.home" default="." />/etc/keystore</Set> 
    <Set name="KeyStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set> 
    <Set name="KeyManagerPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set> 
    <Set name="TrustStorePath"><Property name="jetty.home" default="." />/etc/keystore</Set> 
    <Set name="TrustStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set> 
</New> 

Non sono sicuro su come aggiungerli, ma sembrano anche un duplicato della partenza. righe di file ini sopra.

Potete aiutarmi per favore ad aiutarmi a far funzionare il Jetty SSL più semplice? Grazie mille.


Se non hanno familiarità con Grails, si può semplicemente scaricare il programma, quindi creare una classe di dominio - v'è un'opzione di riga di comando per questo. Dagli quindi i campi String firstName, String lastName. Poi ci sono i comandi per generare un controller e le visualizzazioni per esso - questo è tutto completamente automatico. Quindi si aggiunge il plugin, spring-security-core. Nel capitolo 16/17 di questo documento e come ho mostrato, quando elenca quali azioni del controllore sono sicure, come persona/modifica.

risposta

4

In questo caso è sufficiente che solo la porzione di Jetty funzioni utilizzando il keystore di prova di default fornito nella distribuzione Jetty 9.0.6.

Semplicemente il blurb di cui sopra è sufficiente per far funzionare SSL all'interno di Jetty. Ho scaricato la distribuzione 9.0.6 e ho scommentato quelle righe e funziona. Bene, ho dovuto andare nel file start.d/demo.ini e rimuovere le ultime due righe con etc/jetty-ssl.xml ed etc/jetty-https.xml perché sarebbero stati eseguiti due volte ... ma sto divagando .

Se si avvia il molo, è possibile passare a https://localhost:8443 e si lamenterà di essere un certificato non attendibile e quindi caricare la pagina di distribuzione del molo.

Sulla base di ciò direi che è probabile che si tratti di una sorta di problema di configurazione di Grails che purtroppo non conosco la risposta, scusa.

+0

Grazie! Si scopre che Grails consente di specificare canali sicuri che funzionano "sul desktop" con una versione di Jetty più vecchia tramite plugin, ma non funziona nelle nuove versioni di Jetty (che sto distribuendo anch'io). Quel problema in combinazione con il flusso di come attivare SSL e specificare i certificati tra il molo 9.05/9.06 (tramite start.ini) e la versione più recente di Jetty 9.10 mi ha buttato fuori - non riuscivo a far funzionare nulla. – Ray

+0

Grazie per aver chiarito la versione corretta da utilizzare, ad esempio 9.06, poiché il meccanismo di configurazione per 9.10 è finalizzato e la documentazione associata viene aggiornata. – Ray

0

Molo di partenza 9.1, le cose sono cambiate e devi seguire le istruzioni in here affinché le cose sembrino corrette, secondo gli sviluppatori di Jetty. Inoltre, non si dovrebbe cambiare/cancellare/modificare nulla nelle directory di ${jetty.home}. Ecco cosa dovete fare per uno SSL basato certificato autofirmato/HTTPS sul molo 9.1+:

(a) impostare la variabile d'ambiente $JETTY_HOME per puntare a dove avete installato il pontile di catrame bundle, dicono /opt/jetty/.

(b) Creare una nuova directory, /tmp/myJettyApp, puntarla su $JETTY_BASE nel proprio ambiente.

(c) cd a $JETTY_BASE

(d) Seguire le istruzioni in here:

/home/sonny $ cd $JETTY_BASE 
/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar --add-to-startd=https,http2 

(e) Impostare la porta se vuoi:

/home/sonny $ cd $JETTY_BASE; 
/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar jetty.ssl.port=8444 

(f) E ora, esegui molo:

/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar 

vedrete che HTTPS è in esecuzione sulla porta 8444. Ora, se si vuole fare pontile ascoltare la porta HTTPS tradizionale, è necessario utilizzare sudo per eseguire:

/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar jetty.ssl.port=443 
/tmp/myJettyApp/ $ sudo java -jar $JETTY_HOME/start.jar 

Si noti che questo fa già l'auto cerchiati a mano ecc. automagicamente.

Ora, se si desidera generare il proprio certificato autofirmato (ad esempio, poiché si desidera modificare il valore validity su un valore piccolo o grande arbitrario, in base alle proprie esigenze), seguire le istruzioni in here, generare un nuovo CERT autofirmato con keytool e quindi inserirlo in $JETTY_BASE/etc/ e modificare lo $JETTY_BASE/start.d/ssl.ini per jetty.sslContext.keyStorePassword e jetty.sslContext.keyManagerPassword rispettivamente. A proposito, per le ultime due password ssl.ini, è possibile utilizzare la password di testo in chiaro offuscata che è stata utilizzata quando è stato eseguito il keytool o utilizzare quelle in testo normale. Se si vuole offuscarli, eseguire {jetty.home} $ java -cp lib/jetty-util-9.3.6.v20151106.jar org.eclipse.jetty.util.security.Password "MyInterestingAndAwesomePassword"

Spero che questo aiuti qualcuno.

Problemi correlati