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
--------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
