2014-09-05 6 views
0

저는 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으로 완화했지만 서버에서 인증서가없는 것 같습니다.

+0

적어도 클라이언트의 키 저장소 매개 변수와 서버의 신뢰 저장소 매개 변수를 설정해야합니다. – Bruno

+0

@ Bruno에게 제안 해 주셔서 감사합니다. 클라이언트에 keystore 정보를 추가하고 wantClientAuthentication에 대한 비용을 완화했지만 인증서가 클라이언트에서 전송되지 않는 것 같습니다 (서블릿 및 request.getClientInfo(). getCertificates()에 대한 필터가 있음) 빈 목록을 반환합니다 –

+0

@ 브루노, 서버 인증 작업에 트러스트 스토어를 구성하여 작동합니다. 불행히도 request.getClientInfo(). getCertificates()는 여전히 비어 있습니다. –

답변

0

문제가 발견되었습니다. 분명히 서버는 신뢰 저장소가 서버에 구성되기 전에는 클라이언트에 인증서를 요청하기 시작하지 않습니다. 트러스트 저장소를 구성하면 상호 인증이 올바르게 수행됩니다.