Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 25 декабря 2013 г. 17:54:06(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.

Caused by: java.io.IOException: Хранилище искажено или пароль неверный.
at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source)
Хранилище в панели JCP открывается с этим паролем?
В cpSSL есть реализация SSLContext, но в логе о ней нет ничего.

Отредактировано пользователем 25 декабря 2013 г. 17:55:06(UTC)  | Причина: Не указана

Offline levandowskiy  
#12 Оставлено : 26 декабря 2013 г. 5:14:11(UTC)
levandowskiy

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

Группы: Участники
Зарегистрирован: 18.12.2013(UTC)
Сообщений: 27

Сказал(а) «Спасибо»: 14 раз
Автор: afev Перейти к цитате

Caused by: java.io.IOException: Хранилище искажено или пароль неверный.
at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source)
Хранилище в панели JCP открывается с этим паролем?


В ControlPane происходит удивительное дело:
1. я создаю Certificate Store и задаю ему пароль
2. добавляю в него все необходимые сертификаты
3. закрываю панель
4. когда вновь ее открываю пароль к хранилищу не подходит - выдается сообщение об ошибке:
Can't open the store. IO error: Keystore was tampered with, or password was incorrect.

Я предполагаю, что у меня некорректно установилось JCP в связи с этим. Встречались ли вы когда-нибудь с подобной ошибкой?

В связи с этим еще один вопрос: возможно ли добавлять цепочку сертификатов программно, без участия контрольной панели?
Offline levandowskiy  
#13 Оставлено : 26 декабря 2013 г. 7:15:58(UTC)
levandowskiy

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

Группы: Участники
Зарегистрирован: 18.12.2013(UTC)
Сообщений: 27

Сказал(а) «Спасибо»: 14 раз
И еще вот какой вопрос возникает:
Я взял сертификат (.cer) полученный от НБКИ, положил его в CertStore icrsStore вот таким образом:
Код:

Certificate certificate = generateCertificateFromFile(
    new File(СERT_PATH + "\\icrs_nbki_ru_2013.cer"));
writeCertInStore(certificate, "nbki_main", CERT_STORE,
     STORE_PATH, "123456");


где функция generateCertificateFromFile(File) - получает сертификат из файла:
Код:

    public static Certificate generateCertificateFromFile(File certFile) {
        FileInputStream fis = null;
        Certificate certificate = null;
        try {
            fis = new FileInputStream(certFile);
            try {
                CertificateFactory cf = CertificateFactory.getInstance("X.509");
                certificate = cf.generateCertificate(fis);
            } catch (CertificateException ex) {
                ex.printStackTrace();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return certificate;
    }


а функция writeCertInStore(Certificate, String, String, String, String) - записывает этот сертификат в хранилище
Код:

    public static void writeCertInStore(Certificate cert, String alias,
            String storeType, String storePath, String storePassword)
            throws Exception {
        File file = new File(storePath);

        KeyStore keyStore = KeyStore.getInstance(storeType, "JCP");
        if (file.exists()) {
            keyStore.load(new FileInputStream(storePath), storePassword.toCharArray());
        } else {
            keyStore.load(null, null);
        }

        keyStore.setCertificateEntry(alias, cert);
        keyStore.store(new FileOutputStream(file), storePassword.toCharArray());
    }


После этого попробовал соединиться с сервером вот так:
Код:

    public static void main(String[] args) throws Exception {
        System.setProperty("javax.net.ssl.supportGVO", "true");
        System.setProperty("javax.net.ssl.trustStoreType", "CertStore");
        System.setProperty("javax.net.ssl.trustStore", DOCUMENTS_PATH + "\\icrsStore");
        System.setProperty("javax.net.ssl.trustStorePassword", "123456");
        final SSLSocketFactoryImpl sslFact = new SSLSocketFactoryImpl();
        HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
        URL url = new URL("https://icrs.demo.nbki.ru/");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.connect();
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        String response = "";
        while ((line = rd.readLine()) != null) {
            response += line + "\r\n";
        }
        rd.close();
        is.close();
        System.out.println(response);
        connection.disconnect();
    }


Java-машина выкидывает исключение:
Код:

Exception in thread "main" javax.net.ssl.SSLException: Server selected improper ciphersuite SSL_NULL_WITH_NULL_NULL
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:231)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHello(ClientHandshaker.java:415)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:125)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
	at org.cashcom.nbch.connections.CryptoTest.main(CryptoTest.java:35)
Java Result: 1


У меня в коллекции сертификатов полученных от НБКИ лежали еще 4 файла с расширением p7b. Я решил их тоже засунуть в это хранилище. Для этого написал следующий код (все p7b сертификаты у меня хранятся в директории CERT_PATH):
Код:

        File[] files = new File(CERT_PATH).listFiles();
        for (int i = 0, length = files.length; i < length; i++) {
            Certificate[] certs = CertChainLoader.loadChain(files[i].getAbsolutePath());
            for (int j = 0; j < certs.length; j++) {
                writeCertInStore(certs[j], files[i].getName() + (j + 1),
                        CERT_STORE,
                        STORE_PATH, "123456");
            }
        }
        storeInfo(STORE_PATH, CERT_STORE);


Попробовал выполнить снова подключение с тем же кодом что и раньше и получил точно такую же ошибку SSL_NULL_WITH_NULL_NULL ...

Скажите в чем заключается моя ошибка? Предполагаю , что я неправильно добавляю цепочку сертификатов в контейнер или добавляю ее не в тот контейнер.

Буду признателен за помощь
Offline Евгений Афанасьев  
#14 Оставлено : 26 декабря 2013 г. 8:46:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
I.
Автор: levandowskiy Перейти к цитате
Автор: afev Перейти к цитате

Caused by: java.io.IOException: Хранилище искажено или пароль неверный.
at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source)
Хранилище в панели JCP открывается с этим паролем?


В ControlPane происходит удивительное дело:
1. я создаю Certificate Store и задаю ему пароль
2. добавляю в него все необходимые сертификаты
3. закрываю панель
4. когда вновь ее открываю пароль к хранилищу не подходит - выдается сообщение об ошибке:
Can't open the store. IO error: Keystore was tampered with, or password was incorrect.

Я предполагаю, что у меня некорректно установилось JCP в связи с этим. Встречались ли вы когда-нибудь с подобной ошибкой?


Запрос пароля происходит 1 раз при создании хранилища и добавлении сертификата? Или несколько раз? Какая версия jcp?

II.
Автор: levandowskiy Перейти к цитате
И еще вот какой вопрос возникает:
Я взял сертификат (.cer) полученный от НБКИ, положил его в CertStore icrsStore вот таким образом:
Код:

Certificate certificate = generateCertificateFromFile(
    new File(СERT_PATH + "\\icrs_nbki_ru_2013.cer"));
writeCertInStore(certificate, "nbki_main", CERT_STORE,
     STORE_PATH, "123456");


где функция generateCertificateFromFile(File) - получает сертификат из файла:
Код:

    public static Certificate generateCertificateFromFile(File certFile) {
        FileInputStream fis = null;
        Certificate certificate = null;
        try {
            fis = new FileInputStream(certFile);
            try {
                CertificateFactory cf = CertificateFactory.getInstance("X.509");
                certificate = cf.generateCertificate(fis);
            } catch (CertificateException ex) {
                ex.printStackTrace();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return certificate;
    }


а функция writeCertInStore(Certificate, String, String, String, String) - записывает этот сертификат в хранилище
Код:

    public static void writeCertInStore(Certificate cert, String alias,
            String storeType, String storePath, String storePassword)
            throws Exception {
        File file = new File(storePath);

        KeyStore keyStore = KeyStore.getInstance(storeType, "JCP");
        if (file.exists()) {
            keyStore.load(new FileInputStream(storePath), storePassword.toCharArray());
        } else {
            keyStore.load(null, null);
        }

        keyStore.setCertificateEntry(alias, cert);
        keyStore.store(new FileOutputStream(file), storePassword.toCharArray());
    }


После этого попробовал соединиться с сервером вот так:
Код:

    public static void main(String[] args) throws Exception {
        System.setProperty("javax.net.ssl.supportGVO", "true");
        System.setProperty("javax.net.ssl.trustStoreType", "CertStore");
        System.setProperty("javax.net.ssl.trustStore", DOCUMENTS_PATH + "\\icrsStore");
        System.setProperty("javax.net.ssl.trustStorePassword", "123456");
        final SSLSocketFactoryImpl sslFact = new SSLSocketFactoryImpl();
        HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
        URL url = new URL("https://icrs.demo.nbki.ru/");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.connect();
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        String response = "";
        while ((line = rd.readLine()) != null) {
            response += line + "\r\n";
        }
        rd.close();
        is.close();
        System.out.println(response);
        connection.disconnect();
    }


Java-машина выкидывает исключение:
Код:

Exception in thread "main" javax.net.ssl.SSLException: Server selected improper ciphersuite SSL_NULL_WITH_NULL_NULL
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:231)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHello(ClientHandshaker.java:415)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:125)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
	at org.cashcom.nbch.connections.CryptoTest.main(CryptoTest.java:35)
Java Result: 1


У меня в коллекции сертификатов полученных от НБКИ лежали еще 4 файла с расширением p7b. Я решил их тоже засунуть в это хранилище. Для этого написал следующий код (все p7b сертификаты у меня хранятся в директории CERT_PATH):
Код:

        File[] files = new File(CERT_PATH).listFiles();
        for (int i = 0, length = files.length; i < length; i++) {
            Certificate[] certs = CertChainLoader.loadChain(files[i].getAbsolutePath());
            for (int j = 0; j < certs.length; j++) {
                writeCertInStore(certs[j], files[i].getName() + (j + 1),
                        CERT_STORE,
                        STORE_PATH, "123456");
            }
        }
        storeInfo(STORE_PATH, CERT_STORE);


Попробовал выполнить снова подключение с тем же кодом что и раньше и получил точно такую же ошибку SSL_NULL_WITH_NULL_NULL ...

Скажите в чем заключается моя ошибка? Предполагаю , что я неправильно добавляю цепочку сертификатов в контейнер или добавляю ее не в тот контейнер.

Буду признателен за помощь


В стектрейсе нет упоминания cpSSL (классы из пакета вида ru.CryptoPro.ssl) - создается впечатление, что он у вас не установлен (из какого пакета класс SSLSocketFactoryImpl?). Проверьте с помощью "java -cp samples.jar ComLine.CheckConfFull" - в списке проверяемых модулей должен быть cpSSL.

Отредактировано пользователем 26 декабря 2013 г. 8:49:34(UTC)  | Причина: Не указана

Offline levandowskiy  
#15 Оставлено : 26 декабря 2013 г. 10:33:10(UTC)
levandowskiy

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

Группы: Участники
Зарегистрирован: 18.12.2013(UTC)
Сообщений: 27

Сказал(а) «Спасибо»: 14 раз
afev написал:
I.
Запрос пароля происходит 1 раз при создании хранилища и добавлении сертификата? Или несколько раз? Какая версия jcp?


При создании и добавлении сертификатов пароль запрашивается и подходит, работает нормально. При закрытии контрольной панели и последующем ее открытии при попытке открыть созданный в предыдущем сеансе контейнер заканчивается неудачей, не подходит пароль.
Версия JCP: Crypto Pro JCP v.1.0, rel.1.0.54

afev написал:

В стектрейсе нет упоминания cpSSL (классы из пакета вида ru.CryptoPro.ssl) - создается впечатление, что он у вас не установлен (из какого пакета класс SSLSocketFactoryImpl?). Проверьте с помощью "java -cp samples.jar ComLine.CheckConfFull" - в списке проверяемых модулей должен быть cpSSL.


Полное имя класса
Код:
com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl

Код:

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

c:\Users\User1\Documents\JarLibs\jcp.1.0.54\Samples>java -cp samples.jar "ComLine.CheckConfFull"
фхъ 26, 2013 1:27:43 PM ComLine.CheckConfFull checkProvs
INFO: Provider JCP not installed.
фхъ 26, 2013 1:27:44 PM ComLine.CheckConfFull checkProvs
INFO: Provider Crypto not installed.
фхъ 26, 2013 1:27:44 PM ComLine.CheckConfFull checkProvs
INFO: Provider JTLS  not installed.


Исходя из вышенаписанного, понимаю, что действительно у меня ничего не установлено. В связи с этим просьба указать на мат. часть: где можно взять руководство по правильной установке?

===============================================================================================================================================
Установил как следовало JCP и JTLS. После этого ошибки в контрольной панели с паролями исчезли. Все работает как по нотам. Но выполняя следующий код:
Код:

        System.setProperty("javax.net.ssl.supportGVO", "true");
        System.setProperty("javax.net.ssl.trustStoreType", "CertStore");
        System.setProperty("javax.net.ssl.trustStore", DOCUMENTS_PATH + "\\icrsStore");
        System.setProperty("javax.net.ssl.trustStorePassword", "123456");
        final SSLSocketFactoryImpl sslFact = new SSLSocketFactoryImpl();
        HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
        URL url = new URL("https://icrs.demo.nbki.ru/");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.connect();
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        String response = "";
        while ((line = rd.readLine()) != null) {
            response += line + "\r\n";
        }
        rd.close();
        is.close();
        System.out.println(response);
        connection.disconnect();


Получаю стек трейс
Код:

26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore is : 
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore type is : 
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore provider is : 
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: init keystore
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: defaultStoreProvider = 
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: 
26.12.2013 15:50:28 ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.54 36641
26.12.2013 15:50:28 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: init keymanager of type GostX509
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore is: C:\Users\G\Documents\icrsStore
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore type is : CertStore
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore provider is : 
26.12.2013 15:50:28 ru.CryptoPro.ssl.SSLContextImpl d
INFO: init truststore
26.12.2013 15:50:29 ru.CryptoPro.ssl.SSLContextImpl d
INFO: init trustmanager of type GostX509
26.12.2013 15:50:29 ru.CryptoPro.ssl.SSLContextImpl d
INFO: init context...
26.12.2013 15:50:29 ru.CryptoPro.ssl.SSLContextImpl d
INFO: Context inited.
Exception in thread "main" javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
	at ru.CryptoPro.ssl.x.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.startHandshake(Unknown Source)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
	at org.cashcom.nbch.connections.CryptoTest.main(CryptoTest.java:36)
Caused by: java.lang.UnsupportedOperationException
	at javax.crypto.CipherSpi.engineGetKeySize(DashoA13*..)
	at javax.crypto.Cipher.b(DashoA13*..)
	at javax.crypto.Cipher.a(DashoA13*..)
	at javax.crypto.Cipher.init(DashoA13*..)
	at javax.crypto.Cipher.init(DashoA13*..)
	at ru.CryptoPro.ssl.a.c.a(Unknown Source)
	at ru.CryptoPro.ssl.a.e.a(Unknown Source)
	at ru.CryptoPro.ssl.ag.a(Unknown Source)
	at ru.CryptoPro.ssl.ag.a(Unknown Source)
	at ru.CryptoPro.ssl.d.k(Unknown Source)
	at ru.CryptoPro.ssl.d.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.a(Unknown Source)
	at ru.CryptoPro.ssl.ae.i(Unknown Source)
	... 5 more
Java Result: 1


Теперь вот полезли ошибки от SSL. Помогите пожалуйста разобраться в чем дело.

Отредактировано пользователем 26 декабря 2013 г. 12:50:43(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#16 Оставлено : 26 декабря 2013 г. 20:24:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Поищите на форуме информацию по снятию экспортных ограничений (policy) или в cpdn.cryptopro.ru в разделе JTLS. Нужно будет снять ограничения.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
levandowskiy оставлено 27.12.2013(UTC)
Offline levandowskiy  
#17 Оставлено : 27 декабря 2013 г. 7:21:59(UTC)
levandowskiy

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

Группы: Участники
Зарегистрирован: 18.12.2013(UTC)
Сообщений: 27

Сказал(а) «Спасибо»: 14 раз
Автор: afev Перейти к цитате
Поищите на форуме информацию по снятию экспортных ограничений (policy) или в cpdn.cryptopro.ru в разделе JTLS. Нужно будет снять ограничения.


Спасибо, все заработало)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.