Использование КриптоПро JTLS в Apache Tomcat
Опубликовано on 2013-09-05 16:25

1) устанавливаем JVM

2) устанавливаем JCP (включая модули шифрования)

3) устанавливаем JTLS

4) снимаем экспортные ограничения

5) проверяем конфигурацию: ComLine/CheckConfFull (Samples.jar)

6) устанавливаем Tomcat


Односторонняя аутентификация

1. Настройки коннектора:

Connector port="8443" maxHttpHeaderSize="8192"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false"
algorithm="GostX509"
keystoreProvider="JCP"
sslProtocol="GostTLS"
keystoreType="HDImageStore"
keyalg="GOST3410"
sigalg="GOST3411withGOST3410EL"

keystoreFile="С:/store.store"
keystorePass="123"


Для последних версий Tomcat требуются дополнительно указать:

ciphers="TLS_CIPHER_2001"
sslEnabledProtocols="GostTLS"


2. настраиваем Tomcat под свою учетную запись
(Панель управления -> Администрирование -> Службы и приложения -> Службы -> Apache Tomcat свойства -> вход в систему: с учетной записью (указать имя и пароль)) или следуем инструкциям в руководстве.

3. Настраиваем логирование Tomcat. Переходим к редактированию файла "logging.properties", который находится в папке "conf" в составе Apache Tomcat (Пример: C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\conf\logging.properties).

1) Добовляем к перечисленным параметрам "handlers" строчку <5catalina.org.apache.juli.FileHandler>.
Теперь параметры "handlers" выглядят так:

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler, 5catalina.org.apache.juli.FileHandler

2) Затем, после перечисления всех параметров "1catalina.org.apache.juli.FileHandler.", "2localhost.org.apache.juli.FileHandler.", "3manager.org.apache.juli.FileHandler.", "4host-manager.org.apache.juli.FileHandler.", добавляем строки:
5catalina.org.apache.juli.FileHandler.level = ALL
5catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5catalina.org.apache.juli.FileHandler.prefix = cryptopro.


3) В конце файла добавляем строки:
ru.CryptoPro.JCP.tools.JCPLogger.level=INFO
ru.CryptoPro.JCP.tools.JCPLogger.handlers=5catalina.org.apache.juli.FileHandler

ru.CryptoPro.ssl.SSLLogger.level=ALL
ru.CryptoPro.ssl.SSLLogger.handlers=5catalina.org.apache.juli.FileHandler

Стоит обратить внимание, что есть возможность задать уровень логирования:
ALL - самый детальный уровень
FINE - средний уровень
INFO - наименее детальный уровень
В нашем примере мы используем уровень логирования ALL.

Все логи записываются в "<...>\Apache Software Foundation\Tomcat\logs".


4. Генерируем ключ (аутентификация сервера) с помощью контрольной панели JCP, там же сохраняем запрос в BASE64.
По сохраненному запросу получаем сертификат на http://www.cryptopro.ru/certsrv/ , там же получаем корневой сертификат
с помощью контрольной панели устанавливаем полученный сертификат в контейнер
(для того чтобы записать цепочку сертификатов можно воспользоваться ComLine.Certs)//цепочку можно и не записывать
устанавливаем на контейнер пароль "123"
с помощью контрольной панели создаем хранилище сертификатов C:/store.store и устанавливаем на него пароль "123"
(Важно, чтобы пароль на контейнер совпадал с паролем на хранилище)
в хранилище сертификатов записываем корневой сертификат

5. Далее необходимо настроить проверку цепочки сертификатов в Томкате.

Если на сервере нет доступа в сеть, то необходимо в контрольной панели "КриптоПро JCP" на вкладке "Настройки TLS" (JTLS Settings) снять галочки с пунктов "Проверять сертификаты цепочка на отзыв" (Check revocation status of the certificate chain) и "Загружать CRL по CRLDP сертификата" (Load CRL by CRLDP).

Если доступ в сеть на сервере есть, то необходимо открыть контрольную панель Apache Tomcat -> вкладка Java -> Java Options -> дописать в конец (после перечисления всех параметров) строчку:

-Dcom.sun.security.enableCRLDP=true

Если нет окна контрольной панели Apache Tomcat, необходимо внести изменения в конфиг-файлы Tomcat-а. Открываем для редактирования файл catalina.bat/catalina.sh, который находится в "<...>\Apache Software Foundation\Tomcat\conf\". В нём находим, где задаются параметры JAVA_OPTS и добавляем параметр:

-Dcom.sun.security.enableCRLDP=true

Либо задаем данный параметр сами:

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.security.enableCRLDP=true


6. Запускаем Tomcat проверяем соединение с односторонней аутентификацией:

a) с помощью "csptest" (в ОС семейства Unix/Linux - "csptestf"):

csptest -tlsc -port 8443 -v -file index.jsp -nocheck

CSP (Type:75) v3.6.4070 KC1 Release Ver:3.6.4956 OS:Windows CPU:IA32 FastCode:READY,DISABLED (CContextG28147EncryptECB; CContextG28147DecryptECB; CContextG28147EncryptCBC; CContextG28147DecryptCBC; CContextG28147G
D:\Program Files\Crypto Pro\CSP\csptest.exe -tlsc -port 8443 -v -file index.jsp -nocheck
ClientHello: RecordLayer: SSL, Len: 85
Cipher Suites: (81 00 00) (80 00 00) (32 00 00) (04 00 00) (05 00 00) (0a 00 00) (80 00 01) (c0 00 07) (80 00 03) (09 00 00) (40 00 06) (64 00 00) (62 00 00) (03 00 00) (06 00 00) (80 00 02) (80 00 04) (13 00 00) (12 00 00) (63 00 00)
87 bytes of handshake data sent
535 bytes of handshake data received
210 bytes of handshake data sent
6 bytes of handshake data received
25 bytes of handshake data received
Handshake was successful

Server certificate:
Subject: C=RU, O=CryptoPro, CN=TC
Valid : 19.05.2008 - 19.05.2009
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO

Protocol: TLS1
Cipher: 0x661e
Cipher strength: 256
Hash: 0x801e
Hash strength: 256
Key exchange: 0xaa25
Key exchange strength: 512

Header: 5, Trailer: 4, MaxMessage: 16379

HTTP request: GET /index.jsp HTTP/1.0

User-Agent: Webclient

Accept:*/*


Sending plaintext: 62 bytes
71 bytes of application data sent
8597 bytes of (encrypted) application data received
Decrypted data: 8588 bytes
11 bytes of (encrypted) application data received
Sending Close Notify
11 bytes of handshake data sent
1 connections, 8588 bytes in 0.219 seconds;
Total: SYS: 0.063 sec USR: 0.016 sec UTC: 0.328 sec
[ErrorCode: 0x00000000]



б) если удалось подключиться используя csptest, заходим через IE (https://localhost:8443/) - ок

Двусторонняя аутентификация

1. Настройки коннектора:

Connector port="8443" maxHttpHeaderSize="8192"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="true"
algorithm="GostX509"
keystoreProvider="JCP"
sslProtocol="GostTLS"
keystoreType="HDImageStore"
keyalg="GOST3410"
sigalg="GOST3411withGOST3410EL"

keystoreFile="С:/store.store"
keystorePass="123"
truststoreFile="С:/store.store"
truststorePass="123"

Для последних версий Tomcat требуются дополнительно указать:

ciphers="TLS_CIPHER_2001"
sslEnabledProtocols="GostTLS"


2. пп 2.-3. см. выше.

3. Генерируем ключ (аутентификация клиента) на http://www.cryptopro.ru/certsrv/ с помощью средств CSP,
устанавливаем сертификат со ссылкой на закрытый ключ, там же получаем корневой сертификат и устанавливаем его.

4. Далее необходимо настроить проверку цепочки сертификатов в Томкате. (п. 5 см. выше)

5. Запускаем Tomcat, проверяем соединение с двусторонней аутентификацией:

a) с помощью "csptest" (в ОС семейства Unix/Linux - "csptestf"):

csptest -tlsc -port 8443 -v -file index.jsp -nocheck

CSP (Type:75) v3.6.4070 KC1 Release Ver:3.6.4956 OS:Windows CPU:IA32 FastCode:READY,DISABLED (CContextG28147EncryptECB; CContextG28147DecryptECB; CContextG28147EncryptCBC; CContextG28147DecryptCBC; CContextG28147G
D:\Program Files\Crypto Pro\CSP\csptest.exe -tlsc -port 8443 -v -file index.jsp -nocheck
ClientHello: RecordLayer: SSL, Len: 85
Cipher Suites: (81 00 00) (80 00 00) (32 00 00) (04 00 00) (05 00 00) (0a 00 00) (80 00 01) (c0 00 07) (80 00 03) (09 00 00) (40 00 06) (64 00 00) (62 00 00) (03 00 00) (06 00 00) (80 00 02) (80 00 04) (13 00 00) (12 00 00) (63 00 00)
87 bytes of handshake data sent
1232 bytes of handshake data received

Trying to create new credential
Issuer 0: C=??, O=?????????, CN=???
Issuer 1: DC=??, DC=?????????, CN=?????????? ????
Issuer 2: C=??, CN=?????????
Issuer 3: E=?????????????????, C=??, L=??????, O=??? ??????-???, CN=?? ??????????
Issuer 4: DC=??, DC=?????????, CN=?????????? ??????? ??
Issuer 5: E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO
Issuer 6: DC=??, DC=??, CN=???????
Issuer 7: C=??, O=?????????, CN=??????????
Issuer 8: C=??, O=?????????, CN=????????
Issuers: 9, Lenght: 706 bytes

Client certificate:
Subject: CN=cln
Valid : 19.05.2008 - 19.05.2009
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO

new schannel credential created
814 bytes of handshake data sent
6 bytes of handshake data received
25 bytes of handshake data received
Handshake was successful

Server certificate:
Subject: C=RU, O=CryptoPro, CN=TC
Valid : 19.05.2008 - 19.05.2009
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO

Protocol: TLS1
Cipher: 0x661e
Cipher strength: 256
Hash: 0x801e
Hash strength: 256
Key exchange: 0xaa24
Key exchange strength: 512

Header: 5, Trailer: 4, MaxMessage: 16379

HTTP request: GET /index.jsp HTTP/1.0

User-Agent: Webclient

Accept:*/*


Sending plaintext: 62 bytes
71 bytes of application data sent
8597 bytes of (encrypted) application data received
Decrypted data: 8588 bytes
11 bytes of (encrypted) application data received
Sending Close Notify
11 bytes of handshake data sent
1 connections, 8588 bytes in 1.813 seconds;
Total: SYS: 0.063 sec USR: 0.094 sec UTC: 1.859 sec
[ErrorCode: 0x00000000]


б) если удалось подключиться через csptest, заходим через IE (https://localhost:8443/) - ок

6. Tomcat может использовать библиотеки Apache Portable Runtime (APR) для повышения производительности. APR использует платформо-зависимую реализацию SSL, которая не может работать с российскими ГОСТ алгоритмами и Java настройками типа keystoreFile и выдаст ошибку. Для предотвращения автоконфигурации через APR и задания Java коннектора, независимо от того загружены ARP библиотеки или нет, необходимо в описании коннектора явно задать имя класса реализации в атрибуте протокола protocol="org.apache.coyote.http11.Http11NioProtocol".

(12 плюсик(ов))
Класс!
Не очень :(

Коментарии (0)