Martin Bednář wrote:
Pouzivate nekdo klientske certifikaty v tomcatu ?
Snazil jsem se najit neco na internetu, ale nejak jsem neuspel.

Jsem schopen dostat tomcata do stavu kdy mi funguje pres https s clientAuth="false", postupoval jsem podle howto na jakarta.apache.org . Nejak ale nechapu co vsechno musim udelat abych mohl pouzivat klientske certifikaty, clientAuth="true". Zkousel jsem pomoci openssl zalozit vlastni CA s touto CA vygenerovat servrovy a klientsky certifikat, do keystoru pro tomcat jsem nahral ca, server a klient certifikat. Do browseru nainstaloval CA a klientsky certifikat, ale jeste zjevne neco delam blbe. Respektive nechapu na zaklade ceho tomcat povoluje pristup k danemu serveru, to ze je server i klientsky certifikat podepsany stejnou autoritou je trochu malo ne ? Predpokladam ze potrebuju ten klientsky certifikat podepsat tim servrovym - jak ?

Podepsat klientsky certifikat tim serverom nemusite a nemuzete,
drzitel serverove certifikatu neni certifikacni autorita, nemuze
nikoho podepisovat, a v serverovem certifikatu je priznak, ktery
to znemoznuje.

Pokud mohu doporucit, pro autentizaci klientskym certifikatem je lepsi
dat pred TomCat jeste Apache s mod_ssl a mod_jk, protoze v Apachovi
muzete veci kolem SSL nastavovat velice jemne a pekne.
Pokud si pamatuji, tak v TomCatu samotnem musite
pro serverovy certifikat pouzit alias "tomcat"
a heslo "changeit", coz je dost des a hruza.
A ze zbezneho pohedu do dokumentace mam pocit,
ze vyber akceptovatelnych klientskych certifikatu
pak musite delat az aplikacni urovni.

Treba ja to mam v Apachovi nastavene takto:

<IfDefine SSL>
LoadModule ssl_module         libexec/libssl.so
</IfDefine>

...
<IfModule mod_ssl.c>
   SSLPassPhraseDialog  builtin
   SSLSessionCache        shm:/var/tmp/ssl_scache-1.3.33(512000)
   SSLSessionCacheTimeout  300
   SSLMutex  sem
   SSLRandomSeed connect builtin
   SSLRandomSeed startup file:/dev/urandom 512
   SSLCACertificatePath /etc/grid-security/certificates
</IfModule>
...
<VirtualHost _default_:443>
...
   SSLEngine on
   SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
   SSLCertificateFile /etc/httpd/ssl/metacert.pem
   SSLCertificateKeyFile /etc/httpd/ssl/metakey.pem
   SSLCertificateChainFile /etc/httpd/ssl/cesnetnewca.pem
   JkMount /osobni/* t5
   <Location "/osobni/chranene_klientskym_certifikatem/*">
        SSLRequireSSL
        SSLVerifyClient require
        SSLOptions +ExportCertData +StdEnvVars
   </Location>
   JkEnvVar SSL_CLIENT_S_DN "-"
</VirtualHost>

Tohle nastaveni zpusobuje, ze server predklada svuj certifikat
spolecne s retezem certifikatu CA, ktere ho overily,
specifikovanym direktivou SSLCertificateChainFile.

Naproti tomu direktiva SSLCACertificatePath specifikuje adresar
s certifikaty certifikacnich autorit, ktere jsou povolene
pro podepsani *klientskych* certifikatu. Vsimnete si,
ze server muze byt podepsan autoritou, kterou neakceptuje
pro klientske certifikaty.

Vsechny pozadavky zacinajici /osobni jsou pres mod_jk poslany
na TomCat dohromady s klientskym certifikatem, a ten se
da na v servletu ziskat jako atribut requestu
jmenem "javax.servlet.request.X509Certificate"
a muzu si s nim na aplikacni urovni delat, co chci.

Abych to mel jednodussi, pomoci JkEnvVar SSL_CLIENT_S_DN
si posilam i Distinguished Name z certifikatu, tak jak ho vidi Apache,
ziskam ho opet jako atribut requestu jmenem "SSL_CLIENT_S_DN".
Totez sice muzu teoreticky vytahnout primo z certifikatu,
ale kdyz to zkusite, tak zjistite, ze DN neni retezec, ale struktura,
kterou lze do retezce prevest vice zpusoby.

A kdybyste chtel delat omezeni certifikatu primo na strane Apache, tak existuje direktiva SSLRequire, kterou muzete zadat libovolne slozite
pravdivostni vyrazy pro specifikaci akceptovatelnych certifikatu, napr.:

 SSLRequire %{SSL_CLIENT_S_DN} in \
      { "/O=CESNET/O=Masaryk University/CN=Martin Kuba", \
        "/DC=cz/DC=cesnet-ca/O=Masaryk University/CN=Martin Kuba" \
      }

vyjmenovava vsechny povolene, ale muzete treba rict
   %{SSL_CLIENT_S_O} == "CESNET"

a pusti to jenom certifikaty, ktere zacinaji /O=CESNET.
Vice viz dokumentace s mod_ssl.

Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem