Hi! I have a task - get a SSLconnection between two computers. I have the
server and client code, but there is a error. Im just an student and learn
programming just a litle...And i have a litle practice in English, sorry
for it. If someone can help me to solve the prolem with error, It whould be
greatfull!
There is my server code(sorry,comments are russian):
<code>
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.*;
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";
com.sun.net.ssl.KeyManagerFactory keyManagerFactory =
KeyManagerFactory.getInstance(keyManagerAlgorithm);
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";
com.sun.net.ssl.TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(trustManagerAlgorithm);
//инициализировать производителя
доверенных диспетчеров
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";
secureRandom = SecureRandom.getInstance(secureRandomAlgorithm,
secureRandomProvider);
}//конец блока 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";
sslContext = SSLContext.getInstance(sslContextProvider);
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
</code>
And here is an error:
/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)
--
[Message sent by forum member 'phoma']
View Post: http://forums.java.net/node/871897