2011-10-30 6 views
2

참고 : 나는 내 자신의 질문에 답할 것입니다 ...이 속물을 The Internets의 집단적 지혜에 더하고 싶었습니다.APR을 사용할 때 클라이언트 인증서 인증을 JBoss 5.1.0.GA에서 작동 시키려면 어떻게해야합니까? 모든 웹 배포가 CLIENT-CERT 인증을 사용하지 않을 때 어떻게합니까?

내가 성공적으로 대부분이 페이지의 정보의 도움으로, 내 보스 5.1.0.GA 서버에서 인증서 인증을 구성한 : 아무튼 나는 하나의 컨텍스트 (의이 /openContext를 호출하자)가 http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch8.chapter.html

인증이 필요없고 클라이언트 인증서 인증이 필요한 다른 컨텍스트 (예 : /securedContext) (즉, web.xml에서 CLIENT-CERT를 사용하도록 구성되어 있음). JBoss의 기본 웹 커넥터를 사용할 때 이것은 훌륭하게 작동합니다. http://myhost/openContext을 치고 인증서를 묻는 메시지가 표시되지 않지만 http://myhost/securedContext을 누르면 기대했던대로 클라이언트 인증서를 요청합니다.

그러나 JBossWeb Native을 설치하고 APR을 웹 커넥터로 사용하면 http://myhost/securedContext을 누르면 더 이상 인증서를 요청하지 않습니다. 나 또한 그 구성에 SSLVerifyClient 매개 변수를 추가하고 optional로 설정하려고했습니다

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8443" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="false" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
    SSLCACertificateFile="/etc/pki/tls/certs/clientCAs.crt" 
/> 

,하지만 /openContext/securedContext 모두에서 인증서를 프롬프트처럼

server.xml 나의 4 월 커넥터 구성 본다 그건 내가 원하는 행동이 아니야.

하나의 웹 컨텍스트에는 인증서 인증이 필요하지만 다른 웹 컨텍스트에는 인증서 인증을 요구하지 않으려면 어떻게해야합니까?

답변

3

나를 위해 일한 것은 완전히 새로운 웹 커넥터를 추가하고 클라이언트가 보안 웹 컨텍스트에 대체 포트를 사용하게하는 것이 었습니다. 내가 http://myhost:8443/openContext 치면

이제
<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8443" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="false" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
/> 
<Connector protocol="HTTP/1.1" SSLEnabled="true" 
    port="8543" address="${jboss.bind.address}" 
    scheme="https" secure="true" clientAuth="true" 
    SSLProtocol="SSLv3+TLSv1" 
    SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
    SSLRandomSeed="/dev/urandom" 
    SSLCertificateFile="/etc/pki/tls/certs/mycert.crt" 
    SSLCertificateKeyFile="/etc/pki/tls/private/mycert.key" 
    SSLPassword="mypasswordwhichiassureyouisbetterthanthisone" 
    SSLCACertificateFile="/etc/pki/tls/certs/clientCAs.crt" 
    SSLVerifyClient="require" 
/> 

가, 내가 인증서를 입력하라는 메시지가 아니지만, 내가 http://myhost:8543/securedContext 쳤을 때, 나는 인증서를 입력하라는 메시지가 있어요 : 같은 내 커넥터의 설정은 이제 보인다. 물론, 나는 여전히 "틀린"포트로 어느 쪽의 웹 어플리케이션에도 접근 할 수있다. 그러나 그 결과는 나의 목적을 위해 무시할 만하다. 클라이언트가 http://myhost:8443/securedContext에 도달하면 HTTP 인증 오류가 발생합니다. 클라이언트가 http://myhost:8543/openContext에 도달하면 클라이언트 인증서를 요구합니다. 그들이 제공하는 훌륭한 (비록 내가 누군지 상관하지 않지만) 하나를 제공하지 않거나 잘못된 것을 제공하면 HTTP 인증 오류가 발생합니다 (처음에는 올바른 포트를 사용해야했습니다)).

JBoss 앞에서 httpd를 설치하고 거기에서 영리한 구성을 수행하여 두 번째 커넥터를 필요로하지 않고도이 작업을 수행 할 수있는 대체 방법이 있다고 확신합니다. 그러나 이것은 내 용도로는 충분합니다.