users@glassfish.java.net

SSLServer - creating SSLsocket

From: <forums_at_java.net>
Date: Wed, 7 Dec 2011 19:39:19 -0600 (CST)

Hi! I am a rusian student, and i have a task to create a SSLServer and
SSLClient code example, and set an SSL connection between two computers. This
must be simple destop application.

I have a Server code, but there is an error. I get a code example from
Javorsky book. but did some thing wrong. If some one can help me, please do
it. I would be greatfull!!! I realy want to learn it and remove the error. 

there is Server code(sorry, that comments are russian):

[SRC JS]

package SSLserverPackage;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.*;
import javax.net.*;
import java.io.*;
import java.net.*;
import java.security.*;
import java.util.Scanner;
public class SSLServer
{
    private static final int port_num = 7777;
    private SSLServerSocket s;//инициализируем объект
s класса ServerSocket
    private String rsa;
    private int rport;
    private SSLSocket sckserver ;
    private String keystoreType = "JKS";
    private String keystoreFilename =
"/home/abc/glassfish-3.1.1/mq/etc/samplestore";
    private static Scanner scan2 = null;
    private static OutputStream os;
    private String keyStorePassword;
    private FileInputStream fileinputstream;
   
    public SSLServer(String kfsn)
    {
          
   
    };
    
 
   public void initServer (String ksfn,String kst,String pswd,String str)
    {
    keystoreFilename =ksfn;
    keystoreType =kst;
    keyStorePassword =pswd;
    //получить и загрузить стандартный
объект keystore
    java.security.KeyStore keyStore = null;
       
        try {//начало блока try
            try {//начало блока try
            //получить экземпляр
хранилища ключей
            keyStore =KeyStore.getInstance("JKS");
        } //конец блока try
        catch (KeyStoreException ex) {//начало блока catch
           
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
        }//конец блока catch
    //загрузить из потока файла хранилизе
по заданному паролю       
     fileinputstream = new FileInputStream(ksfn);
                pswd = "samplestorepass";
        char[] keyStorePasswordInChars =
keyStorePassword.toCharArray();
        try {//начало блока try
            keyStore.load(fileinputstream,
keyStorePasswordInChars);
        } //конец блока try
          catch (IOException ex) {//начало блока catch
           
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchAlgorithmException ex) {
           
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
        } catch (CertificateException ex) {
           
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
        }//конец блока catch
        } //конец блока try
      
        catch(NoSuchAlgorithmException noAlgorithmEx)
        {//начало блока catch
            noAlgorithmEx.printStackTrace();
        }
        catch(UnrecoverableKeyException unrecoverableKeyException)
        {
            unrecoverableKeyException.printStackTrace();
        }   
        catch(KeyStoreException keyStoreException)
        {
            keyStoreException.printStackTrace();
        }   //конец блока catch 
       
   com.sun.net.ssl.KeyManager[] keymanagers= null;
            try
            {//
   String keyManagerAlgorithm = "SunX509";
     [color=#FF0000] com.sun.net.ssl.KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(keyManagerAlgorithm); [/color]
           String keyManagerPassword = "samplestorepass";   
           keyManagerFactory.init(keyStore,
keyStorePassword.toCharArray());
           keymanagers = keyManagerFactory.getKeyManagers();
            }
        catch(NoSuchAlgorithmException noAlgorithmEx)
        {
            noAlgorithmEx.printStackTrace();
        }
        catch(UnrecoverableKeyException unrecoverableKeyException)
        {
            unrecoverableKeyException.printStackTrace();
        }   
        catch(KeyStoreException keyStoreException)
        {
            keyStoreException.printStackTrace();
        }  
   com.sun.net.ssl.TrustManager[] trustedManagers=null;
   try{//начало блока try
       //создать производителя доверенных
диспетчеров
       String  trustManagerAlgorithm = "SunX509";
     [color=#FF0000]   com.sun.net.ssl.TrustManagerFactory
trustManagerFactory =
TrustManagerFactory.getInstance(trustManagerAlgorithm);[/color]
       //инициализировать производителя
доверенных диспетчеров
       trustManagerFactory.init(keyStore);
       //получить доверенные диспетчеры
       trustedManagers = trustManagerFactory.getTrustManagers();
   }//окончание блока try
   catch(NoSuchAlgorithmException noAlgorithmEx)
        {//начало блока catch
            noAlgorithmEx.printStackTrace();
        }
   catch(KeyStoreException keyStoreException)
        {
            keyStoreException.printStackTrace();
        }   //конец блока catch
   //получить защищенное случайное число
  java.security.SecureRandom secureRandom =null;
  try
  {//начало блока try
    //создать экземпляр защищенного
случайного числа при заданных алгоритме и
провайдере
  String secureRandomAlgorithm = "SHA1PRNG";
  String secureRandomProvider = "SUN";
  [color=#FF0000] secureRandom =
SecureRandom.getInstance(secureRandomAlgorithm, secureRandomProvider);
[/color]
  }//конец блока try
  catch(NoSuchAlgorithmException noAlgorithmEx)
        {//начало блока catch
            noAlgorithmEx.printStackTrace();
        }
   catch(NoSuchProviderException NoProviderEx)
        {
            NoProviderEx.printStackTrace();
        }   //конец блока catch
 
  com.sun.net.ssl.SSLContext sslContext =null;
  try
  {      //Создать SSL-контекст при заданном
провайдере контекста
     String  sslContextProvider = "SUN";
     [color=#FF0000]  sslContext =
SSLContext.getInstance(sslContextProvider); [/color]
     sslContext.init(keymanagers, trustedManagers, secureRandom);
  }
  catch(NoSuchAlgorithmException noAlgorithmEx)
        {//начало блока catch
            noAlgorithmEx.printStackTrace();
        }
   catch(KeyManagementException KeyManagementEx)
        {
            KeyManagementEx.printStackTrace();
        }   //конец блока catch
  javax.net.ssl.SSLServerSocketFactory sslServerSocketFactory
=sslContext.getServerSocketFactory();
            try {//начало блока try
 sslServerSocketFactory =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
       //coздение экз. socketfactory класса
SSLServerSocketFactory для создания сокета
      
      if (sslServerSocketFactory != null)
      {
          System.out.println("создана socketfactory");
      }
    try{//начало лока try   
      s = (SSLServerSocket) sslServerSocketFactory. createServerSocket
(port_num);
      if (s != null)
      {
          System.out.println("Создан серверный
сокет");
          System.out.println("IP адрес серверного
сокета: " + s.getLocalSocketAddress().toString());
          System.out.println("Ожидание ответа
клиента");
      }}//конец блока try
    catch (IOException ex1) {//начало блока catch
               
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex1);
            }//конец блока catch
 try{ 
 
    
     sckserver = (SSLSocket) s.accept(); //устанавливаем
соединение с клиентом
     rport = sckserver.getLocalPort(); //        
     rsa = sckserver.getRemoteSocketAddress().toString();// 
  if (sckserver != null)
      {
          System.out.println("Подключение клиента
");
          System.out.println("Подключен клиент ip: "
+ rsa + " порт: " + rport);//вывод сообщения 
      }
        else
        {
            System.out.println("Клиент
неподключен");
        }               
        }//окончание блока try
     catch (IOException ex1) {//начало блока catch
               
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex1);
            }//конец блока catch
 try {//начало блока try
            BufferedReader socketBr = new BufferedReader(new
InputStreamReader(sckserver.getInputStream()));
        if (socketBr != null)
      {
          System.out.println("Принимаем входящий
поток в объект socketBr");
      } else { System.out.println("Входящий поток в
объект socketBr не принят");
        }
   //try{ //начало блока    try      
        PrintWriter outs = new PrintWriter(new
OutputStreamWriter(sckserver.getOutputStream()));//создание
объекта outs класса PrintWriter
   if (outs != null)
      {
          System.out.println("Формируем выходящий
поток в объект outs");
      } else { System.out.println("Выходящий поток не
сформирован");
        }
   String line = null;
        while ((line = socketBr.readLine()) != null)//в объект
line записывается строка прочтанная из
            //объекта br (входящий поток от
клиента к серверу)
        {//начало цикла while
          outs.println(line);//отправка строки из
out на консоль
          outs.flush();
                }//конец цикла while
  } //окончание блока  try
   catch (IOException ex1) {//начало блока catch
                Logger.getLogger("описание
ошибки:" + ex1);
            }//конец блока catch
       }//окончание блока try
finally {//начало блока finaly
         if (sckserver != null) {//начало цикла
          try {//начало блока try
            sckserver.close();
          } //окончание блока try
          catch (IOException ignored) {//начало блока
catch
          }//окончание блока catch
        }//окончание цикла if
      }//окончание блока finaly
        };//окончание конструктора initServer
    }//окончание класса SSLServer
[/SRC]

Errors:

[color=#FF0000]/home/abc/share/SSLserver/src/SSLserverPackage/SSLServer.java:90:
incompatible types
found   : javax.net.ssl.KeyManagerFactory
required: com.sun.net.ssl.KeyManagerFactory
   com.sun.net.ssl.KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(keyManagerAlgorithm);  
/home/abc/share/SSLserver/src/SSLserverPackage/SSLServer.java:111:
incompatible types
found   : javax.net.ssl.TrustManagerFactory
required: com.sun.net.ssl.TrustManagerFactory
       com.sun.net.ssl.TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(trustManagerAlgorithm);
/home/abc/share/SSLserver/src/SSLserverPackage/SSLServer.java:147:
incompatible types
found   : javax.net.ssl.SSLContext
required: com.sun.net.ssl.SSLContext
     sslContext = SSLContext.getInstance(sslContextProvider);
Note: /home/abc/share/SSLserver/src/SSLserverPackage/SSLServer.java uses or
overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors
/home/abc/share/SSLserver/nbproject/build-impl.xml:603: The following error
occurred while executing this line:
/home/abc/share/SSLserver/nbproject/build-impl.xml:284: Compile failed; see
the compiler error output for details.
BUILD WITH FAILURE (total time: 0 seconds)[/color]


--
[Message sent by forum member 'phoma']
View Post: http://forums.java.net/node/871898