Настройте Apache SSL и затем перенаправьте на Tomcat с помощью mod_jk - PullRequest
5 голосов
/ 06 декабря 2011

Я пытаюсь настроить свой домашний сервер для приема SSL-соединения через порт 443.

У меня есть домен 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.У меня также есть сертификат GoDaddy, установленный на моем Mac Mini Server (Lion osx), поэтому, если я наберу 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

Я уверен, что это потому, что я пропустил что-то в теге виртуального хоста .... Так как я могу это исправить?

Ответы [ 2 ]

8 голосов
/ 07 декабря 2011

Я нашел решение, поэтому мои Apache и Tomcat работают нормально ... Я собираюсь обобщить шаги для решения проблемы:

Учитывая, что у вас правильно установлен сертификат mydomain (подписанный GoDaddy) ихранится в Apple KeyChain моего Mac-сервера.

  1. Откройте приложение KeyChain (с правами root), разверните метку сертификата mydomain, чтобы вы увидели и закрытый ключ.
  2. Сохраните оба с расширением p12, а затем сгенерируйте файл .pem из .p12
  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. Скопируйте filename-key.pem и filename-cert.pem в / etc / apache2 / directory

  6. Учитывая, что у вас такая же конфигурация httpd.conf, как показано выше, вам просто нужно добавить еще 2VirtualHost для соединения 443 (порт https).
  7. В любом случае, добавьте 1 VirtualHost для каждого ServerName, которое вы хотите защитить, например, я просто хочу защитить входящее соединение 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 file, просто добавьте эту строку под Listen 80, которую вы найдете в начале.

Теперь вы можете перемещаться по http: // mydomain.com и https: // mydomain.com.В случае ошибки вы можете прочитать файлы журнала в /var/log/apache2/.

Особая благодарность пользователю Bruno, как мне помочь в создании файла privatekey и сертификата (шаги 3 и 4).

Iнадеюсь, что это руководство поможет вам настроить Apache и Tomcat для mod_jk для защищенных соединений SSL.

3 голосов
/ 06 декабря 2011

Вы настроили mod_jk на ваших виртуальных хостах для простых HTTP-запросов (VirtualHost *:80). Эти параметры Jk* необходимо настроить также на виртуальных хостах HTTPS (VirtualHost *:443), где вы настроили параметры SSL.

...