Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SSL и PKCS, Как работать с PKCS? 
:(
    Опции темы
V1tal1us
  Дата 16.6.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Namaste
Доброго времени суток всем. Созрел вопрос, он не нов. Всё тот же SSL и Жава )

Есть сервер, http://xxx.xx/ . Раньше Я с ним общался таким образом

Код


public String doHttpPOST(String urlstr, String query) throws IOException 
     {
        try {
              
                URL url = new URL(urlstr);
                HttpURLConnection huc = (HttpURLConnection) url.openConnection();
                huc.setRequestMethod("POST");
                huc.setDoOutput(true);
                huc.setDoInput(true);
                Writer out = new OutputStreamWriter(huc.getOutputStream());
                out.write(query);
                out.flush();

                int responseCode = huc.getResponseCode();
                if (responseCode == huc.HTTP_OK) 
                {
                    log.debug("HTTP SENT OK");
                }else
                {
                     log.error("Response ERROR :" + huc.getResponseMessage());
                     return "error";
                }

                BufferedReader in = new BufferedReader(
                        new InputStreamReader(huc.getInputStream()));
                int c;
                StringBuffer sb = new StringBuffer();
                while ((c = in.read()) != -1) {
                    sb.append((char)c);
                }
                out.close();
                in.close();
                huc.disconnect();
                return sb.toString();

        } catch (Exception e) 
        {
            log.error(e.getMessage(),e);
        }
        return "error";
        
    }



НО! Недавно админы сервака решили добавить пакостную букву “s” в начало(https://xxx.xx/ ) Теперь предыдущий код никак не отработает, и естественно никаких результатов Я от своих запросов не буду получать. Мне любезно был предоставлен сертификат, который необходим для коннекта. Сертификат  имеет стандарт ,как Вы уже наверное догадались из названия темы, PKCS #12. При попытке добавить этот сертификат в хранилище Жавы (начитался умных статей на форуме, и понял что сначала нужно сделать это) выдается ошибка "keytool error: java.lang.Exception: Input not an X.509 certificate".
Делал Я это так :

Код

[hz@hz ProSsl]$ openssl pkcs12 -out qqq.cer -in qqq.p12
[hz@hz ProSsl]$ keytool -import -trustcacerts -alias qqq  -file qqq.cer 



Так Вот уважаемые, вопрос состоит в том. 
  • Как же все таки добавить данный сертификат в хранилище? 
  • И как его потом использовать при коннекте к серверу?


Это сообщение отредактировал(а) V1tal1us - 16.6.2007, 16:35
PM MAIL   Вверх
Entry_N3
  Дата 28.5.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Цитата(V1tal1us @ 16.6.2007,  16:33)
Namaste
...Сертификат  имеет стандарт ,как Вы уже наверное догадались из названия темы, PKCS #12. При попытке добавить этот сертификат в хранилище Жавы (начитался умных статей на форуме, и понял что сначала нужно сделать это) выдается ошибка "keytool error: java.lang.Exception: Input not an X.509 certificate".
Делал Я это так :

...

Так Вот уважаемые, вопрос состоит в том. 

  • Как же все таки добавить данный сертификат в хранилище? 

Есть ли ответ на заданный вопрос?
PM MAIL   Вверх
Alexandr87
Дата 28.5.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



Цитата(Entry_N3 @  28.5.2008,  17:12 Найти цитируемый пост)
    * Как же все таки добавить данный сертификат в хранилище? 
Есть ли ответ на заданный вопрос? 

в сановском провайдере есть реализация KeyStore для PKCS#12  

Это сообщение отредактировал(а) Alexandr87 - 28.5.2008, 14:33
PM Jabber   Вверх
Entry_N3
  Дата 28.5.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87, у меня ошибка с p7c-сертификатом. Можно подробнее?
PM MAIL   Вверх
Alexandr87
Дата 28.5.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



Entry_N3, в теме речь шла про p12.

p7 - тоже поддерживается

дял получения объекта import java.security.cert.X509Certificate сертификата можно использовать следующий код
Код

        CertificateFactory certFactory = CertificateFactory.getInstance("X509");
        FileInputStream fis = new FileInputStream("cert.cer");
        X509Certificate cert = 
                (X509Certificate)certFactory.generateCertificate(fis);
        fis.close();
        
        System.out.println(cert.toString());


Для простого импорта p7 сертификата в JKS хранилища можно воспользоваться следующей командой
Код

keytool -import -alias "myalias" -trustcacerts -keystore .keystore -file cert.crt


Цитата(Entry_N3 @  28.5.2008,  18:22 Найти цитируемый пост)
Alexandr87, у меня ошибка с p7c-сертификатом. Можно подробнее? 

действительно. хотите получить ответ - задавайте вопросы подробнее.

Это сообщение отредактировал(а) Alexandr87 - 28.5.2008, 16:59
PM Jabber   Вверх
Entry_N3
  Дата 28.5.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87

Пробую так
Код

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

public class Test_X509 {
    
    public static void main(String[] args) throws IOException, CertificateException, FileNotFoundException {
        CertificateFactory certFactory = CertificateFactory.getInstance("X509");
        FileInputStream fis;
        fis = new FileInputStream("c:\\un-named_certificate.p7c");
        X509Certificate cert;
        cert = (X509Certificate)certFactory.generateCertificate(fis);
        fis.close();
       
        System.out.println(cert.toString());
    }
}


ошибка 
Код

java.security.cert.CertificateException: Unable to initialize, java.io.IOException: DerInputStream.getLength(): lengthTag=127, too big.
    at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:176)
    at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:90)
    at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:389)
    at Test_X509.main(Test_X509.java:15)
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=127, too big.
    at sun.security.util.DerInputStream.getLength(DerInputStream.java:530)
    at sun.security.util.DerValue.<init>(DerValue.java:234)
    at sun.security.util.DerInputStream.getDerValue(DerInputStream.java:386)
    at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1659)
    at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:173)
    ... 3 more
Exception in thread "main" 



Пробую так
Код

keytool -import -alias "myalias" -trustcacerts -keystore .keystore -file un-named_certificate.p7c


ошибка 
Код

C:\>C:\j2sdk1.4.2_08\bin\keytool -import -alias
"myalias" -trustcacerts -keystore .keystore -file un-named_certificate.p7c
Enter keystore password:  9999999
keytool error: java.lang.Exception: Input not an X.509 certificate


Не получается импортить. Есть идеи?
PM MAIL   Вверх
Alexandr87
Дата 28.5.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



есть идея глянуть на эту строчку и сделать вывод.
Цитата(Entry_N3 @  28.5.2008,  22:09 Найти цитируемый пост)
keytool error: java.lang.Exception: Input not an X.509 certificate


Файл встудию, будем смотреть. Ну и заодно информацию откуда файл и т.д.

PM Jabber   Вверх
Entry_N3
Дата 29.5.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87, файл предоставить не могу; происхождение файла - сертификат, сгенерированный удостоверяющим центром KEON.
PM MAIL   Вверх
Alexandr87
Дата 29.5.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



Entry_N3, можете замаскировать некоторую информацию, которую не хотите показывать.
Интересуют просто основные элементы файла. Или файл бинарный?
PM Jabber   Вверх
Entry_N3
Дата 29.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87, файл бинарный.
PM MAIL   Вверх
Alexandr87
Дата 29.5.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



Entry_N3, попробуйте opensslем попарсить данные сертификат в der кодировке.
PM Jabber   Вверх
Entry_N3
Дата 31.5.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87, openssl - это утилита? где ее взять?
PM MAIL   Вверх
Alexandr87
Дата 31.5.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



PM Jabber   Вверх
Alexandr87
Дата 31.5.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



Где-то я тупанул, я походу скармливал в Java-code не pkcs7 сертификат. 

попробуйте так

Код

        PKCS7 p7 = new PKCS7(new FileInputStream("power.p7"));
        p7.getCertificates();




Это сообщение отредактировал(а) Alexandr87 - 3.6.2008, 10:20
PM Jabber   Вверх
Entry_N3
  Дата 3.6.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 8.2.2007

Репутация: нет
Всего: нет



Alexandr87, здорово. помогло.  smile 

А есть удобные методы получения информации о сертификате, например, чтобы построить лист сертификата в удобочитаемом для пользователя виде (срок действий, кому принадлежит, открытый ключ и т.д.)?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0997 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.