Руководство программиста 2008-2011. Компания "лисси-крипто" - umotnas.ru o_O
Главная
Поиск по ключевым словам:
страница 1страница 2 ... страница 8страница 9
Похожие работы
Название работы Кол-во страниц Размер
Руководство по эксплуатации 2008 вниманию потребителей 1 91.17kb.
Инструкция программиста. Общие положения 1 24.53kb.
Инструкция руководителя организации n подпись Расшифровка подписи 1 71.38kb.
Руководство для врачей в 4-х томах / под общ ред. Н. В. Корнилова/ Т. 1 17.89kb.
Руководство программиста мс санкт-Петербург 2000г 18 2809.81kb.
Вопросы к экзамену по «прикладному программированию» 1 24.92kb.
Руководство по эксплуатации службы Volume 1 327.52kb.
Руководство к лабораторным работам Томск 2008 1 375.45kb.
Маерск: Легендарное прошлое – платформа для успешного будущего Компания «A. 1 42.42kb.
Руководство пользователя декларация соответствия 1 199.71kb.
Руководство пользователя Чебоксары-2008 Список сокращений арм автоматизированное... 1 270.79kb.
Аннотация курса 1 82.26kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Руководство программиста 2008-2011. Компания "лисси-крипто" - страница №1/9




LirJSSE - расширение безопасных сокетов с поддержкой алгоритмов ГОСТ для Java
Руководство программиста

©2008-2011. Компания "ЛИССИ-Крипто". Все права защищены


Содержание


Введение 6

Возможности и преимущества 7

Криптографическая функциональность, доступная с JSSE 8

Стандартный API JSSE 8

Провайдер SunJSSE 9

Провайдер LirJSSE 9

Соответствующая документация 10

Документация Java Secure Socket Extension 10

Документация по безопасности платформы Java 10

Экспортные вопросы по криптографии 10

Документация по криптографии 11

Документация по Secure Sockets Layer 11

Термины и определения 12

Аутентификация 12

Шифр-сьют 12

Сертификат 12

Криптографическая хэш-функция 12

Криптографический сервис-провайдер 12

Цифровая подпись 12

Шифрование и расшифровка 13

Протокол рукопожатия 13

Согласование ключей 13

Обмен ключами 13

Ключевые и доверенные менеджеры 13

Ключевые и доверенные хранилища 13

Код аутентификации сообщения 14

Криптография с открытым ключом 14

Протокол записи 14

Криптография с секретным ключом 15

Сеанс 15


Доверенные менеджеры 15

Доверенное хранилище 15

Обзор протокола Secure Sockets Layer (SSL) 16

Стек протокола TCP/IP с SSL 16

Зачем использовать SSL? 16

Как работает SSL 17

Криптографические процессы 17

Процесс SSL 21

Протокол SSL 22

Ссылки по SSL и TLS 25

Основные классы 26

Отношения между классами 26

Классы и интерфейсы ядра 27

Классы SocketFactory и ServerSocketFactory 27

Классы SSLSocketFactory и SSLServerSocketFactory 28

Классы SSLSocket и SSLServerSocket 29

Неблокированный ввод-вывод с SSLEngine 29

SSLEngine 31

Первые шаги 31

Генерация и обработка данных SSL/TLS 32

Статус операций 34

Блокированные задачи 37

Завершение 37

Интерфейс SSLSession 38

Класс HttpsURLConnection 39

Вспомогательные классы и интерфейсы 40

Класс SSLContext 41

Интерфейс TrustManager 42

Класс TrustManagerFactory 42

Интерфейс X509TrustManager 45

Интерфейс KeyManager 48

Класс KeyManagerFactory 48

Интерфейс X509KeyManager 50

Отношения между TrustManagers и KeyManagers 50

Второстепенные вспомогательные классы и интерфейсы 50

Интерфейс SSLSessionContext 50

Интерфейс SSLSessionBindingListener 51

Класс SSLSessionBindingEvent 51

Интерфейс HandShakeCompletedListener 51

Класс HandShakeCompletedEvent 51

Интерфейс HostnameVerifier 51

Класс X509Certificate 53

Настройка JSSE 54

Установочная папка 54

Настройка 54

Как задать свойство java.lang.system 55

Как задать свойство java.security.Security 55

Настройка реализации X509Certificate 56

Задание альтернативной реализации протокола HTTPS 56

Настройка реализации провайдера 57

Настройка умалчиваемых ключевых и доверенных хранилищ, их типов и паролей 58

Настройка умалчиваемых ключевых и доверенных менеджеров 60

Настройка провайдеров алгоритмов шифрования 61

Замечание для тех, кто реализует провайдеры 61

JCE и аппаратная поддержка ускорения/смарткарт 62

Использование JCE 62

Аппаратные акселераторы 62

Конфигурирование JSSE для использования смарткарт в качестве ключевых и доверенных хранилищ 62

Использование нескольких хранилищ и динамических хранилищ 63

Шифр-сьюты Kerberos 64

Требования Kerberos 64

Информация о подлинности субъекта 65

Менеджер безопасности 66

Дополнительные форматы ключевых хранилищ (PKCS12) 67

Особенности реализации PKCS#12 в LirJSSE 67

Структура хранилища 69

Структура данных хранилища 69

Структура дайджеста хранилища 69

RSA: 69

69


ГОСТ: 69

69


Структура данных секретного ключа 70

Структура обернутого секретного ключа 70

RSA: 70

70


ГОСТ: 70

70


Идентификационные данные секретного ключа 71

Структура зашифрованной цепочки сертификатов 72

Структура параметров обертки цепочки сертификатов 72

RSA: 72


72

ГОСТ: 72


72

Помощь в затруднительных ситуациях 73

Проблемы конфигурирования 73

CertificateException: (во время рукопожатия) 73

java.security.KeyStoreException: TrustedCertEntry not supported 73

Исключение при выполнении: SSL Service Not Available 73

Исключение: "No available certificate corresponding to the SSL cipher suites which are enabled" 74

Исключение при выполнении: No Cipher Suites in Common 74

Замедление первого обращения к JSSE 75

Программа, использующая класс HttpsURLConnection, генерирует ClassCastException в JSSE 1.0.x 75

Отсоединение сокета после отправки сообщения ClientHello 76

SunJSSE не может найти провайдера JCA/JCE, поддерживающего требуемый алгоритм, и генерирует NoSuchAlgorithmException 76

Отладочные утилиты 77

Примеры 78

Примеры программ 79

Преобразование небезопасных сокетов в безопасные 79

Пример сокетов без SSL 79

Пример сокетов с SSL 80

Запуск примера программы JSSE 81

Где найти код примера 82

Пример программы, иллюстрирующей безопасное сокетное соединение между клиентом и сервером 82

Конфигурационные требования 83

Запуск SSLSocketClient 83

Запуск SSLSocketClientWithTunneling 84

Запуск SSLSocketClientWithClientAuth 84

Запуск ClassFileServer 84

Запуск SSLSocketClientWithClientAuth с ClassFileServer 85

Пример программы, иллюстрирующей соединения HTTPS 85

Запуск URLReader 86

Запуск URLReaderWithOptions 86

Пример клиентской программы для HTTPS 87

Пример программы, иллюстрирующей безопасное соединение RMI 89

Пример программы, иллюстрирующей использование SSLEngine 89

Запуск SSLEngineSimpleDemo 90

Запуск сервера NIO 90

Создание ключевого хранилища для использования с JSSE 91

Создание простых ключевых и доверенных хранилищ 91

Приложение A: Стандартные названия 94

Приложение B: Присоединение провайдеров 95

Введение


Данные, передаваемые по сети, легко могут быть перехвачены теми, кому они не предназначены. Когда эти данные содержат конфиденциальную информацию, такую как пароли или номера кредитных карт, должны быть предприняты меры по защите данных от посторонних лиц. Также важно быть уверенными, что данные не были изменены, умышленно или неумышленно, в процессе передачи. Протоколы Secure Sockets Layer (SSL) и Transport Layer Security (TLS) были разработаны для обеспечения конфиденциальности и целостности данных при передаче их по сети.

Расширение безопасных сокетов Java Secure Socket Extension (JSSE) обеспечивает безопасные коммуникации в Интернет. Оно предоставляет средство программирования и реализацию для Java-версии протоколов SSL и TLS и включает функциональность шифрования данных, аутентификации сервера, целостности сообщений и, при необходимости, аутентификации клиента. Используя JSSE, разработчики могут предоставить для безопасной передачи данных между клиентом и сервером любой прикладной протокол, такой как Hypertext Transfer Protocol (HTTP), Telnet, или FTP, поверх TCP/IP. (См. Введение в SSL в Обзоре протокола Secure Sockets Layer (SSL).)

Абстрагируя сложные внутренние алгоритмы безопасности и механизмы “рукопожатия”, JSSE минимизирует риск создания малозаметных, но опасных уязвимостей в безопасности. Более того, оно упрощает прикладную разработку, служа в качестве строительного блока, который разработчики могут интегрировать непосредственно в свои приложения.

Первоначально JSSE было опциональным пакетом в Java TM 2 SDK, Standard Edition (J2SDK), v1.3. Начиная с версии J2SDK 1.4, JSSE было интегрировано в Java TM Standard Edition Development Kit

JSSE предоставляет как прикладной программный интерфейс (application programming interface – API), так и реализацию данного API. JSSE API дополняет “ядерные” сетевые и криптографические службы, определенные в пакетах java.security и java.net, предоставляя расширенные классы сетевых сокетов, доверенных менеджеров, ключевых менеджеров, контекстов SSL и фабрик сокетов для инкапсуляции создания сокетов. Поскольку API сокетов был основан на модели блокированного ввода-вывода, в JDK 5.0 был введен API неблокированного ввода-вывода SSLEngine, позволяющий реализации выбирать свои собственные методы ввода-вывода.

JSSE API способен поддерживать SSL версий 2.0 и 3.0, а также TLS 1.0. Эти протоколы безопасности инкапсулируют обычный двунаправленный поточный сокет, а JSSE API добавляет прозрачную поддержку для аутентификации, шифрования и защиты целостности. Реализация JSSE, поставляемая с Sun JRE, поддерживает SSL 3.0 и TLS 1.0. Она не реализует SSL 2.0.

Как отмечено выше, JSSE – это компонента безопасности на платформе Java SE, она базируется на тех же принципах разработки, которые применяются везде в Java Cryptography Architecture (JCA). Для криптографических компонент безопасности данная архитектура позволяет иметь независимость реализации и, где возможно, независимость алгоритмов. JSSE использует ту же архитектуру “провайдеров”, которая определена в JCA.

Другие компоненты безопасности на платформе Java SE включают Java Cryptography Extension (JCE), Java Authentication and Authorization Service (JAAS), и Java Security Tools. JSSE включает многие из концепций и алгоритмов JCE, но автоматически применяет их с простым поточным сокетовым API.

JSSE API был разработан таким образом, чтобы можно было подключить другие реализации протоколов SSL/TLS и инфрастуктуры открытых ключей (Public Key Infrastructure - PKI). Разработчики могут также предоставить альтернативную логику для определения необходимости проверки удаленных хостов или состава ключевого материала, высылаемого на удаленный хост.

Реализация LirJSSE компании «ЛИССИ-Крипто» базируется на реализации Sun JSSE версии 1.5.0 и добавляет возможности использования криптографических алгоритмов ГОСТ с протоколами SSL/TLS в соответствии с Internet Draft от 8 сентября 2005 года «GOST Cipher Suites for Transport Layer Security» компании «Крипто-Про». Данная реализация использует криптографический сервис-провайдер LirJCE компании «ЛИССИ-Крипто».


Возможности и преимущества


JSSE включает следующие важные возможности:

  • Включено в качестве стандартной компоненты JRE версии 1.4 и выше

  • Расширяемая архитектура, основанная на провайдерах

  • Реализовано 100% на чистой Java

  • Предоставляет поддержку API для SSL версий 2.0 и 3.0, TLS 1.0 и выше и реализацию SSL 3.0 и TLS 1.0.

  • Включает классы, которые могут быть конкретизированы для создания безопасных каналов (SSLSocket, SSLServerSocket и SSLEngine)

  • Предоставляет поддержку для согласования шифр-сьютов, что является частью рукопожатия SSL, используемого для инициализации или проверки безопасных коммуникаций

  • Предоставляет поддержку аутентификации клиента и сервера, что является частью обычного рукопожатия SSL

  • Предоставляет поддержку Hypertext Transfer Protocol (HTTP), инкапсулированного в протокол SSL (HTTPS), который обеспечивает доступ к данным, таким как веб-страницы, с помощью HTTPS

  • Предоставляет API управления сеансами сервера для управления сеансами SSL, резидентными в памяти

  • Предоставляет поддержку некоторых криптографических алгоритмов, обычно используемых в шифр-сьютах, включая перечисленные в следующей таблице:

Криптографическая функциональность, доступная с JSSE


Криптографический алгоритм *

Криптографический процесс

Длина ключа (бит)

RSA

Аутентификация и обмен ключами

512 и больше

RC4

Объемное шифрование

128
128 (40 эффективных)

DES

Объемное шифрование

64 (56 эффективных)
64 (40 эффективных)

Triple DES

Объемное шифрование

192 (112 эффективных)

AES

Объемное шифрование

256
128

Diffie-Hellman

Согласование ключей

1024
  512

DSA

Аутентификация

1024

ГОСТ Р 34.10-2001

Аутентификация и обмен ключами

256

ГОСТ 28147-89

Объемное шифрование

256

Internet Draft от 8 сентября 2005 года “GOST Cipher Suites for Transport Layer Security” компании “Крипто-Про”

Согласование ключей

256

* Замечание: Реализация SunJSSE использует JavaTM Cryptography Extension (JCE) для всех криптографических алгоритмов. Реализация LirJSSE, дополнительно к этому, использует сервис-провайдера LirJCE компании «ЛИССИ-Крипто» для применения российских криптографических алгоритмов.

следующая страница >>