Статус: Участник
Группы: Участники
Зарегистрирован: 14.03.2016(UTC) Сообщений: 11 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Уфа Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте. Возникла необходимость в автоматическом обмене данными с сайтом госзакупок (https://int223.zakupki.gov.ru/223/integration/integration/upload). В IE соединение устанавливается. Необходимо то же сделать программно. Помогите, пожалуйста, разобраться или направить рабочий пример для подключения к этому сайту.
Имею: 1. Установленный КриптоПро CSP 2. JDK 8 3. JCP 2 (jcp-2.0.38674) 4. Носитель Rutoken с ключем.
По документации JCP понимания не возникло. Тема совсем не близка..
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здравствуйте. Вероятно, требуется установить защищенное (TLS) соединение клиента и сервера (zakupki). Сначала рекомендуем посмотреть руководство по эксплуатации cpSSL (папка Doc/ЖТЯИ.00091-01-JCP в дистрибутиве, файлы "ЖТЯИ.00091-01 91 02. Инструкция по использованию (JTLS).odt" и "ЖТЯИ.00091-01 33 03. Руководство программиста (JTLS).odt", а также "ЖТЯИ.00091-01 33 01. Руководство программиста.odt", "ЖТЯИ.00091-01 90 01. Руководство администратора безопасности.odt" и "ЖТЯИ.00091-01 91 01. Инструкция по использованию.odt"). Клиентское соединение можно осуществить, например, с помощью HttpsURLConnection (+ задать параметры хранилища доверенных сертификатов и контейнера в System.setProperty), apache http client (через SSLContext) и т.п. Примеры: архив samples-sources.jar, пакет JTLS_samples. Для работы с рутокеном после установки JCP нужно скачать их модуль поддержки (rutoken для jcp) и установить его. Установка выполнится в последние установленные JRE с установленным JCP (если последняя установленная jre/jdk - без JCP, то модуль поддержки не установится). При правильной установке в панели JCP появится закладка RutokenStore и тип хранилища RutokenStore, т.е. обращаться к контейнерам на рутокене надо будет примерно так: Код:
KeyStore keyStore = KeyStore.getInstance("RutokenStore");
keyStore.load(null, null);
PrivateKey key = keyStore.getKey(alias, password); // ключ с рутокена
Не рекомендуется для TLS подключения использовать рутокен, т.к. особенностью реализации cpSSL является перебор контейнеров по паролю. Лучше скопировать контейнер в HDImageStore. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.03.2016(UTC) Сообщений: 11 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Уфа Сказал(а) «Спасибо»: 2 раз
|
Скопировать контейнер в HDImageStore не удалось: выходит сообщение Цитата:Key is not exportable . Подскажите, что неправильно в коде (debug показывает ошибку на строке int responseCode = con.getResponseCode()): Код:TrustManager[] trustAllCerts = { new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
SSLContext sslContext = SSLContext.getInstance("GostTLS");
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
KeyStore keyStore = KeyStore.getInstance("RutokenStore");
keyStore.load(null, null);
PrivateKey key = (PrivateKey)keyStore.getKey("алиас", "пароль".toCharArray()); // ключ с рутокена
System.out.println(key.getFormat());
X509Certificate cert = (X509Certificate)keyStore.getCertificate("алиас");
System.out.println(cert.getNotAfter().toString());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, "пароль".toCharArray());
sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());
URL url = new URL("https://int223.zakupki.gov.ru/223/integration/integration/upload/");
HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
con.setRequestMethod( "GET" );
con.setHostnameVerifier(hv);
con.setSSLSocketFactory(sslContext.getSocketFactory());
int responseCode = con.getResponseCode();////тут возникает ошибка
InputStream inputStream;
if (responseCode == HttpsURLConnection.HTTP_OK) {
inputStream = con.getInputStream();
} else {
inputStream = con.getErrorStream();
}
BufferedReader reader;
String line = null;
reader = new BufferedReader( new InputStreamReader( inputStream ) );
while( ( line = reader.readLine() ) != null )
{
System.out.println( line );
}
inputStream.close();
текст ошибки: Код:debug:
мар 21, 2016 3:09:57 PM ru.CryptoPro.JCSP.JCSP <init>
INFO: Loading JCSP 4.0 38674
мар 21, 2016 3:09:57 PM ru.CryptoPro.JCSP.KeyStore.KeyStoreConfig enumInstalledProviders
WARNING: No provider with type of 80 found.
мар 21, 2016 3:09:57 PM ru.CryptoPro.JCSP.KeyStore.KeyStoreConfig enumInstalledProviders
WARNING: No provider with type of 81 found.
мар 21, 2016 3:09:58 PM ru.CryptoPro.JCSP.JCSP <init>
INFO: JCSP loaded.
мар 21, 2016 3:09:58 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0 38674
мар 21, 2016 3:09:58 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
null
Fri Jan 27 09:53:00 GMT+05:00 2017
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore is :
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore type is :
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore provider is :
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init key store
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: defaultStoreProvider =
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO:
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init key manager of type GostX509
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.r <init>
WARNING: %% No appropriate keys for handshake
PATH: C:\Users\RogatchevKM\Local Settings\Application Data\Crypto Pro
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore is:
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore type is :
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore provider is :
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init trust store
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init trust manager of type GostX509
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init context...
мар 21, 2016 3:10:03 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: Context initiated.
javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
at ru.CryptoPro.ssl.C.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at javaapplication2.SSLTest3.getSSLContext(SSLTest3.java:145)
at javaapplication2.SSLTest3.initConfig(SSLTest3.java:181)
at javaapplication2.SSLTest3.testSend(SSLTest3.java:61)
at javaapplication2.SSLTest3.main(SSLTest3.java:50)
Caused by: java.lang.UnsupportedOperationException
at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.engineGetParameters(Unknown Source)
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1020)
at javax.crypto.Cipher.init(Cipher.java:1245)
at javax.crypto.Cipher.init(Cipher.java:1186)
at ru.CryptoPro.ssl.a.d.a(Unknown Source)
at ru.CryptoPro.ssl.a.f.a(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.f.o(Unknown Source)
at ru.CryptoPro.ssl.f.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.i(Unknown Source)
... 11 more
java.lang.IllegalArgumentException: SSL context may not be null
at org.apache.http.util.Args.notNull(Args.java:54)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>(SSLConnectionSocketFactory.java:261)
at javaapplication2.SSLTest3.initConfig(SSLTest3.java:182)
at javaapplication2.SSLTest3.testSend(SSLTest3.java:61)
at javaapplication2.SSLTest3.main(SSLTest3.java:50)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Не сняли ограничения на экспорт ключа. См. тут. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.03.2016(UTC) Сообщений: 11 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Уфа Сказал(а) «Спасибо»: 2 раз
|
спасибо, соединение установлено!
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.03.2016(UTC) Сообщений: 11 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Уфа Сказал(а) «Спасибо»: 2 раз
|
Подскажите еще, пожалуйста, какие лицензии необходимы на сервер для работы этого модуля:
серверная лицензия JCP + серверная лицензия JavaTLS ?
CSP нет необходимости?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
CSP не нужен. Все верно: на сервере, если вы создаете серверное сокетное соединение, нужна серверная лицензия cpSSL. Если не создаете (используется только клиентское подключение) - то серверная лицензия cpSSL не нужна. Для JCP нужна лицензия в любом случае - серверная на сервере. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 ![Мужчина Мужчина](/forum2/Themes/soclean/male.gif) Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Цитата:в любом случае - серверная на сервере. Бабушка на двое сказала. Честно. Сервер может быть сервером и не заниматься самоподписыванием и шифрованием. Зачем ему серверная лицензия? Ему и клиентской должно хватать. Разве, что, JCP считает любую Linux Desktop amd64 машину как сервер. Да и клиентская подразумевает использование закрытых ключей. Но если TLS идет без авторизации клиента, то здесь и ключей может не быть. Как-то так. Если в госзакупках работать по ФЗ-44, авторизация внешней системы (клиента) не нужна. Если по ФЗ-223, авторизация внешней системы (клиента) нужна.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close