2011-03-08 5 views
1

[내 환경은 Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.2입니다. 9-2 mod_jk/1.2.31 (비슷한 Apache/mod_jk/tomcat 사양의 Ubuntu 10.04.2 LTS에서 동일한 동작이 발생하지만)JavEnvVar "SSLVerifyClient require"(디렉토리 레벨에서 설정)

https를 제공하기위한 가상 호스트를 설정 했으므로 두 가지 유형의 디렉토리/앱이 있습니다. 하나는 '일반'https를 통해 제공되고 다른 하나는 클라이언트 인증 (클라이언트 인증서가 제공됨)과 함께 제공됩니다.

"SSLVerifyClient require"가 가상 호스트 수준에 배치되면 관련 JkEnvVar SSL_CLIENT_CERT가 정보를 올바르게 tomcat에 전파합니다. 디렉토리 레벨 (가상 호스트 내부)에 배치되면 그렇지 않습니다. 모든 단서 ??

worker.list=worker1 
worker.worker1.type=ajp13 
worker.worker1.host=localhost 
worker.worker1.port=8009 

및 conf의/추가/아파치 - ssl.conf가 포함되어 단지는 다음과 같다

... 
JkWorkersFile conf/workers.properties 
JkShmFile  "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.shm" 
JkLogFile  "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.log" 
JkLogLevel debug 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " 

Include conf/extra/httpd-ssl.conf 
... 

의 conf/workers.properties :

내 httpd.conf에 다음과 같은 라인을 포함 다음 줄 :

Listen 443 

AddType application/x-x509-ca-cert .crt 
AddType application/x-pkcs7-crl .crl 

SSLPassPhraseDialog builtin 

SSLSessionCache  "shmcb:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)" 
SSLSessionCacheTimeout 300 

SSLMutex default 

<VirtualHost _default_:443> 
    DocumentRoot "C:/https" 
    ServerName www.webrep.local 
    ServerAdmin [email protected] 
ErrorLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/https-error.log" 
TransferLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/https-access.log" 

SSLEngine on 

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/my-server.cert" 
SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/my-server.key" 

SSLCACertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/ca/myCA.pem" 

SSLOptions +StdEnvVars +ExportCertData 
Alias /examples/oneway/ "C:/https/oneway/" 
<Directory "C:/https/oneway"> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

Alias /examples/twoway/ "C:/https/twoway/" 
<Directory "C:/https/twoway"> 
    SSLVerifyClient require 
    SSLVerifyDepth 10 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

BrowserMatch ".*MSIE.*" \ 
     nokeepalive ssl-unclean-shutdown \ 
     downgrade-1.0 force-response-1.0 

CustomLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_request.log" \ 
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 

JkMount /examples/oneway/servlets/* worker1 
JkMount /examples/twoway/servlets/* worker1 
JkExtractSSL Off 
JkEnvVar SSL_CLIENT_S_DN 
JkEnvVar SSL_CLIENT_CERT 

</VirtualHost>         

Tomcat에서 나는 간단한 서블릿 출력을 추가했습니다 :

request.getAttribute("SSL_CLIENT_CERT") 

아래 :

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\examples\WEB-INF\classes 

답변

0

그것은 분명히 할 때 JkMount과 + 별칭이 동일한 URL을 참조하는 것이 야, 문제는 JkEnvVar없는 것 같다, JkMount는 우선 순위가 결코 내부의 지시를한다 (예를 들어, 'All from Denie'로 전체 디렉터리에 대한 액세스를 제한하려고 시도하십시오. 실제로 적용되지 않습니다. 서블릿/JSP는 잘 액세스됩니다.

두 솔루션 :

1) (즉 JkMount를 통해 톰캣에 매핑) 톰캣에서 실행 코드에 대한 액세스를 제어하는 ​​지시문을 사용합니다. 2) JkMount 대신 'SetHandler jakarta-servlet'을 사용하십시오 (자세한 내용은 http://tomcat.apache.org/connectors-doc/reference/apache.html 끝을 참고하십시오). 이것은 내부에서 작동합니다. 나는 또한 내부에서 작동한다고 들었지만, 나는 이것을 체크하지 않았다. 이이 문제를 해결하기 위해 누군가에게 우리가 여기 썼다 많은 시간을 절약 할 수

희망은 ...

+0

나는 JkMount과 가 동일한 URL을 참조 할 때, 둘 다 작동하는 것처럼 것으로 나타났습니다. 내 구성에서 나는 VirtualHost : 443 안에 SSL 바 (클라이언트 인증을 요구함)와 같은 URL을위한 JkMount를 올리는 Location을 가지고있다. – EJP