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".
|