<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FNetwork_Protocol%2FSSL_Server_Socket</id>
		<title>Java/Network Protocol/SSL Server Socket - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FNetwork_Protocol%2FSSL_Server_Socket"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Network_Protocol/SSL_Server_Socket&amp;action=history"/>
		<updated>2026-04-21T18:46:02Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Network_Protocol/SSL_Server_Socket&amp;diff=8917&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Network_Protocol/SSL_Server_Socket&amp;diff=8917&amp;oldid=prev"/>
				<updated>2010-06-01T07:21:30Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 07:21, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Network_Protocol/SSL_Server_Socket&amp;diff=8916&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Network_Protocol/SSL_Server_Socket&amp;diff=8916&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A simple single-threaded proxy server ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2004 David Flanagan.  All rights reserved.&lt;br /&gt;
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.&lt;br /&gt;
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.&lt;br /&gt;
 * You may study, use, and modify it for any non-commercial purpose,&lt;br /&gt;
 * including teaching and use in open-source projects.&lt;br /&gt;
 * You may distribute it non-commercially as long as you retain this notice.&lt;br /&gt;
 * For a commercial use license, or to purchase the book, &lt;br /&gt;
 * please visit http://www.davidflanagan.ru/javaexamples3.&lt;br /&gt;
 */&lt;br /&gt;
//package je3.net;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.ServerSocket;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
/**&lt;br /&gt;
 * This class implements a simple single-threaded proxy server.&lt;br /&gt;
 */&lt;br /&gt;
public class SimpleProxyServer {&lt;br /&gt;
  /** The main method parses arguments and passes them to runServer */&lt;br /&gt;
  public static void main(String[] args) throws IOException {&lt;br /&gt;
    try {&lt;br /&gt;
      // Check the number of arguments&lt;br /&gt;
      if (args.length != 3)&lt;br /&gt;
        throw new IllegalArgumentException(&amp;quot;Wrong number of args.&amp;quot;);&lt;br /&gt;
      // Get the command-line arguments: the host and port we are proxy&lt;br /&gt;
      // for and the local port that we listen for connections on.&lt;br /&gt;
      String host = args[0];&lt;br /&gt;
      int remoteport = Integer.parseInt(args[1]);&lt;br /&gt;
      int localport = Integer.parseInt(args[2]);&lt;br /&gt;
      // Print a start-up message&lt;br /&gt;
      System.out.println(&amp;quot;Starting proxy for &amp;quot; + host + &amp;quot;:&amp;quot; + remoteport + &amp;quot; on port &amp;quot; + localport);&lt;br /&gt;
      // And start running the server&lt;br /&gt;
      runServer(host, remoteport, localport); // never returns&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.err.println(e);&lt;br /&gt;
      System.err.println(&amp;quot;Usage: java SimpleProxyServer &amp;quot; + &amp;quot;&amp;lt;host&amp;gt; &amp;lt;remoteport&amp;gt; &amp;lt;localport&amp;gt;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method runs a single-threaded proxy server for host:remoteport on the&lt;br /&gt;
   * specified local port. It never returns.&lt;br /&gt;
   */&lt;br /&gt;
  public static void runServer(String host, int remoteport, int localport) throws IOException {&lt;br /&gt;
    // Create a ServerSocket to listen for connections with&lt;br /&gt;
    ServerSocket ss = new ServerSocket(localport);&lt;br /&gt;
    // Create buffers for client-to-server and server-to-client transfer.&lt;br /&gt;
    // We make one final so it can be used in an anonymous class below.&lt;br /&gt;
    // Note the assumptions about the volume of traffic in each direction.&lt;br /&gt;
    final byte[] request = new byte[1024];&lt;br /&gt;
    byte[] reply = new byte[4096];&lt;br /&gt;
    // This is a server that never returns, so enter an infinite loop.&lt;br /&gt;
    while (true) {&lt;br /&gt;
      // Variables to hold the sockets to the client and to the server.&lt;br /&gt;
      Socket client = null, server = null;&lt;br /&gt;
      try {&lt;br /&gt;
        // Wait for a connection on the local port&lt;br /&gt;
        client = ss.accept();&lt;br /&gt;
        // Get client streams. Make them final so they can&lt;br /&gt;
        // be used in the anonymous thread below.&lt;br /&gt;
        final InputStream from_client = client.getInputStream();&lt;br /&gt;
        final OutputStream to_client = client.getOutputStream();&lt;br /&gt;
        // Make a connection to the real server.&lt;br /&gt;
        // If we cannot connect to the server, send an error to the&lt;br /&gt;
        // client, disconnect, and continue waiting for connections.&lt;br /&gt;
        try {&lt;br /&gt;
          server = new Socket(host, remoteport);&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
          PrintWriter out = new PrintWriter(to_client);&lt;br /&gt;
          out.print(&amp;quot;Proxy server cannot connect to &amp;quot; + host + &amp;quot;:&amp;quot; + remoteport + &amp;quot;:\n&amp;quot; + e + &amp;quot;\n&amp;quot;);&lt;br /&gt;
          out.flush();&lt;br /&gt;
          client.close();&lt;br /&gt;
          continue;&lt;br /&gt;
        }&lt;br /&gt;
        // Get server streams.&lt;br /&gt;
        final InputStream from_server = server.getInputStream();&lt;br /&gt;
        final OutputStream to_server = server.getOutputStream();&lt;br /&gt;
        // Make a thread to read the client&amp;quot;s requests and pass them&lt;br /&gt;
        // to the server. We have to use a separate thread because&lt;br /&gt;
        // requests and responses may be asynchronous.&lt;br /&gt;
        Thread t = new Thread() {&lt;br /&gt;
          public void run() {&lt;br /&gt;
            int bytes_read;&lt;br /&gt;
            try {&lt;br /&gt;
              while ((bytes_read = from_client.read(request)) != -1) {&lt;br /&gt;
                to_server.write(request, 0, bytes_read);&lt;br /&gt;
                to_server.flush();&lt;br /&gt;
              }&lt;br /&gt;
            } catch (IOException e) {&lt;br /&gt;
            }&lt;br /&gt;
            // the client closed the connection to us, so close our&lt;br /&gt;
            // connection to the server. This will also cause the&lt;br /&gt;
            // server-to-client loop in the main thread exit.&lt;br /&gt;
            try {&lt;br /&gt;
              to_server.close();&lt;br /&gt;
            } catch (IOException e) {&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        };&lt;br /&gt;
        // Start the client-to-server request thread running&lt;br /&gt;
        t.start();&lt;br /&gt;
        // Meanwhile, in the main thread, read the server&amp;quot;s responses&lt;br /&gt;
        // and pass them back to the client. This will be done in&lt;br /&gt;
        // parallel with the client-to-server request thread above.&lt;br /&gt;
        int bytes_read;&lt;br /&gt;
        try {&lt;br /&gt;
          while ((bytes_read = from_server.read(reply)) != -1) {&lt;br /&gt;
            to_client.write(reply, 0, bytes_read);&lt;br /&gt;
            to_client.flush();&lt;br /&gt;
          }&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
        }&lt;br /&gt;
        // The server closed its connection to us, so we close our&lt;br /&gt;
        // connection to our client.&lt;br /&gt;
        // This will make the other thread exit.&lt;br /&gt;
        to_client.close();&lt;br /&gt;
      } catch (IOException e) {&lt;br /&gt;
        System.err.println(e);&lt;br /&gt;
      } finally { // Close the sockets no matter what happens.&lt;br /&gt;
        try {&lt;br /&gt;
          if (server != null)&lt;br /&gt;
            server.close();&lt;br /&gt;
          if (client != null)&lt;br /&gt;
            client.close();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cipher Socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * JBoss, Home of Professional Open Source.&lt;br /&gt;
 * Copyright 2008, Red Hat Middleware LLC, and individual contributors&lt;br /&gt;
 * as indicated by the @author tags. See the copyright.txt file in the&lt;br /&gt;
 * distribution for a full listing of individual contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * This is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as&lt;br /&gt;
 * published by the Free Software Foundation; either version 2.1 of&lt;br /&gt;
 * the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this software; if not, write to the Free&lt;br /&gt;
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA&lt;br /&gt;
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import javax.crypto.Cipher;&lt;br /&gt;
import javax.crypto.CipherInputStream;&lt;br /&gt;
import javax.crypto.CipherOutputStream;&lt;br /&gt;
import javax.crypto.spec.IvParameterSpec;&lt;br /&gt;
import javax.crypto.SecretKey;&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author  Scott.Stark@jboss.org&lt;br /&gt;
 */&lt;br /&gt;
public class CipherSocket extends Socket&lt;br /&gt;
{&lt;br /&gt;
   private Cipher cipher;&lt;br /&gt;
   private Socket delegate;&lt;br /&gt;
   String algorithm;&lt;br /&gt;
   SecretKey key;&lt;br /&gt;
   /** Creates a new instance of CipherSocket */&lt;br /&gt;
   public CipherSocket(String host, int port, String algorithm, SecretKey key)&lt;br /&gt;
      throws IOException&lt;br /&gt;
   {&lt;br /&gt;
      super(host, port);&lt;br /&gt;
      this.algorithm = algorithm;&lt;br /&gt;
      this.key = key;&lt;br /&gt;
   }&lt;br /&gt;
   public CipherSocket(Socket delegate, String algorithm, SecretKey key)&lt;br /&gt;
      throws IOException&lt;br /&gt;
   {&lt;br /&gt;
      this.delegate = delegate;&lt;br /&gt;
      this.algorithm = algorithm;&lt;br /&gt;
      this.key = key;&lt;br /&gt;
   }&lt;br /&gt;
   public InputStream getInputStream() throws IOException&lt;br /&gt;
   {&lt;br /&gt;
      InputStream is = delegate == null ? super.getInputStream() : delegate.getInputStream();&lt;br /&gt;
      Cipher cipher = null;&lt;br /&gt;
      try&lt;br /&gt;
      {&lt;br /&gt;
         cipher = Cipher.getInstance(algorithm);&lt;br /&gt;
         int size = cipher.getBlockSize();&lt;br /&gt;
         byte[] tmp = new byte[size];&lt;br /&gt;
         Arrays.fill(tmp, (byte)15);&lt;br /&gt;
         IvParameterSpec iv = new IvParameterSpec(tmp);&lt;br /&gt;
         cipher.init(Cipher.DECRYPT_MODE, key, iv);&lt;br /&gt;
      }&lt;br /&gt;
      catch(Exception e)&lt;br /&gt;
      {&lt;br /&gt;
         e.printStackTrace();&lt;br /&gt;
         throw new IOException(&amp;quot;Failed to init cipher: &amp;quot;+e.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
      CipherInputStream cis = new CipherInputStream(is, cipher);&lt;br /&gt;
      return cis;&lt;br /&gt;
   }&lt;br /&gt;
   public OutputStream getOutputStream() throws IOException&lt;br /&gt;
   {&lt;br /&gt;
      OutputStream os = delegate == null ? super.getOutputStream() : delegate.getOutputStream();&lt;br /&gt;
      Cipher cipher = null;&lt;br /&gt;
      try&lt;br /&gt;
      {&lt;br /&gt;
         cipher = Cipher.getInstance(algorithm);&lt;br /&gt;
         int size = cipher.getBlockSize();&lt;br /&gt;
         byte[] tmp = new byte[size];&lt;br /&gt;
         Arrays.fill(tmp, (byte)15);&lt;br /&gt;
         IvParameterSpec iv = new IvParameterSpec(tmp);&lt;br /&gt;
         cipher.init(Cipher.ENCRYPT_MODE, key, iv);&lt;br /&gt;
      }&lt;br /&gt;
      catch(Exception e)&lt;br /&gt;
      {&lt;br /&gt;
         throw new IOException(&amp;quot;Failed to init cipher: &amp;quot;+e.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
      CipherOutputStream cos = new CipherOutputStream(os, cipher);&lt;br /&gt;
      return cos;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating an SSL Client Socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import javax.net.SocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLSocketFactory;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    int port = 443;&lt;br /&gt;
    String hostname = &amp;quot;hostname&amp;quot;;&lt;br /&gt;
    SocketFactory socketFactory = SSLSocketFactory.getDefault();&lt;br /&gt;
    Socket socket = socketFactory.createSocket(hostname, port);&lt;br /&gt;
&lt;br /&gt;
    InputStream in = socket.getInputStream();&lt;br /&gt;
    OutputStream out = socket.getOutputStream();&lt;br /&gt;
    // Read from in and write to out...&lt;br /&gt;
    in.close();&lt;br /&gt;
    out.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating an SSL Server Socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.net.ServerSocket;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import javax.net.ServerSocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLServerSocketFactory;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    int port = 443;&lt;br /&gt;
    ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault();&lt;br /&gt;
    ServerSocket ssocket = ssocketFactory.createServerSocket(port);&lt;br /&gt;
    Socket socket = ssocket.accept();&lt;br /&gt;
    InputStream in = socket.getInputStream();&lt;br /&gt;
    OutputStream out = socket.getOutputStream();&lt;br /&gt;
    // Read from in and write to out...&lt;br /&gt;
    in.close();&lt;br /&gt;
    out.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== implements HandshakeCompletedListener ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import javax.net.ssl.HandshakeCompletedEvent;&lt;br /&gt;
import javax.net.ssl.HandshakeCompletedListener;&lt;br /&gt;
import javax.net.ssl.SSLSocket;&lt;br /&gt;
import javax.net.ssl.SSLSocketFactory;&lt;br /&gt;
class MyHandshakeListener implements HandshakeCompletedListener {&lt;br /&gt;
  public void handshakeCompleted(HandshakeCompletedEvent e) {&lt;br /&gt;
    System.out.println(&amp;quot;Using cipher suite: &amp;quot; + e.getCipherSuite());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();&lt;br /&gt;
    SSLSocket socket = (SSLSocket) factory.createSocket(&amp;quot;127.0.0.1&amp;quot;, 8080);&lt;br /&gt;
    String[] suites = socket.getSupportedCipherSuites();&lt;br /&gt;
    socket.setEnabledCipherSuites(suites);&lt;br /&gt;
    socket.addHandshakeCompletedListener(new MyHandshakeListener());&lt;br /&gt;
    socket.startHandshake();&lt;br /&gt;
    System.out.println(&amp;quot;Just connected to &amp;quot; + socket.getRemoteSocketAddress());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Secure Client ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
import java.net.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import javax.net.*;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
import javax.net.ssl.*;&lt;br /&gt;
import javax.crypto.*;&lt;br /&gt;
public class SecureClient {&lt;br /&gt;
   public static final int PORT = 10000;&lt;br /&gt;
   public static void main(String[] args) throws Exception {&lt;br /&gt;
      String host = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
      SocketFactory sf = SSLSocketFactory.getDefault();&lt;br /&gt;
      SSLSocket sock = (SSLSocket) sf.createSocket(host, PORT);&lt;br /&gt;
      System.out.println(&amp;quot;Server connected&amp;quot;);&lt;br /&gt;
      InputStream rawIn = sock.getInputStream( );&lt;br /&gt;
      BufferedReader in = new BufferedReader(new InputStreamReader(rawIn));&lt;br /&gt;
      System.out.println(in.readLine( ));&lt;br /&gt;
      sock.close() ;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Secure Communication with JSSE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.OutputStream;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import javax.net.SocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLSocketFactory;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    SocketFactory factory = SSLSocketFactory.getDefault();&lt;br /&gt;
    Socket socket = factory.createSocket(&amp;quot;127.0.0.1&amp;quot;, 8080);&lt;br /&gt;
    OutputStream outputStream = socket.getOutputStream();&lt;br /&gt;
    PrintWriter out = new PrintWriter(outputStream);&lt;br /&gt;
    out.print(&amp;quot;GET / HTTP/1.0\r\n\r\n&amp;quot;);&lt;br /&gt;
    out.flush();&lt;br /&gt;
    InputStream inputStream = socket.getInputStream();&lt;br /&gt;
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);&lt;br /&gt;
    BufferedReader in = new BufferedReader(inputStreamReader);&lt;br /&gt;
    String line;&lt;br /&gt;
    while ((line = in.readLine()) != null) {&lt;br /&gt;
      System.out.println(line);&lt;br /&gt;
    }&lt;br /&gt;
    out.close();&lt;br /&gt;
    in.close();&lt;br /&gt;
    socket.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Secure Login based on SSL Server Socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.OutputStreamWriter;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import javax.net.ssl.SSLServerSocket;&lt;br /&gt;
import javax.net.ssl.SSLServerSocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLSocket;&lt;br /&gt;
import javax.net.ssl.SSLSocketFactory;&lt;br /&gt;
class LoginClient {&lt;br /&gt;
  public LoginClient() {&lt;br /&gt;
    try {&lt;br /&gt;
      SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();&lt;br /&gt;
      SSLSocket socket = (SSLSocket) socketFactory.createSocket(&amp;quot;localhost&amp;quot;, 7070);&lt;br /&gt;
      PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));&lt;br /&gt;
      String userName = &amp;quot;MyName&amp;quot;;&lt;br /&gt;
      output.println(userName);&lt;br /&gt;
      String password = &amp;quot;MyPass&amp;quot;;&lt;br /&gt;
      output.println(password);&lt;br /&gt;
      output.flush();&lt;br /&gt;
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));&lt;br /&gt;
      String response = input.readLine();&lt;br /&gt;
      System.out.println(response);&lt;br /&gt;
      output.close();&lt;br /&gt;
      input.close();&lt;br /&gt;
      socket.close();&lt;br /&gt;
    } catch (IOException ioException) {&lt;br /&gt;
      ioException.printStackTrace();&lt;br /&gt;
    } finally {&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    new LoginClient();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
class LoginServer {&lt;br /&gt;
  private static final String CORRECT_USER_NAME = &amp;quot;Java&amp;quot;;&lt;br /&gt;
  private static final String CORRECT_PASSWORD = &amp;quot;HowToProgram&amp;quot;;&lt;br /&gt;
  private SSLServerSocket serverSocket;&lt;br /&gt;
  public LoginServer() throws Exception {&lt;br /&gt;
    SSLServerSocketFactory socketFactory = (SSLServerSocketFactory) SSLServerSocketFactory&lt;br /&gt;
        .getDefault();&lt;br /&gt;
    serverSocket = (SSLServerSocket) socketFactory.createServerSocket(7070);&lt;br /&gt;
  }&lt;br /&gt;
  private void runServer() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      try {&lt;br /&gt;
        System.err.println(&amp;quot;Waiting for connection...&amp;quot;);&lt;br /&gt;
        SSLSocket socket = (SSLSocket) serverSocket.accept();&lt;br /&gt;
        BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));&lt;br /&gt;
        PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));&lt;br /&gt;
        String userName = input.readLine();&lt;br /&gt;
        String password = input.readLine();&lt;br /&gt;
        if (userName.equals(CORRECT_USER_NAME) &amp;amp;&amp;amp; password.equals(CORRECT_PASSWORD)) {&lt;br /&gt;
          output.println(&amp;quot;Welcome, &amp;quot; + userName);&lt;br /&gt;
        } else {&lt;br /&gt;
          output.println(&amp;quot;Login Failed.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        output.close();&lt;br /&gt;
        input.close();&lt;br /&gt;
        socket.close();&lt;br /&gt;
      } catch (IOException ioException) {&lt;br /&gt;
        ioException.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    LoginServer server = new LoginServer();&lt;br /&gt;
    server.runServer();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Secure Server ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
import java.net.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import javax.net.*;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
import javax.net.ssl.*;&lt;br /&gt;
import javax.crypto.*;&lt;br /&gt;
public class SecureServer {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
         ServerSocketFactory ssf = SSLServerSocketFactory.getDefault();&lt;br /&gt;
         SSLServerSocket ss = (SSLServerSocket) ssf.createServerSocket(98999);&lt;br /&gt;
         Socket sock = ss.accept();&lt;br /&gt;
         ss.close();&lt;br /&gt;
         OutputStream rawOut = sock.getOutputStream();&lt;br /&gt;
         PrintWriter out = new PrintWriter(new OutputStreamWriter(rawOut));&lt;br /&gt;
         out.println(new java.util.Date().toString());&lt;br /&gt;
         out.flush();&lt;br /&gt;
         sock.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simple Client for secure Socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import javax.net.SocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLSocketFactory;&lt;br /&gt;
public class SSLSimpleClient {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    SocketFactory sf = SSLSocketFactory.getDefault();&lt;br /&gt;
    Socket s = sf.createSocket(args[0], Integer.parseInt(args[1]));&lt;br /&gt;
    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));&lt;br /&gt;
    PrintWriter pw = new PrintWriter(s.getOutputStream());&lt;br /&gt;
    pw.println(&amp;quot;from jexp.&amp;quot;);&lt;br /&gt;
    pw.flush();&lt;br /&gt;
    System.out.println(br.readLine());&lt;br /&gt;
    s.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simple server for Secure socket ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.ServerSocket;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import javax.net.ServerSocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLServerSocketFactory;&lt;br /&gt;
public class SSLSimpleServer extends Thread {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    ServerSocketFactory ssf = SSLServerSocketFactory.getDefault();&lt;br /&gt;
    ServerSocket ss = ssf.createServerSocket(9096);&lt;br /&gt;
    System.out.println(&amp;quot;Ready...&amp;quot;);&lt;br /&gt;
    while (true) {&lt;br /&gt;
      new SSLSimpleServer(ss.accept()).start();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private Socket sock;&lt;br /&gt;
  public SSLSimpleServer(Socket s) {&lt;br /&gt;
    sock = s;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    try {&lt;br /&gt;
      BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));&lt;br /&gt;
      PrintWriter pw = new PrintWriter(sock.getOutputStream());&lt;br /&gt;
      String data = br.readLine();&lt;br /&gt;
      pw.println(data);&lt;br /&gt;
      pw.close();&lt;br /&gt;
      sock.close();&lt;br /&gt;
    } catch (IOException ioe) {&lt;br /&gt;
      // Client disconnected&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SSL Server Demo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import javax.net.ssl.SSLServerSocket;&lt;br /&gt;
import javax.net.ssl.SSLServerSocketFactory;&lt;br /&gt;
import javax.net.ssl.SSLSocket;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();&lt;br /&gt;
    SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8080);&lt;br /&gt;
    String[] suites = serverSocket.getSupportedCipherSuites();&lt;br /&gt;
    for (int i = 0; i &amp;lt; suites.length; i++) {&lt;br /&gt;
      System.out.println(suites[i]);&lt;br /&gt;
    }&lt;br /&gt;
    serverSocket.setEnabledCipherSuites(suites);&lt;br /&gt;
    String[] protocols = serverSocket.getSupportedProtocols();&lt;br /&gt;
    for (int i = 0; i &amp;lt; protocols.length; i++) {&lt;br /&gt;
      System.out.println(protocols[i]);&lt;br /&gt;
    }&lt;br /&gt;
    SSLSocket socket = (SSLSocket) serverSocket.accept();&lt;br /&gt;
    socket.startHandshake();&lt;br /&gt;
    System.out.println(socket.getRemoteSocketAddress());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>