我正在使用Java SimpleFramework开发支持SSL / TLS的服务器。我想知道如何在服务器上验证客户端身份验证。
在服务器端,我正在扩展org.simpleframework.http.core.ContainerServer
并覆盖process()
方法,如下所示:
@Override
public void process(Socket socket) throws IOException {
// Ensures client authentication is required
socket.getEngine().setNeedClientAuth(true);
super.process(socket);
}
这是为了确保客户端进行身份验证。 请注意,如果我移除了对setNeedClientAuth()
的通话,我的程序就能完美运行。
在客户端,使用以下代码:
HttpClient client = new HttpClient();
Credentials defaultcreds = new UsernamePasswordCredentials("username", "password");
client.getState().setCredentials(AuthScope.ANY, defaultcreds);
GetMethod get = new GetMethod("https://url.to.server");
get.setDoAuthentication(true);
client.executeMethod(get);
启用身份验证要求时,我收到以下异常:
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
我猜这与传递的凭证永远不会被验证的事实有关。
总结一下我的问题,我该如何继续验证服务器上的客户端?