6

我正在尝试将我的家庭服务器配置为接受端口 443 上的 SSL 连接。

我有 www.mydomain.com 域,我刚刚使用 mod_jk 链接了 Apache2 和 Tomcat,现在我也希望接受来自网络的 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" />

使用此配置,当我访问 http://www.mydomain.com 或 http://domain.com 时,我可以正确浏览 MyTomcatAppName ...我现在的问题是使用 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

我确定这是因为我错过了虚拟主机标签中的某些内容....那么我该如何解决呢?

4

2 回答 2

8

我找到了解决方案,所以我的 Apache 和 Tomcat 工作正常……我将总结解决问题的步骤:

考虑到,您已在我的 Mac 服务器的 Apple KeyChain 中正确安装并存储了 mydomain 证书(由 GoDaddy 签名)。

  1. 打开 KeyChain App(使用 root),展开 mydomain 证书标签,这样您也可以看到私钥。
  2. 使用 p12 扩展名保存两者,然后从 .p12 生成 .pem 文件
  3. 私钥:

    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. 在 /etc/apache2/ 目录中复制 filename-key.pem 和 filename-cert.pem

  6. 考虑到您具有与上面显示的相同的 httpd.conf 配置,您只需VirtualHost为 443(https 端口)连接再添加 2 个。
  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 443httpd.conf 文件,只需Listen 80在开头添加此行即可。

您现在可以浏览 http://mydomain.com 和 https://mydomain.com。如果出现错误,您可以读取/var/log/apache2/.

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

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

于 2011-12-07T07:52:22.743 回答
3

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

于 2011-12-06T17:01:58.907 回答