2011-12-06 116 views
4

我想配置我的家庭服务器接受端口SSL连接443配置Apache SSL,然后重定向到Tomcat mod_jk的

我已经www.mydomain.com域,我刚刚联系的Apache2和Tomcat,使用mod_jk,现在我想接受来自网络的https请求。

这是我的配置:

的httpd.conf

<IfModule mod_jk.c> 
    JKWorkersFile /etc/apache2/workers.properties 
    JkShmFile /var/log/apache2/mod_jk.shm 
    JKLogFile /var/log/apache2/mod_jk.log 
    JkLogLevel debug 
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " 
</IfModule> 


<VirtualHost *:80> 
    DocumentRoot "/Library/ApacheTomcat/apache-tomcat-6.0.33/webapps/MyTomcatAppName" 
    ServerName www.mydomain.com 
    ErrorLog "/private/var/log/apache2/www.mydomain.com-error_log" 
    CustomLog "/private/var/log/apache2/www.mydomain.com-access_log" common 
    JkMountCopy On 
    JkMount /* ajp13 
</VirtualHost> 


<VirtualHost *:80> 
    DocumentRoot "/Library/ApacheTomcat/apache-tomcat-6.0.33/webapps/MyTomcatAppName" 
    ServerName mydomain.com 
    ErrorLog "/private/var/log/apache2/mydomain.com-error_log" 
    CustomLog "/private/var/log/apache2/mydomaino.com-access_log" common 
    JkMountCopy On 
    JkMount /* ajp13 
</VirtualHost> 

然后,这是我的Worker.properties文件:

worker.list=ajp13 

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

这是我的server.xml:

<Host name="localhost" appBase="/Library/ApacheTomcat/apache-tomcat-6.0.33/webapps" 
     unpackWARs="true" autoDeploy="true" 
     xmlValidation="false" xmlNamespaceAware="false"> 
     <Context path="" docBase="/Library/ApacheTomcat/apache-tomcat-6.0.33/webapps/MyTomcatAppName" /> 

有了这个配置配给我正确冲浪MyTomcatAppName当我访问http:// www.mydomain.com或http:// domain.com ... 我现在的问题是访问同一个网站使用https连接,所以https:// www。 mydomain.com或https:// domain.com。 我的Mac Mini服务器(Lion osx)上也安装了GoDaddy证书,因此如果我输入https:// www.mydomain.com(或https:// domain.com),浏览器会正确告知我是否存在为“mydomain.com”的证书,但它也说:

Forbidden 

You don't have permission to access/on this server. 
Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/0.9.8r DAV/2 mod_jk/1.2.30 Server at mydomain.com Port 443 

我敢肯定,这是因为我错过了在虚拟主机标签的东西....那么,怎样才能解决呢?

回答

3

您已经在虚拟主机中为纯HTTP请求配置了mod_jk(VirtualHost *:80)。您还需要在HTTPS虚拟主机中配置这些Jk*选项(VirtualHost *:443),其中您已配置SSL设置。

+1

你能给我看一个示例代码吗? – piojo

+2

如果您访问https:// www.mydomain.com /时会得到HTTP响应(禁止),HTTPS已经在运行,所以您必须以某种方式配置了['SSL *'](http: //httpd.apache.org/docs/2.2/mod/mod_ssl.html)选项。尝试将虚拟主机设置到它们所在的位置(或者如果虚拟主机不存在,则使用'VirtualHost *:443'创建一个虚拟主机)并将'Jk *'选项放在那里。 – Bruno

+2

我忘了在VirtualHost中添加证书和私钥,你帮我在其他帖子上创建它们,所以现在我总结了我的答案中的步骤...非常感谢你... – piojo

7

我找到了解决办法,所以我的Apache和Tomcat做工精细... 我要总结的步骤来解决问题:

考虑,你MYDOMAIN证书(由GoDaddy的签字)正确安装和存储在我的Mac服务器的Apple KeyChain内。

  1. 打开KeyChain应用程序(以root身份),展开mydomain证书标签,以便您也看到私钥。
  2. 保存都与P12的扩展,然后从的.p12
  3. 私钥生成的.pem文件:

    umask 0077 
        openssl pkcs12 -in pkfilename.p12 -nocerts -nodes -out filename-key.pem 
    umask 0022 
    
  4. 证书:

    openssl pkcs12 -in certfilename.p12 -clcerts -nokeys -out filename-cert.pem 
    
  5. 复制文件名-key.pem和文件名/ etc/apache2 /目录中的-cert.pem

  6. 考虑到您具有相同的httpd.conf配置如上所示,您只需要为443(https端口)连接添加另外两个VirtualHost
  7. 无论如何,为每个你想保护的ServerName添加1个VirtualHost,例如我只想保护mydomain。COM传入连接:

    <VirtualHost _default_:443> 
        DocumentRoot "/Library/ApacheTomcat/apache-tomcat-6.0.33/webapps/MyServerAppName" 
        ServerName mydomain.com 
        ErrorLog "/private/var/log/apache2/https_mydomain.com-error_log" 
        CustomLog "/private/var/log/apache2/https_mydomain.com-access_log" common 
        SSLEngine On 
        SSLCertificateFile /etc/apache2/filename-cert.pem 
        SSLCertificateKeyFile /etc/apache2/filename-key.pem 
        JkMountCopy On 
        JkMount /* ajp13 
    </VirtualHost> 
    
  8. 添加Listen 443在httpd.conf文件,只需添加Listen 80你会发现在它开始在这条线。

您现在可以浏览http:// mydomain.com和https:// mydomain.com。 如果发生错误,您可以读取/var/log/apache2/内的日志文件。

特别感谢布鲁诺用户,如何帮助我创建私钥和证书文件(步骤3和4)。

我希望本指南可以帮助您在mod_jk上配置Apache和Tomcat以实现安全SSL连接。