具有SSL客户端身份验证的Java RMI:获取客户端x509Certificate

时间:2014-02-22 22:26:18

标签: java ssl rmi x509certificate

是否可以在远程服务器实现中获取对连接客户端的x509Certificate对象的引用?

Rewrited RMISocketFactory:

RMISocketFactory.setSocketFactory(
        new java.rmi.server.RMISocketFactory() {
            ...
            @Override
            public ServerSocket createServerSocket(int port)
                    throws IOException {
                SSLServerSocket socket = ...
                socket.setNeedClientAuth(true);
                return socket;
            }
        });

远程对象:

public class RMIServer extends UnicastRemoteObject implements IRMIServer {

    public RMIServer() throws RemoteException {
        super(0);
    }

    @Override
    public String foo() throws RemoteException {
        System.out.println(getClientCertificate().getSubjectDN().getName()); // something like this?
    }
}

1 个答案:

答案 0 :(得分:1)

你已经遇到了RMI的一个主要设计缺陷。 RMI服务器几乎不可能获得客户端证书,反之亦然,因为实际上不可能知道哪个SSLSocket正在用于当前呼叫。他们应该提供一种方法来附加类似HandshakeCompletionListener的东西。

相关问题