Repository 32bit  Forum
Repository 64bit  Wiki

Strong Authentication

Da Slacky.eu.
Versione delle 10:56, 29 ago 2006, autore: L1q1d (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Indice

Obiettivo:

Si vuole proteggere una pagina / webapp in tomcat con un autenticazione forte, in maniera cioe' che il server permetta l'accesso solo ad un client che si presenti con un certificato ritenuto valido.

Creare una CA (Certificate Authority) locale

Utilizzo a scopo commerciale

In un caso di utilizzo a scopo commerciale il nostro certificato andrebbe firmato da una CA reale come VeriSign o altre, a scopo sia di studio che di utilizzo in una Intranet privata creeremo invece un CA locale. Per questo c'e un makefile pronto, l'unico passo obbligatorio e' modificare il file openssl.conf per adattarlo alle proprie necessita', specificando i parametri obbligatori “commonName”, ”organizationName”, “countryName”, “stateOrProvinceName” e se si vuole i facoltativi “organizationalUnitName” ed “emailAddress”, dopodiche' nella directory dove c'e il makefile:

$> make init

Nella directory viene creata la struttura necessaria alla CA locale, in particolare il file ca-key.pem sara' il certificato principale della CA.

Lato Server

Creare un Java Keystore ( .jks) lato server, al suo interno un alias per il server con una coppia di chiavi RSA: n.b. $SERVER e' la variabile a cui sostituire il nome server

$> keytool -genkey -alias $SERVER -keyalg RSA -keystore $SERVER.jks -validity 365

Generare una Certificate Signing Request (.csr) per le chiavi server:

$> keytool -certreq -keyalg RSA -alias $SERVER -file $SERVER.csr -keystore $SERVER.jks

Firmare la richiesta generando un Certificato (.cert)

$> make sign

Convertire il Certificato in un formato adatto al keystore dove andra' importato

$> openssl x509 -in $SERVER.cert -out $SERVER-der.cer -outform DER
n.b. L'out ha estensione .cer e non .cert per windows

Completare il primo Keystore importando al suo interno due certificati: prima quello della CA per ragioni di dipendenza tra i due e poi quello server:

$> keytool -import -alias root -keystore $SERVER.jks -trustcacerts -file ca-cert.pem
$> keytool -import -alias $SERVER -file $SERVER-der.cer -keystore $SERVER.jks

Creare un Keystore CA , che conterra' solo certificati ma di entrambe le parti

$> keytool -import -alias ca-cert -keystore cacerts.jks -file ca-cert.pem -trustcacerts

Lato Client

Generare le chiavi RSA del client

$> openssl genrsa -des3 -out $CLIENT.key 1024

Generare la richiesta CSR per il client

$> openssl req -key $CLIENT.key -new -out $CLIENTE.csr

Firmare la richiesta ed ottenere un Certificato (.cer) client

$> make sign

Combinare Chiavi (.key) e Certificato (.cer) in un unico package PKCS12 (.pfx)

$> openssl pkcs12 -export -inkey $CLIENT.key -in $CLIENT.cer -out
$CLIENT.pfx

Installazione e Configurazione

La procedura eseguita fino a qui rilascia 3 file rilevanti: i due Java Keystore $SERVER.jks e cacerts.jks e un file $CLIENT.pfx.

Lato Server

Copiare i due Keystore sotto la dir /conf di Tomcat Editare il file server.xml sotto la dir /conf di Tomcat, e modificare la sezione relativa ai connettori Ssl da cosi:

<Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>

a cosi:

<Connector port="443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="conf\$SERVER.jks" keystorePass="changeit"
truststoreFile="conf\cacerts.jks" truststorePass="changeit"/>

modificando quindi: • La porta, da 8443 a 443, che e' la porta di default per https • La variabile “clientAuth” da “false” a “true” • Aggiungendo le due righe relative ai Keystore Jks

Lato Client

Importare il file $CLIENT.pfx nel browser

Autore: Federico Pallante mailto:vaquerito@slacky.it

Strumenti personali
Namespace

Varianti