Java Secure Socket Extension (JSSE) библиотеки являются частью стандартной версии платформы J2SE 1.4. Предыдущие версии необходима установка расширением стандартной библиотеки, либо из эталонной реализации вс или с третьей стороной. Поддержка библиотеки предлагают для безопасной обработке HTTP просьб и ответов, также известного как HTTP или HTTPS над SSL. Более конкретно, JSSE библиотеки предоставляют функции, необходимые для аутентификации, шифрования и целостности. Эта поддержка гарантирует, что данные передаются по сети является частным и не передается в открытом виде (то есть, текст, который доступен для всеобщего просмотра и понятно).

Javax.net.ssl пакет содержит API для общения через Secure Sockets Layer (SSL) и Transport Layer Security (TLS) протоколы. SSL и TLS это две тесно связанные протоколов для обеспечения сетевого трафика. Аутентификация осуществляется через использование сертификатов X.509 — это аутентификация доступна как для клиента и сервера, а не только на сервере. Кроме того, предложение JSSE библиотек кодирования посредством секретного ключа и сертификата обмен открытыми ключами. Шифрование гарантирует целостность сообщения, предотвращение лицом в середине связи от перехвата сообщений, изменяя его, и передать его как если бы она не менялась.

Если вы не заинтересованы в прямом использовании сокетов и отправки HTTP самих команд, вы можете использовать HttpsURLConnection классов, которая была продемонстрирована на 10 февраля 2004 Технология Совет HttpURLConnection Использование веб-страниц. HttpsURLConnection класс включает в себя полную поддержку таких функций, как переадресация, подключение попыток, прокси переговоров, и (в J2SE V5) Cookies.

Если Вы заинтересованы в работе с сокетами напрямую, либо для HTTP / HTTPS сделок или для пользовательских приложений уровня использования, вы можете объединить javax.net.ssl пакет с заводов в javax.net. Это позволяет связываться через защищенное соединение HTTPS, над которым работает. Если вы знакомы с общения через соединение HTTP сокета, вы увидите, что работать с SSL-сокет основаны не на много отличается. Вы просто рассуждают над другой порт, 443 вместо 80, для нормального движения Сети.

Чтобы обеспечить защищенную связь, нужно сначала приобрести Socket завода. С завода, вы создаете сокет для конкретного хоста и порт. Вместо вызова конструктора сокета, вы спросите SocketFactory для сокета. SocketFactory вы используете версию по умолчанию SSL завода, javax.net.ssl.SSLSocketFactory:


   SocketFactory factory = SSLSocketFactory.getDefault()

   Socket socket = 

           factory.createSocket(hostname, HTTPS_PORT)

После этого процесс по существу такой же, как использование HTTP основе сокета. Вы посылаете запрос на сервер, а также прослушивать для ответа:


      // Send Request

      OutputStream outputStream = 

        socket.getOutputStream()

      PrintWriter out = new PrintWriter(outputStream)

      out.print("GET / HTTP/1.0\r\n\r\n")

      out.flush()



      // Get Response

      InputStream inputStream =

        socket.getInputStream()

      InputStreamReader inputStreamReader =

        new InputStreamReader(inputStream)

      BufferedReader in =

        new BufferedReader(inputStreamReader)

 

      String line; 

 

      while ((line = in.readLine()) != null) { 

        System.out.println(line)

      

Вот программа, SSLClient, что ставит все куски вместе:


   import java.io.BufferedReader;

   import java.io.InputStream;

   import java.io.InputStreamReader;

   import java.io.IOException;

   import java.io.OutputStream;

   import java.io.PrintWriter;

   import java.net.Socket;

   import javax.net.SocketFactory;

   import javax.net.ssl.SSLSocketFactory;



   public class SSLClient {

     private static final int HTTPS_PORT = 443;



     public static void main(String args[]) {



       if (args.length == 0) {

         System.err.println

           ("Please provide a hostname to connect to");

         System.exit(-1);

       }



       String hostname = args[0];



       try {



         // Get the default SSL socket factory

         SocketFactory factory =

           SSLSocketFactory.getDefault();



         // Using socket factory, get SSL socket to port on host

         Socket socket =

           factory.createSocket(hostname, HTTPS_PORT);



         // Send request to get root

         // Be sure to end string with two sets of carriage

         // return - newline characters.

         OutputStream outputStream =

           socket.getOutputStream();

         PrintWriter out = new PrintWriter(outputStream);

         out.print("GET / HTTP/1.0\r\n\r\n");

         out.flush();



         // Fetch response

         InputStream inputStream =

           socket.getInputStream();

         InputStreamReader inputStreamReader =

           new InputStreamReader(inputStream);

         BufferedReader in =

           new BufferedReader(inputStreamReader);



         String line;



         while ((line = in.readLine()) != null) {

           System.out.println(line);

         }



         // Close everything

         out.close();

         in.close();

         socket.close();



       catch (IOException e) {

         System.err.println("Problems talking to " + hostname);

         e.printStackTrace();

       }

     }

   }

При запуске программы, можно передать имя хоста вы хотите общаться. Рассмотрим Tomcat Бег на месте, либо подключиться к sun.com. Обратите внимание, что в порту постоянный SSLClient является 443. Вы можете изменить порт HTTPS постоянной в программе, если вам нужно, или вы можете изменить программу таким образом, что постоянное указан в командной строке.

Результаты общения через порт HTTPS могут отличаться от результатов, которые выдаются при обмене данными по регулярному порта HTTP. Рассмотрим сохранении объема производства и его просмотра в вашем браузере. Вы должны обрезать стандартных значений заголовков, таких как дата и время и сервер. Конечно, вы должны оставить на сервере значения, если вы заинтересованы в том, что сервер сайта использует. Например, подключение к www.sun.com через SSLClient программы:

java SSLClient www.sun.com

раскрывает использование SunONE WebServer 6.0 в различных областях заголовок:

HTTP/1.1 200 OK
Server: SunONE WebServer 6.0
Date: Tue, 03 Aug 2004 22:30:32 GMT
P3p: policyref="http://www.sun.com/p3p/Sun_P3P_Policy.xml",
...

Клиенты должны проверить полномочия получил, чтобы убедиться, что они говорили принимающей они думают они. Использование socket.getSession (), getPeerCertificates () или getPeerPrincipal (). Это нетривиальное для кого-то перенаправить соединение с вредоносными хозяин, и это является одним из способов, чтобы проверить против этого. Вы можете использовать интерфейс HostnameVerifier проверить имя хоста.

Заботятся о безопасности разработчиков (и пользователей) следует рассмотреть возможность загрузки неограниченного Java Cryptography Extension (ОКО) политика файлы с J2SE 1.4.2 страница загрузки. Версия ОКО, которая поставляется с J2SE 1.4 является сильным, но ограниченным. При условии, что вы живете в одной из подходящих стран, добавил keysize поддержки обеспечивает гораздо более сильный уровень криптографии JSSE возможностей, чем в одиночку.

Чтобы узнать больше о ОКО см. ОКО справочник.

Чтобы узнать больше о JSSE см. JSSE справочник.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.