2017-05-09 1 views
1

상호 인증을 통해 나머지 클라이언트와 서버를 작성하고 있습니다. 클라이언트 측의 키스트 아는, 키스트 아와 트러스트 스토어로서 기능합니다. 서버 측의 키 스토어는, 키스트 아와 트러스트 스토어로서 기능합니다.만료 된 자체 서명 된 인증서를 수락하는 Tomcat 서버 및 HTTP 클라이언트

서버는 스프링 부트로 시작된 임베디드 Tomcat 서버입니다.

두 가지 테스트 중 하나는 서버가 만료 된 인증서가있는 클라이언트 연결을 거부하고 다른 하나는 만료 된 인증서가있는 서버에 클라이언트가 연결되지 않았 음을 확인하는 테스트입니다.

javatool을 사용하여 만든 truststore 및 키 저장소가 있습니다. 각각에는 각각 자체 서명 된 인증서와 관련 키가 들어 있습니다.

테스트 1

클라이언트 (서버의 키 스토어) 만료 된 인증서와 관련된 (클라이언트 키 저장소에서) 만료 된 키가 있습니다.

내 클라이언트가 서버에 요청하면 서버는 요청을 거부하는 대신 요청을 성공적으로 처리합니다. 서버는 요청을 거부해야합니다.

이 속성을 사용하여 tomcat의 신뢰 저장소를 구성하고 있습니다. 내가 놓친 게 있니?

server.ssl.trust-store={truststore location} 
server.ssl.trust-store-password={password} 
server.ssl.trust-alias={trust alias} 
server.ssl.client_auth=NEED 

테스트 2

서버 (클라이언트의 키 스토어) 만료 된 인증서와 관련된 (서버 키 저장소에서) 만료 된 키가 있습니다.

내 클라이언트 (Apache HTTP 클라이언트)가 서버에 요청을 보내면 요청이 성공한 것입니다. 이것은 잘못된 행동입니다. 문제점을 수정 한 SSL 컨텍스트 용 TrustStrategy를 새로 작성했습니다.

return new TrustStrategy() { 

     /** 
     * Checks to see if certificate has not expired yet. 
     * 
     * Always returns false so the trust manager is consulted. 
     */ 
     @Override 
     public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException 
     { 
      for (X509Certificate certificate : chain) 
      { 
       certificate.checkValidity(); 
      } 

      return false; 
     } 

    }; 

만료 된 인증서를 거부하는 것이 기본 동작이 아니어야합니까? Embedded Tomcat의 인증서 트러스트 관리자 란 무엇이며 만료 된 인증서를 거부하도록 어떻게 수정합니까?

감사합니다.

봄 부팅 1.4.0, 임베디드 톰캣 7.0.70을 사용하여, 아파치 HTTP 클라이언트 4.3.6

답변

0

나는이 문제를 알아 냈어.

X509TrustManager가 PKIXValidator를 사용하여 클라이언트 및 서버 인증서의 유효성을 검사하는 이유는 관찰 된 동작의 원인 때문입니다. 유효성 검사기에서 유효성을 검사하려는 인증서가 이미 신뢰 저장소에 있으면 유효성 검사를 수행하지 않고 자동으로 신뢰합니다.

만료를 수동으로 확인하는 TrustManagers를 자체 포장하여 만료 유효성을 사용할 수있었습니다.