2011-10-19 7 views
2

B2B 인 웹 서비스에 대해 SSL 연결을 설정하려고하며 서버에서 클라이언트 인증을 수행해야합니다. 서버는 일반 사용자가 브라우저를 통해 액세스 할 수있는 URL을 호스트하기 때문에 호스트에 대한 모든 연결이 클라이언트 인증을 수행해야하는 것은 아닙니다. 특정 URL 만 client-auth가 발신자 X509 인증서의 유효성을 검사하도록 요구합니다. 그래서 우리는 우리의 서명 CERT는 내가 제공 할 수 있습니다 당신은 내가 키 스토어가 구성한 볼 수 있듯이Java App Server 용 사용자 정의 SSL TrustManager

 <Connector protocol="HTTP/1.1" SSLEnabled="true" 
     port="8443" address="${jboss.bind.address}" sslProtocol = "TLS" 
     scheme="https" secure="true" enableLookups="true" clientAuth="false" 
     keystoreFile="${jboss.server.home.dir}/conf/.myKeyStore" 
     keystorePass="password1" /> 

: 우리는 I 커넥터 구성과 같이 그래서 톰캣 5.x를 기반으로 보스 전 5.x를 사용하는 클라이언트 인증을 필요로하는 특정 URL로 clientAuth = 거짓과 같이 web.xml을 구성 할 것이다있다 : 나는 실제로이 또한 내가 위의 커넥터 구성의 경우 작동시킬 수있는 사용자 정의 JAAS 로그인 모듈을 통해

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>clientAuthResources</web-resource-name> 
     <url-pattern>/clientauth/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>authOnly</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
    <realm-name>myRealm</realm-name> 
</login-config> 
    <security-role> 
    <role-name>authOnly</role-name> 
</security-role> 

클라이언트 인증서가있는 특정 트러스트 스토어 그것이 바로 내 문제입니다. 우리 애플리케이션의 설치와 확장 방법을 감안할 때 각 jboss 애플리케이션 서버 설정은 사용자의 특정 구분을 지원하며 파일 시스템의 모든 곳에서 신뢰 저장소를 구성하는 것을 원하지 않습니다. 신뢰할 수있는 인증서를 데이터베이스의 코드에 동적으로로드해야합니다. 커스텀 JAAS 로그인 moduble는 웹 레벨에서 이것을 수행하고 역할도 할당하지만 로그인 모듈은 결코 호출되지 않고 커넥터 트러스트 스토어없이 HTTP 연결이 완료되기 전에 SSL 레벨에서 연결이 종료됩니다.

웹에 대한 많은 연구 끝에 SSLContext/SSLSocketFactory에 구성된 맞춤 X509TrustManager가 필요하다는 결론을 얻었습니다. 이 커스텀 트러스트 매니저는 우리 데이터베이스에 저장되어있는 클라이언트 인증서를 검증 할 것입니다. 나는이 사용자 지정 트러스트 관리자를 만들었지 만 연결하지 못하는 것 같습니다. 누구든지 jboss 또는 tomcat 5.x에서이를 구성하는 방법을 알고 있습니까? Tomcat 7에서 다음 구성이 connector, trustManagerClassName에서 사용 가능하다는 것을 알았지 만, 그 옵션은 나를위한 옵션이 아닙니다. 나는 그것이 가능하다고 가정하고, 어떤 도움이 대단히 감사하겠습니다.

답변

0