2014-06-08 2 views
0

LDAP을 통해 인증을 사용하는 웹 응용 프로그램이 있습니다. 그것은 완벽하게 작동하지만 SSL을 사용하려면 프로덕션 버전이 필요합니다. ,하지만 난에 연결하려고 할 때 스프링 시큐리티는 예외를 다음과 발생 "636 : //ourserver.com을 LDAPS"우리는 서버에서 실행이SSL을 통한 LDAP을 통한 스프링 보안 : 자세한 내용이 필요합니다.

루트 예외가 javax.net.ssl.SSLHandshakeException입니다 : sun.security.validator.ValidatorException : 알려지지 않은 인증서에 대해 나에게 경고 요청 타지

Apache Directory Studio에 유효한 인증 경로를 찾을 수 에없는,하지만 수 : sun.security.provider.certpath.SunCertPathBuilderException을 : PKIX 경로를 건물 실패 이를 확인하고 결국에는 필요한 데이터를 연결하고 읽는 것을 무시하십시오.

LDAP over SSL을 구현하는 방법에 대한 많은 질문과 대답이 있지만 그 중 아무도 완전한 솔루션을 제공하지 못합니다. two opportunities : certificate trusted을 만들거나 인증서 확인을 전혀 사용하지 않도록 설정해야합니다. 아무리 내가 선택하는 방법, 나는 봄 보안과 메커니즘을 사용하는 방법을 알아낼 수 없습니다 : 나는 keytool을 사용하여 인증서를 신뢰할 수 있도록 선택하는 경우

  1. 을, 나는 어떻게 JVM/Tomcat을 알아낼 수 없습니다/봄 보안은 어느 password I have defined (-keypass changeit) 알아낼 것입니다.
  2. 인증서 유효성 검사를 사용하지 않기로 결정한 경우 the code의 위치를 ​​파악할 수 없습니다. 크게 응용 프로그램의 이식성을 감소 -

는 또한 Apache Directory Studio 인증서가 keytool 수입하지 않고 자체에 대한 신뢰 할 수 방법에 대한 궁금 하군요? 그런 해결책은 내 webapp에 완벽 할 것이지만, 나는 그런 모든 것을 발견하지 못했다.

+0

"... 또는 인증서 확인을 전혀 사용 중지하려면"- 분명히 나쁜 생각입니다. 그것은 하나의 선택으로 당신을 떠난다. – jww

+0

아마도 [tekul/spring-security/samples] (https://github.com/tekul/spring-security/tree/master/samples/certificates)가 도움이 될 것입니다. – jww

답변

0

다음은 내가 사용할 수있는 해결책입니다. 내가 이해해야 할 중요한 점은 JVM도 아니고 웹 애플리케이션이있는 컨테이너도 별칭과 암호를 알아야한다는 것입니다. 등록 된 모든 인증서를 확인하는 것은 JVM의 두통이며 이는 웹 애플리케이션과 아무 관련이 없습니다. 안타깝게도이 솔루션은 전체 JVM에 대한 인증서를 설치한다는 의미입니다. webapp의 이식성은 떨어지지 만 적어도 제대로 작동합니다. 내가 다른 개발자가 자신의 컴퓨터에 쉽게 인증서를 설치할 수 있도록 웹 애플리케이션 소스와 bash는 스크립트 다음 제공하기로 결정했습니다 :

SERVER="mydomain:636" 
CRT_NAME="mydomain.crt" 
CRT_ALIAS="mydomain_cert" 

echo -n | openssl s_client -connect $SERVER | sed -ne '/-BEGIN 
CERTIFICATE-/,/-END CERTIFICATE-/p' > $CRT_NAME 

$JAVA_HOME/bin/keytool -import -alias $CRT_ALIAS -keystore $JAVA_HOME/lib/security/cacerts -file $CRT_NAME -storepass changeit 

당신은 추가 오류 검사를 추가 할 수 있습니다, 나는 단순화하도록 생략했습니다 스크립트. 두 번째 명령을 실행하려면 루트 권한이 필요합니다.