вторник, 12 февраля 2008 г.

Настройка SSL аутентификации в Tomcat

Создание центра сертификации:
Создаем сертификат и подписываем его
/usr/lib/ssl/misc/CA.pl
#CA -newca ... will setup the right stuff
# CA -newreq[-nodes] ... will generate a certificate request
# CA -sign ... will sign the generated request and output

меняем
dir = /usr/lib/ssl/misc/demoCA
в /usr/lib/ssl/openssl.cnf


После этого необходимо создать две пары ключей (для сервера и клиента) и подписать их сертификаты нашим CA.
1. (сервер)
openssl req -nodes -new -x509 -keyout server.pem -out server.pem -days 365
openssl x509 -x509toreq -in server.pem -signkey server.pem -out tmp.pem
openssl ca -out servercert.pem -infiles tmp.pem
CN в сертификате должен соответствовать имени хоста на для которого предназначен данный сертификат

После этого создаем кейсторе с приватным ключом и подписанным сертификатом
openssl pkcs12 -export -in servercert.pem -inkey server.pem -out server.p12 -name "tomcat"


Затем имортируем cacert (паблик сертификат CA) в %JAVA_HOME%/jre/lib/security/cacerts
keytool -import -keystore cacerts -alias "our ca" -file cacert.pem
пароль по умолчанию на cacert - changeit
Если не импортируется, удалить из сертификата все кроме самого сертификата(т.е. оставить только —Begin-- .... --END--)

Без этого шага томкат не сможет найти даверенного CA и при установление соединения в эксплорере появится пустой список сертификатов.

Теперь настраиваем наш connector

<Connector port="8443" scheme="https" sslProtocol="TLS" secure="true"
disableUploadTimeout="true" acceptCount="100" allowTrace="true"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75">
<Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"
keystorePass="password"
keystoreFile="conf\server.p12" clientAuth="true"/>
</Connector>

2. (клиент, аналогично серверу)
openssl req -nodes -new -x509 -keyout client.pem -out client.pem -days 365
openssl x509 -x509toreq -in client.pem -signkey client.pem -out tmp.pem
openssl ca -out clientcert.pem -infiles tmp.pem
openssl pkcs12 -export -in clientcert.pem -inkey client.pem -out client.p12 -name "client"


Затем имортируем cacert (паблик сертификат CA) в наш браузер в качестве доверенного CA(и выбираем всюду - доверять) и client.p12 в в качестве личного сертификата.

Все. Пускаем томкат, пускаем браузер и стучимся по https.