Java (ТМ) Расширение Защищенного сокета для JavaTM 2 Standard Edition, v5.0 Пример кода README ---------------------------------------------------------------------- СОДЕРЖАНИЕ ---------------------------------------------------------------------- - Введение - Демонстрационный KeyStores - Примеры кода - Поиск и устранение неисправностей ---------------------------------------------------------------------- Введение ---------------------------------------------------------------------- Этот пакет примера кода JSSE обеспечивает некоторые простые примеры как JSSE может использоваться, чтобы защитить связь в Java (ТМ) сеть среда. Выборки действительно требуют некоторого знакомства с Java и API JSSE, таким образом, пожалуйста, консультируйтесь с соответствующей документацией для получения дополнительной информации. JDK: http://java.sun.com/doc/ JSSE: Документация для API JSSE может быть найдена в Sun Реализация JDK или пакеты документации, или в http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERefGuide.html Если Вы используете реализацию JSSE от поставщика кроме Sun, также консультируйтесь с этим документация реализации JSSE. Следуйте за любым инструкции, данные поставщиком относительно того, как сконфигурировать поставщик систем обеспечения безопасности, набор пути к классам (в случае необходимости), включает обработчик протокола https, определите прокси-серверы HTTPS и так далее. ---------------------------------------------------------------------- Демонстрационные Базы доверенных сертификатов ---------------------------------------------------------------------- Этот пакет включает демонстрационные файлы KeyStore, которые используются с пример кода. Они сохранены в формате KeyStore "JKS", который является форматом значения по умолчанию, используемым реализацией JDK Sun. (Если другой формат KeyStore требуется, JDK должен будет быть сконфигурирован распознать новый формат значения по умолчанию.) JSSE использует следующий сертификат файлы KeyStore, чтобы аутентифицировать клиенты и серверы. */testkeys Эти файлы используются примерами кода в качестве источника из общественности/закрытого ключа и материала сертификата. В клиентские каталоги программы, testkeys файлы содержат запись сертификата для талисмана Java "Герцог". В каталоги программы сервера (./sockets/server и rmi), файл содержит запись сертификата для сервер "localhost". Пример кода ожидает, что testkeys файл будет в текущий рабочий каталог. ОТМЕТЬТЕ: Они - очень простые сертификаты и не соответствующий для продуктивной среды, но их должно быть достаточным для того, чтобы выполнить выборки сюда. Пароль для этих keystores: пароль samplecacerts Этот файл базы доверенных сертификатов очень подобен запасу JDK cacerts файл, которому это содержит доверие сертификаты от нескольких поставщиков. Это также содержит доверяемые сертификаты от "Герцога" и "localhost" выше. Пароль для этого keystore является тем же самым как Начальный пароль cacert JDK: changeit Пожалуйста, см. документацию своего провайдера для как сконфигурировать расположение Вашего доверяемого свидетельства файл. ПРИМЕЧАНИЯ ДЛЯ ТОГО, ЧТОБЫ РАБОТАТЬ С JDK Sun: --------------------------------- Пользователи Sun JDK могут определить расположение база доверенных сертификатов при использовании одного из следующих методы (и описываются более полно на солнце JDK Справочник JSSE): 1. Системные свойства: java-Djavax.net.ssl.trustStore=samplecacerts \ -Djavax.net.ssl.trustStorePassword=changeit Приложение 2. Установите файл в: <дом Java>/lib/security/jssecacerts 3. Установите файл в: <дом Java>/lib/security/cacerts Если Вы выбираете 2) или 3), убеждаетесь, что заменили это файл с производством cacerts файл прежде развертывание. Sun утилита JDK "keytool" может использоваться, чтобы генерировать альтернативу сертификаты и keystore файлы. ******************************************* ВАЖНОЕ ПРИМЕЧАНИЕ: Проверьте Свой cacerts Файл Так как Вы доверяете АВАРИИ cacerts файлу как объекты для того, чтобы подписаться и выпуская сертификаты другим объектам, следует управлять cacerts зарегистрируйте тщательно. cacerts файл должен содержать только сертификаты о объекты и АВАРИЯ Вы доверяете. Это - Ваша обязанность проверить доверяемые корневые сертификаты CA, связанные в cacerts файле и, делают Ваш имейте доверительные решения. Удалить недоверяемый сертификат CA из файл cacerts, используйте удалить опцию keytool команды. Вы можете найдите cacerts файл в каталоге установки JRE. Свяжитесь с Вашим системный администратор, если у Вас нет разрешения, чтобы отредактировать этот файл. ---------------------------------------------------------------------- Примеры кода ---------------------------------------------------------------------- Пакет примера кода повреждается в несколько каталогов, основанных на стиль соединений SSL. URL URLReader.java Этот пример иллюстрирует использование URL, чтобы получить доступ к ресурсам на a безопасный сайт. По умолчанию этот пример соединяется с www.verisign.com, но это может быть адаптировано, чтобы соединиться с ClassFileServer ниже. Чтобы сделать так, URL должен будет быть измененный, чтобы указать на корректный адрес. Вам, возможно, также понадобится к обновите сертификат сервера или обеспечьте пользовательское HostNameVerifier (см. HttpsURLConnection), если имя узла в сертификат сервера не соответствует имя узла URL. СПЕЦИАЛЬНЫЕ ЗАМЕЧАНИЯ: Если Вы находитесь позади брандмауэра, Вы, возможно, должны установить "https.proxyHost" и "https.proxyPort" Система свойства, чтобы правильно определить прокси. ИСПОЛЬЗОВАНИЕ: java URLReader URLReaderWithOptions.java Этот пример очень подобен URLReader выше, но позволяет Вам устанавливать системные свойства через параметры основной метод, а не как-D опции к среде выполнения Java среда. ИСПОЛЬЗОВАНИЕ: java URLReaderWithOptions [-h proxyhost] [-p proxyport] \ [-k protocolhandlerpkgs] [-c ciphersarray] proxyHost = защищают имя узла прокси-сервера (https.proxyHost) proxyPort = защищают порт прокси-сервера (https.proxyPort) protocolhandlerpkgs = "|" разделенный список обработчиков протокола (java.protocol.handler.pkgs) ciphersarray = включал комплектам шифра как списку разделенных запятой значений (https.cipherSuites) сокеты сервер ClassServer.java ClassFileServer.java Эта выборка демонстрирует реализацию a минивеб-сервер, который может обслужить простой HTTP или HTTPS запросы (только метод GET поддерживается). По умолчанию сервер не использует SSL/TLS. Однако, параметр командной строки включает SSL/TLS. Запросы должны иметь форму: ДОБЕРИТЕСЬ / <имя файла> ИСПОЛЬЗОВАНИЕ: java порт ClassFileServer docroot [TLS [истина]] порт = порт, на котором находится сервер docroot = корень локальной иерархии каталогов TLS = дополнительный флаг, который включает SSL/TLS службы истина = дополнительный флаг, который требует этого клиенты аутентифицируйте себя. Эта опция требует та поддержка SSL/TLS быть включенным. Защищенный сервер прибывает предварительно установленный с сертификатом для "localhost". Если сервер находится на том же самом узле как клиент, URL формы "https://localhost:port/file" должны передать проверка имени узла. Если Вы хотите работать отдельный узлы, следует создать новый сертификат узла для используемое имя узла https, иначе будет именем узла проблемы несоответствия. (Отметьте: в Java это может быть исправлено в HttpsURLConnection class, обеспечивая пользовательское Реализация HostnameVerifier, или в browswer "Примите" луг диалоговое окно, которое описывает имя узла несоответствие.) Если Вы используете разновидность TLS (HTTPS), помните к определите https протокол: https://hostname:2001/dir1/file1 ОТМЕТЬТЕ: Если Вы используете браузер, такой как Интернет Microsoft Проводник или Навигатор Netscape Вы будете видеть диалоговое окно раскрывающийся с сообщением, что приложение не делает распознайте "localhost" сертификат. Это нормально потому что самоподписанный сертификат, представляемый браузеру первоначально не доверяют. При желании Вы могли импортируйте "localhost" сертификат в браузер база доверенных сертификатов. клиент SSLSocketClient.java Этот пример демонстрирует, как использовать SSLSocket в качестве клиента к отправьте запрос HTTP и получите ответ от сервера HTTPS. По умолчанию этот пример соединяется с www.verisign.com, но это может легко быть адаптировано, чтобы соединиться с ClassFileServer выше. (Отметьте: ПОЛУЧИТЬ запрос должен быть немного изменен, так, чтобы файл был определен.) Это приложение предполагает, что клиент не находится позади брандмауэра. ИСПОЛЬЗОВАНИЕ: java SSLSocketClient SSLSocketClientWithClientAuth.java Этот пример подобен SSLSocketClient выше, но это показывает, как установить ключевого менеджера, чтобы сделать клиент аутентификация если требующийся сервером. Это приложение также предполагает, что клиент не находится позади a брандмауэр. ИСПОЛЬЗОВАНИЕ: java SSLSocketClientWithClientAuth размещает порт requestedfilepath ОТМЕТЬТЕ: Если Вы соединяетесь с ClassFileServer приложение выше, убедиться, что это может найти "герцога" 's учетные данные. См. "Демонстрационные Базы ключей" раздел выше. SSLSocketClientWithTunneling.java Этот пример иллюстрирует, как сделать прокси, Туннелирующий к доступу a безопасный веб-сервер из-за брандмауэра. Свойства System "https.proxyHost" и "https.proxyPort" используются, чтобы сделать сокетное соединение с узлом прокси, и тогда SSLSocket является многоуровневым к тому же Сокет. ИСПОЛЬЗОВАНИЕ: java SSLSocketClientWithTunneling rmi Hello.java HelloImpl.java RMISSLClientSocketFactory.java RMISSLServerSocketFactory.java HelloClient.java Этот пример иллюстрирует, как использовать RMI по транспорту SSL уровень используя JSSE. Сервер выполняет HelloImpl, который устанавливает внутренний реестр RMI (вместо того, чтобы использовать rmiregistry команда). Клиент выполняет HelloClient и связывается защищенное соединение. Установка этой выборки может быть немного хитрой, вот необходимые шаги: % javac *.java % rmic HelloImpl % java \ -Djava.security.policy=policy \ HelloImpl (выполненный в другом окне) % java HelloClient (выполненный в другом окне) Для сервера менеджер безопасности RMI будет установлен, и предоставленный файл политики предоставляет, что разрешение принимает соединения от любого узла. Очевидно, предоставление всех полномочий не должен быть сделан в продуктивной среде. Вы будете нуждаться дать этому соответствующие рестриктивные сетевые полномочия, такой как: разрешение java.net. SocketPermission \ "hostname:1024-", "принимают, решение"; Кроме того, этот пример может быть легко обновлен, чтобы работать с новый стандартный SSL/TLS-based Фабрики Сокета RMI. Сделать это, измените файл HelloImpl.java, чтобы использовать: javax.rmi.ssl. SslRMIClientSocketFactory javax.rmi.ssl. SslRMIServerSocketFactory вместо: RMISSLClientSocketFactory RMISSLServerSocketFactory Эти новые классы используют SSLSocketFactory.getDefault () и SSLServerSocketFactory.getDefault (), таким образом, Вы будете нуждаться к сконфигурируйте систему должным образом, чтобы определить местоположение Вашего ключа и доверия материал. ПРИМЕЧАНИЯ ДЛЯ ТОГО, ЧТОБЫ РАБОТАТЬ С JDK Sun: --------------------------------- Если Вы используете новые упомянутые выше классы, можно определить базы ключей, используя свойства System: -Djavax.net.ssl.keyStore=testkeys -Djavax.net.ssl.keyStorePassword=passphrase sslengine SSLEngineSimpleDemo.java Этот пример демонстрирует очень простой клиент/сервер приложение используя SSLEngines. Это демонстрирует API без принятие во внимание ввода-вывода или вычисляет проблемы. ИСПОЛЬЗОВАНИЕ: java SSLEngineSimpleDemo ОТМЕТЬТЕ: есть намного более обширная доступная выборка SSLEngine. Пожалуйста, см. /sample/nio/server каталог для a NIO/SSLEngine-based сервер HTTP/HTTPS. ---------------------------------------------------------------------- Поиск и устранение неисправностей ---------------------------------------------------------------------- Один из наиболее распространенных трудных людей имеет в использовании JSSE, то, когда JSSE получает сертификат, который неизвестен механизму, который делает доверительные решения. Если неизвестный сертификат получается, доверие механизм выдаст исключение, говоря, что сертификат недоверяемый. Удостоверьтесь, что корректная база доверенных сертификатов используется, и что JSSE устанавливается и конфигурируется правильно. Если Вы используете учетные данные "localhost" или "герцога", убедитесь это Вы правильно определили расположение samplecacerts файла, иначе Ваше приложение не будет работать. (См. "Демонстрационные Базы ключей" для больше информации.) Механизм отладки SSL может использоваться, чтобы исследовать такое доверие проблемы. См. документацию реализации для получения дополнительной информации об этом предмете.