Невозможно использовать SSL с RMI из -за ConnectionExceptionJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно использовать SSL с RMI из -за ConnectionException

Сообщение Anonymous »

Я не могу сделать SSL с RMI из -за ConnectException . Это сообщение об ошибке: < /p>

Код: Выделить всё

Unexpected error: Connection refused to host: 10.101.37.128; nested exception is:
java.net.ConnectException: Connection refused
< /code>
Я создал магазин ключей и Truststore из руководства и этого от Oracle. Я скопировал код и внес изменения на основе моих потребностей. Что привело к приведенной выше ошибке. Код на этом этапе выглядит следующим образом: 
[b] register.java[/b]
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class Register {
public static void main(String[] args) throws Exception {
int port = 1040;
System.setProperty("javax.net.ssl.trustStore", "client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "123123");

System.setProperty("javax.net.ssl.keyStore", "server.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "123123");

Registry reg = LocateRegistry.createRegistry(port, new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory());

Server server = new Server();
reg.rebind("orderingsystem", server);

System.out.println("Server running");
}
}
remoteInterface.java

Код: Выделить всё

import java.rmi.*;
import java.sql.SQLException;

public interface RemoteInterface extends Remote {
public boolean loginUser() throws RemoteException, SQLException;
}
server.java >

Код: Выделить всё

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import java.sql.SQLException;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class Server extends UnicastRemoteObject implements RemoteInterface {
public Server() throws RemoteException {
super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
}

@Override
public boolean loginUser() throws RemoteException, SQLException {
return true;
}
}
app.java [/b]

Код: Выделить всё

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class App {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("orderingsystem", 1040);
RemoteInterface obj = (RemoteInterface) registry.lookup("orderingsystem");
obj.loginUser();
} catch (Exception e) {
e.printStackTrace();
}
}
}

< /code>
Я сделал еще несколько поиска, и я нашел этот вопрос, и я соответственно обновил свой код. Тем не менее, я получаю одинаковую ошибку, только имя хоста отличается. < /P>
Unexpected error: Unknown host: orderingsystem; nested exception is:
java.net.UnknownHostException: orderingsystem

< /code>
Тогда я подумал, что это может быть: < /p>
super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory(null, null, true));
< /code>
Поэтому я обновил его до < /p>
super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
< /code>
Но это не имело значения. Другие ресурсы, которые я нашел: < /p>
Этот документ Oracle. В частности, я следовал файлам hello.java, helloclient.java и helloimpl.java. Что приведет меня к другой ошибке.  < /P>
java.rmi.ConnectIOException: non-JRMP server at remote endpoint
at java.rmi/sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:252)
at java.rmi/sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:204)
at java.rmi/sun.rmi.server.UnicastRef.newCall(UnicastRef.java:344)
at java.rmi/sun.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_Stub.java:116)
at dcoms.App.main(App.java:13)
Итак, я следил за этим ответом, но не применил, потому что в файле app.java я использую метод в своем методе GetReigstry для предоставления имени хоста, я также обновил номер порта, чтобы он не использовал 1040 в случае, если оно было занято. Итак, вот обновленная app.java и registry.java .
App.javaобразно

Код: Выделить всё

import java.net.InetAddress;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class App {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry(InetAddress.getLocalHost().getHostName(), 9999);
RemoteInterface obj = (RemoteInterface) registry.lookup("OrderSystem");
obj.loginUser();
} catch (Exception e) {
e.printStackTrace();
}
}
}
app.java основан на helloclient.java также по oracle.

Код: Выделить всё

package dcoms.remote;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class Register {
public static void main(String[] args) throws Exception {
int port = 9999;

System.setProperty("javax.net.ssl.keyStore", "keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "123123");

System.setProperty("javax.net.ssl.trustStore", "truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "123123");

Registry reg = LocateRegistry.createRegistry(port, new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory());

Server server = new Server();
reg.rebind("OrderSystem", server);

System.out.println("Server running");
}
}
Другие решения, которые я нашел, мало что делают для меня. />https://groups.google.com/g/prometheus- ... rkeq?pli=1 - та же проблема, но для того, что называется экспортером JMX. Asker отредактировал какой -то файл конфигурации, вероятно, не применяется, потому что я не использую экспортер JMX. />https://stackoverflow.com/a/3580314/13447006 - который включает SSL, но я понятия не имею, что это значит. В итоге я искал «Включить SSL Java RMI» и о создании магазина ключей, TrustStore и сертификата. Но у меня уже есть эти файлы, и я использовал их, поэтому я не уверен, что происходит. Я даже попытался воссоздать магазин ключей, TrustStore и Cert, но та же проблема. Если это важно, я сделал хранилище ключей, TrustStore и Cert, как это: < /p>

Код: Выделить всё

keytool -genkeypair \
-alias server \
-keyalg RSA \
-keysize 2048 \
-keystore server.keystore \
-validity 365

keytool -exportcert \
-alias server \
-keystore server.keystore \
-file server.crt

keytool -importcert \
-alias server \
-file server.crt \
-keystore client.truststore
Это четыре файла в проекте в их окончательной форме для вашего удобства.

Код: Выделить всё

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class Register {
public static void main(String[] args) throws Exception {
int port = 9999;

System.setProperty("javax.net.ssl.keyStore", "server.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "123123");

System.setProperty("javax.net.ssl.trustStore", "client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "123123");

Registry reg = LocateRegistry.createRegistry(port, new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory());

Server server = new Server();
reg.rebind("OrderSystem", server);

System.out.println("Server running");
}
}
remoteInterface.java

Код: Выделить всё

import java.rmi.*;
import java.sql.SQLException;

public interface RemoteInterface extends Remote {
public boolean loginUser() throws RemoteException, SQLException;
}
server.java >

Код: Выделить всё

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import java.sql.SQLException;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class Server extends UnicastRemoteObject implements RemoteInterface {
public Server() throws RemoteException {
super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
}

@Override
public boolean loginUser() throws RemoteException, SQLException {
return true;
}
}
app.java [/b]

Код: Выделить всё

package dcoms;

import java.net.InetAddress;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import dcoms.remote.RemoteInterface;

public class App {
public static void main(String[] args) {
System.out.println("Starting");
try {
Registry registry = LocateRegistry.getRegistry(InetAddress.getLocalHost().getHostName(), 9999);
RemoteInterface obj = (RemoteInterface) registry.lookup("OrderSystem");
System.out.println(obj.loginUser());
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("Ended");
}
}
Я ценю время, которое вы прочитали, чтобы прочитать все это.


Подробнее здесь: https://stackoverflow.com/questions/795 ... nexception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Нет строки сообщения об исключении для ConnectionException
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Нет строки сообщения об исключении для ConnectionException
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Javax.net.ssl.sslprotocolexception: SSL Handshake прерван: ssl = 0x7fa2258640: сбой в библиотеке SSL, обычно ошибка прот
    Anonymous » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Javax.net.ssl.sslprotocolexception: SSL Handshake прерван: ssl = 0x7fa2258640: сбой в библиотеке SSL, обычно ошибка прот
    Anonymous » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • RMI через SSL с одним портом на сервере
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»