users@glassfish.java.net

Re: SSLServer - creating SSLsocket

From: Bernhard Thalmayr <bernhard.thalmayr_at_painstakingminds.com>
Date: Thu, 8 Dec 2011 10:08:20 +0100

Have you read the JSSE reference guide? It provides some samples as well.

However I do not see how this is related to GlassFish?

What's the high-level use-case?

-Bernhard

On Thu, Dec 8, 2011 at 2:39 AM, <forums_at_java.net> wrote:

> 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<http://forums.java.net/node/871898>
>
>
>


-- 
IT-Consulting Bernhard Thalmayr
- Painstaking Minds -
83620 Vagen (Munich area)
Germany