저는 restlet을 사용하여 서버 인증과 클라이언트 인증 모두로 HTTPS 채널을 생성하고 있습니다. 서버 인증서 (즉, 서버가 인증서를 노출하고 클라이언트에서 신뢰하는 데 문제가 있음)는 문제가 없지만 클라이언트 인증서를 보내는 방법에 대해서는 잘 모릅니다. 다음은 서버 중요한 코드 아래 :Restlet 보내는 클라이언트 인증서
Server server = component.getServers().add(Protocol.HTTPS, config.getInt("server.port"));
Series<Parameter> parameters = server.getContext().getParameters();
parameters.add("keystorePath", config.getString("keystore.path"));
parameters.add("keystorePassword", config.getString("keystore.password"));
parameters.add("keyPassword", config.getString("key.password"));
parameters.add("keystoreType",config.getString("keystore.type"));
/* true */
parameters.add("needClientAuthentication", config.getString("need.client.authentication"));
는 클라이언트 구성은 다음과 같은 경우 : needClientAuthentication이 거짓
if(config.getBoolean("truststore.use")){
Series<Parameter> parameters = client.getContext().getParameters();
parameters.add("truststorePath", config.getString("truststore.path"));
parameters.add("truststorePassword", config.getString("truststore.password"));
// parameters.add("trustPassword", "password");
parameters.add("truststoreType", config.getString("truststore.type"));
parameters.add("keystorePath", config.getString("keystore.path"));
parameters.add("keystorePassword", config.getString("keystore.password"));
parameters.add("keyPassword", config.getString("key.password"));
parameters.add("keystoreType",config.getString("keystore.type"));
}
때까지 모든 작품을 좋아. needClientAuthentication을 true로 설정하면 실패하기 시작하며 클라이언트 인증서를 보내지 않아서 예상됩니다. 예외가 오르지 followint 메시지가 있습니다
Software caused connection abort: recv failed
을하지만 난 아무 생각이없고 클라이언트 인증서를 전송하는 방법에 대한 예를 찾을 수 없습니다.
클라이언트의 키 스토어 정보를 추가하고 서버의 제약 조건을 wantClientAuthentication
으로 완화했지만 서버에서 인증서가없는 것 같습니다.
적어도 클라이언트의 키 저장소 매개 변수와 서버의 신뢰 저장소 매개 변수를 설정해야합니다. – Bruno
@ Bruno에게 제안 해 주셔서 감사합니다. 클라이언트에 keystore 정보를 추가하고 wantClientAuthentication에 대한 비용을 완화했지만 인증서가 클라이언트에서 전송되지 않는 것 같습니다 (서블릿 및 request.getClientInfo(). getCertificates()에 대한 필터가 있음) 빈 목록을 반환합니다 –
@ 브루노, 서버 인증 작업에 트러스트 스토어를 구성하여 작동합니다. 불행히도 request.getClientInfo(). getCertificates()는 여전히 비어 있습니다. –