logo Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vdchernikov  
#1 Оставлено : 29 октября 2019 г. 10:13:11(UTC)
vdchernikov

Статус: Участник

Группы: Участники
Зарегистрирован: 17.10.2019(UTC)
Сообщений: 11
Российская Федерация
Откуда: Ярославская обл.

На Андроид устройстве (версия Android 6.0) в тестовом приложении пробуем связаться с сервером через сокет и пройти двустороннюю аутентификацию.

Возникает ошибка в логах и ответ сервера 400 bad request
10-28 18:51:02.222 1800-1958/com.example.krista.myapplication W/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: %% No appropriate keys for handshake
и ответ
HTTP/1.1 400 Bad Request
Server: Continent TLS
Date: Mon, 28 Oct 2019 20:46:55 GMT
Content-Type: text/html
Content-Length: 251
Connection: close

В качестве основы брал пример кода для запроса через сокет в HttpsExample.java в ACSPInClientApp (из дистрибутива android-csp-5.0.40424 );
в лог это пишет после тоого как отправляю запрос в сокет, хотя сертификат загружен в TrustStore хранилище и ключ загружен в KeyStore по выбранному алиасу;
пароля на ключ не выставлено и в коде я его могу получить без пароля; (Key keyt = keyStore.getKey(alias, null); )




Изначльно есть 6 файлов закртыого контнейнера ключа, и сертификат Удостовреяющего центра.

1) Файлы контейнера копируем с помощью команды, из zip архива
inal CSPTool cspTool = new CSPTool(this);
cspTool.getAppInfrastructure().copyContainerFromArchive(R.raw.krista_keys);

2) Сертифкат устанавливаем комндами в Trust хранилище
trustStore.setCertificateEntry ("krista_cert", certKrista);

3) И далее создаем SSlContext.

В качестве основы брал пример кода для запроса через сокет в HttpsExample.java в ACSPInClientApp :

public SSLContext CreateKristaSSLContext() throws Exception
{
//=====================TrustManager====================
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
Provider.KEYMANGER_ALG,
Provider.PROVIDER_NAME
);

// проверка ранее загруженног сертификата
X509Certificate certOut = (X509Certificate) trustStore.getCertificate("krista_cert");
String nameOut = certOut.getSubjectDN().getName();

tmf.init(trustStore);

//===================KeyStoreManager===================

String USER_CONTAINER_ALIAS_2001 = "Лапина ГОСТ 2001";
String USER_CONTAINER_ALIAS_2012 = "Лапина ГОСТ 2012";

KeyStore keyStore = KeyStore.getInstance(
JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);

StoreInputStream stream = new StoreInputStream(USER_CONTAINER_ALIAS_2001);
keyStore.load(stream, null);
// keyStore.load(null, null);

Enumeration<String> aliases = keyStore.aliases();

// while (aliases.hasMoreElements())
// {
// String alias = aliases.nextElement();
// Key keyt = keyStore.getKey(alias, null);
// }

KeyManagerFactory kmf = KeyManagerFactory
.getInstance(Provider.KEYMANGER_ALG, Provider.PROVIDER_NAME);

kmf.init(keyStore, null);

SSLContext sslContext = SSLContext.getInstance(
Provider.ALGORITHM,
Provider.PROVIDER_NAME
);

sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

return sslContext;
}

Если нужен какой то еще код или тестовый пример я могу скинуть

Отредактировано пользователем 29 октября 2019 г. 11:00:19(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 29 октября 2019 г. 15:51:54(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,023
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
Здравствуйте.
1. Задайте пароль на контейнер. Отбор контейнеров происходит в том числе по паролю.
2. Соберите и приложите лог из adb logcat, после того, как включите логирование:
включить: adb shell setprop log.tag.JCP DEBUG
отключить: adb shell setprop log.tag.JCP INFO

Возможные причины того, что контейнер не выбран:
А) неправильно задан пароль;
Б) в контейнере нет или просроченный сертификат;
В) издатель сертификата не входит в список тех имен корневых сертификатов, что шлет сервер;
Г) в сертификате нет политики "аутентификация клиента"
и др.

Отредактировано пользователем 29 октября 2019 г. 15:53:24(UTC)  | Причина: Не указана

Offline vdchernikov  
#3 Оставлено : 29 октября 2019 г. 21:01:50(UTC)
vdchernikov

Статус: Участник

Группы: Участники
Зарегистрирован: 17.10.2019(UTC)
Сообщений: 11
Российская Федерация
Откуда: Ярославская обл.

Как вы и просили прикрепляю лог тестового примера

TestSSLApp_log.txt (701kb) загружен 4 раз(а).

Сам тестовый пример я делаю на базе примера HttpsExample из примера ACSPInClientApp.
И там в ресурсах к нему приложены некие файлы конфигурации config.ini, config64.ini
Может эти файлы как-то влияют на конфигурацию работы SSL?

Пароль на контейнере закрытого ключа у нас не задан, в iOS версии он используется без пароля,
да и в коде я его читаю ключ и он не запрашивает окна ввода пароля;

Сам сертификат удостояверяющего центра и контейнер ключа у нас не просроченные и работают в iOS версии и через тестовый пример Android Continent TLS (это тестовая версия мы пробовали, там работа осуществуляется через Proxy туннель);

P.S. сейчас заметил что при чтении ключа из контенйера ключа почему то не работает метод c null параметром
Key key_test_1 = keyStore.getKey(null, "".toCharArray());
хотя в документации написано что если я загружаю KeyStore с указанием StoreInputStream :

StoreInputStream stream = new StoreInputStream(USER_CONTAINER_ALIAS_2012);
keyStore.load(stream, null);

то вызов

getKey(null, "".toCharArray());
Certificate cert = keyStore.getCertificate(null);

должен возвращать ключ и сертификат

Сейчас он возвращает ключ только если конретно алиас указать

Key key_test_1 = keyStore.getKey(USER_CONTAINER_ALIAS_2012, "".toCharArray());
Certificate cert = keyStore.getCertificate(USER_CONTAINER_ALIAS_2012);

Отредактировано пользователем 30 октября 2019 г. 9:58:40(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 30 октября 2019 г. 12:36:46(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,023
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
По логу:
Код:

found key: Лапина ГОСТ 2012
10-29 20:52:02.797 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: 
    ------
    Certificate chain [0] for key:Лапина ГОСТ 2012 
      Subject: OID.2.5.4.4=Лапина, OID.2.5.4.42=Светлана Алексеевна, CN=Лапина Светлана Алексеевна, L=Рыбинск, ST=76 Ярославская область, C=RU, OID.1.2.840.113549.1.9.1=#16106C6170696E61406B72697374612E7275, OID.1.2.643.3.131.1.1=#120C373631303230393631393138, OID.1.2.643.100.3=#120B3036313235353137373335
      Valid from Wed Nov 07 15:52:39 GMT+03:00 2018 until Thu Nov 07 16:02:39 GMT+03:00 2019
    Certificate chain [1] for key:Лапина ГОСТ 2012 
      Subject: CN=ООО Кроссцентр, O=ООО КРОССЦЕНТР, OU=Удостоверяющий центр, STREET=ул. Чайковского д.30, L=Ярославль, ST=76 Ярославская область, C=RU, OID.1.2.643.3.131.1.1=#120C303037363034323832383333, OID.1.2.643.100.1=#120D31313537363237303133373038, OID.1.2.840.113549.1.9.1=#161163614063726F737363656E7465722E7275
      Valid from Tue Jul 24 12:27:25 GMT+03:00 2018 until Sun Jul 24 12:27:25 GMT+03:00 2033
    Certificate chain [2] for key:Лапина ГОСТ 2012 
      Subject: CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, OID.1.2.840.113549.1.9.1=#160F646974406D696E737679617A2E7275
      Valid from Fri Jul 06 15:18:06 GMT+03:00 2018 until Tue Jul 01 15:18:06 GMT+03:00 2036
    ------
10-29 20:52:05.053 11042-11439/com.example.krista.myapplication D/ACSP_Embedded: Sending request: GET /default.htm HTTP/1.1
10-29 20:52:05.147 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% ClientHello, TLSv1; Cipher Suites: [TLS_CIPHER_2012, TLS_CIPHER_2001, SSL3_CK_GVO_KB2]; Compression Methods: 0; Extensions: Extension ext_hash_and_mac_alg_select, ext_hash_and_mac_alg_select: [48, 32, 48, 30, 48, 8, 6, 6, 42, -123, 3, 2, 2, 9, 48, 8, 6, 6, 42, -123, 3, 2, 2, 22, 48, 8, 6, 6, 42, -123, 3, 2, 2, 23], Extension server_name, server_name: [host_name: lk2012.budget.gov.ru], Extension renegotiation_info, renegotiated_connection: <empty>;
10-29 20:52:05.180 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_26.<init> :: ServerHello sessionId: :: {237, 64, 232, 152, 250, 181, 86, 247, 167, 102, 245, 213, 27, 233, 141, 232, 40, 117, 197, 93, 213, 87, 87, 103, 36, 77, 242, 118, 36, 163, 5, 73}
10-29 20:52:05.182 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% ServerHello, TLSv1; Cipher Suite: TLS_CIPHER_2012; Compression Method: 0; Extensions: Extension server_name, server_name: , Extension renegotiation_info, renegotiated_connection: <empty>;
10-29 20:52:05.209 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% Certificate message:
    ------
      Subject: CN=lk2012.budget.gov.ru, OU=Управление информационной инфраструктурой, O=Федеральное казначейство, L=г.Москва, ST=77 г.Москва, C=RU, OID.1.2.840.113549.1.9.1=#16106973666B40726F736B617A6E612E7275, OID.1.2.643.100.1=#120D31303437373937303139383330, OID.1.2.643.3.131.1.1=#120C303037373130353638373630
      Valid from Wed Jan 23 16:02:10 GMT+03:00 2019 until Thu Apr 23 16:02:10 GMT+03:00 2020
    ------
      Subject: CN=Федеральное казначейство, O=Федеральное казначейство, C=RU, L=Москва, STREET="Большой Златоустинский переулок, д. 6, строение 1", OID.1.2.643.100.1=#120D31303437373937303139383330, OID.1.2.643.3.131.1.1=#120C303037373130353638373630, ST=г. Москва, OID.1.2.840.113549.1.9.1=#161175635F666B40726F736B617A6E612E7275
      Valid from Mon Nov 19 18:56:01 GMT+03:00 2018 until Sat Nov 19 18:56:01 GMT+03:00 2033
    ------
      Subject: CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, OID.1.2.840.113549.1.9.1=#160F646974406D696E737679617A2E7275
      Valid from Fri Jul 06 15:18:06 GMT+03:00 2018 until Tue Jul 01 15:18:06 GMT+03:00 2036
    ------
10-29 20:52:05.854 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.JCP.tools.logger.LoggingUtils.logBase64EncodedChain :: %%% Build of chain success. Chain size: 2
10-29 20:52:05.879 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.JCP.tools.logger.LoggingUtils.logBase64EncodedChain :: %%% Validate chain. Chain size: 2
10-29 20:52:11.847 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_62.a :: [PKIX] The certificate chain is valid.
10-29 20:52:11.859 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_19.<init> :: Given authorities list's size: 0 element(s)
10-29 20:52:11.859 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% CertificateRequest
    Cert Authorities:
10-29 20:52:11.860 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% ServerHelloDone (empty)
10-29 20:52:11.860 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Certificate request is received...
10-29 20:52:11.862 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.a :: %% getting aliases for :: Client
10-29 20:52:11.863 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.a :: %% checking alias: Лапина ГОСТ 2012
10-29 20:52:11.863 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.a :: %% check public key algorithm ignored.
10-29 20:52:11.863 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.a :: %% check extended key usage of Client, size: 4...
10-29 20:52:11.863 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.a :: %% matching alias: :: Лапина ГОСТ 2012
10-29 20:52:11.864 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Found containers: :: 1
10-29 20:52:11.864 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Check private key: :: Лапина ГОСТ 2012
10-29 20:52:11.864 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Certificate chain Лапина ГОСТ 2012 found. Check if DH available...
10-29 20:52:11.864 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Private key Лапина ГОСТ 2012 is available. Test key...
10-29 20:52:11.865 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.pc_0.cl_0.c :: Signature algorithm: GOST3411_2012_256withGOST3410DH_2012_256 by key algorithm: GOST3410DH_2012_256
10-29 20:52:11.869 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Private key 'Лапина ГОСТ 2012' is available, key test passed...
10-29 20:52:11.869 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: tls_client_fixed_DH state not allowed. Use cached key: :: Лапина ГОСТ 2012
10-29 20:52:11.870 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_9.a :: Use cached key and certificate with alias: :: Лапина ГОСТ 2012
10-29 20:52:11.871 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% Certificate message:
    ------
      Subject: OID.2.5.4.4=Лапина, OID.2.5.4.42=Светлана Алексеевна, CN=Лапина Светлана Алексеевна, L=Рыбинск, ST=76 Ярославская область, C=RU, OID.1.2.840.113549.1.9.1=#16106C6170696E61406B72697374612E7275, OID.1.2.643.3.131.1.1=#120C373631303230393631393138, OID.1.2.643.100.3=#120B3036313235353137373335
      Valid from Wed Nov 07 15:52:39 GMT+03:00 2018 until Thu Nov 07 16:02:39 GMT+03:00 2019
    ------
      Subject: CN=ООО Кроссцентр, O=ООО КРОССЦЕНТР, OU=Удостоверяющий центр, STREET=ул. Чайковского д.30, L=Ярославль, ST=76 Ярославская область, C=RU, OID.1.2.643.3.131.1.1=#120C303037363034323832383333, OID.1.2.643.100.1=#120D31313537363237303133373038, OID.1.2.840.113549.1.9.1=#161163614063726F737363656E7465722E7275
      Valid from Tue Jul 24 12:27:25 GMT+03:00 2018 until Sun Jul 24 12:27:25 GMT+03:00 2033
    ------
      Subject: CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, OID.1.2.840.113549.1.9.1=#160F646974406D696E737679617A2E7275
      Valid from Fri Jul 06 15:18:06 GMT+03:00 2018 until Tue Jul 01 15:18:06 GMT+03:00 2036
    ------
10-29 20:52:11.973 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% ClientKeyExchange...
10-29 20:52:12.086 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% CertificateVerify
10-29 20:52:12.099 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_29.a :: ChangeCipherSpec
10-29 20:52:12.099 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_17.d :: %% Finished.
10-29 20:52:12.263 11042-11439/com.example.krista.myapplication D/ACSP_Embedded: Parse http response...
10-29 20:52:12.264 11042-11439/com.example.krista.myapplication D/ACSP_Embedded: Read http body...
10-29 20:52:12.265 11042-11439/com.example.krista.myapplication D/ACSP_Embedded: Page:
10-29 20:52:12.265 11042-11439/com.example.krista.myapplication D/ACSP_Embedded: <html>
    <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>HTTPS-прокси. 400 Неправильный запрос</h1></center>
    </body>
    </html>
10-29 20:52:14.072 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_51.a :: Thread-14341, SEND TLSv1 ALERT:  warning, description = CLOSE_NOTIFY

Обмен успешно выполнен, хендшейк состоялся, ваш сертификат передан серверу (в середине - Certificate message с "Subject: OID.2.5.4.4=Лапина"), если бы не был передан, была бы ошибка 403.
Offline vdchernikov  
#5 Оставлено : 30 октября 2019 г. 15:42:41(UTC)
vdchernikov

Статус: Участник

Группы: Участники
Зарегистрирован: 17.10.2019(UTC)
Сообщений: 11
Российская Федерация
Откуда: Ярославская обл.

То есть думаете hadshake нормально проходит,
а что за ошибка тогда в логах %% No appropriate keys for handshake

10-29 20:52:05.971 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.reprov.certpath.URICertStore.engineGetCRLs :: Connecting: http://reestr-pki.ru/cdp/guc_gost12.crl
10-29 20:52:05.972 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.<init> ::
10-29 20:52:05.973 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.<init> ::
------
10-29 20:52:05.973 11042-11439/com.example.krista.myapplication W/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: %% No appropriate keys for handshake
10-29 20:52:05.973 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_66.<init> :: Trusted certificates: empty set.
10-29 20:52:05.974 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_66.a ::
%% adding as trusted certificates %%
--------
10-29 20:52:06.032 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.reprov.certpath.URICertStore.engineGetCRLs :: Downloading new CRL...
Offline Евгений Афанасьев  
#6 Оставлено : 30 октября 2019 г. 15:47:32(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,023
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
Автор: vdchernikov Перейти к цитате
То есть думаете hadshake нормально проходит

По логам так. Ключевые моменты из лога я выше привел.
Запись
Код:

10-29 20:52:05.971 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.reprov.certpath.URICertStore.engineGetCRLs :: Connecting: http://reestr-pki.ru/cdp/guc_gost12.crl
10-29 20:52:05.972 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: 
10-29 20:52:05.973 11042-11439/com.example.krista.myapplication D/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: 
    ------
10-29 20:52:05.973 11042-11439/com.example.krista.myapplication W/JCP: ru.CryptoPro.ssl.android.cl_64.<init> :: %% No appropriate keys for handshake

относится к моменту скачивания CRL, скорее всего, HttpUrlConnection инициализируется с пустыми параметрами.

Отредактировано пользователем 30 октября 2019 г. 15:48:03(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#7 Оставлено : 30 октября 2019 г. 15:55:10(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,023
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
Кстати, обратите внимание, сертификат Лапина истекает 7 ноября.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.