Назад | Перейти на главную страницу

Конфигурация SSL, Tomcat с Apache и mod_jk

Я хочу настроить SSL с помощью tomcat 6 и веб-сервера apache, используя соединитель tomcat mod_jk. Я новичок в этом, так что терпите меня.

У меня есть сертификат SSL, купленный и настроенный в Tomcat с использованием файла хранилища ключей. Он отлично работает, если доступ к Tomcat напрямую через https. Теперь мне нужен apache перед tomcat, мой вопрос: нужно ли мне предоставлять сертификат как в tomcat, так и в apache или только в tomcat? Разве apache не должен просто передавать запрос tomcat (используя JkExtractSSL) и позволять ему обрабатывать аутентификацию ssl (проверку сертификата)?

Если пути сертификатов необходимо настроить как в apache, так и в tomcat, тогда у меня есть файлы cert.p7b и certreq.csr, которые, безусловно, несовместимы с apache, не могли бы вы рассказать, как я могу это сделать?

Пока у меня следующая конфигурация:

httpd.conf:

    LoadModule ssl_module modules/mod_ssl.so
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile /usr/local/apache2/conf/workers.properties
    JkShmFile     logs/mod_jk.shm
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkMount  /mywebapp/* worker1
    JkExtractSSL On
    JkHTTPSIndicator HTTPS
    JkSESSIONIndicator SSL_SESSION_ID
    JkCIPHERIndicator SSL_CIPHER
    JkCERTSIndicator SSL_CLIENT_CERT

    <VirtualHost _default_:80>

       DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"

       Alias /mywebap "/var/lib/tomcat6/webapps/mywebapp"
       <Directory "/var/lib/tomcat6/webapps/mywebapp">
         Options Indexes FollowSymLinks
         AllowOverride NONE
         Order allow,deny
         Allow from all
       </Directory>

      <Location "/mywebapp/WEB-INF/">
         AllowOverride None
         Deny from all
      </Location>

    </VirtualHost>
    Include conf/extra/httpd-ssl.conf

httpd-ssl-conf:

    <VirtualHost _default_:443>

       DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"

        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLOptions +StdEnvVars +ExportCertData

        Alias /mywebapp "/var/lib/tomcat6/webapps/mywebapp"
        <Directory "/var/lib/tomcat6/webapps/mywebapp">
           Options Indexes FollowSymLinks
           AllowOverride None
           Order allow,deny
           Allow from all
        </Directory>

        JkMount /mywebapp/* worker1

        <Location "/mywebapp/WEB-INF/">
           AllowOverride None
           Deny from all
        </Location>
     </VirtualHost>

Здесь важно отметить, что SSLCertificateFile и SSLCertificateKeyFile не настроены в httpd-ssl.conf, поскольку я не уверен, нужен ли он как на веб-сервере tomcat, так и на веб-сервере apache. Я уже настроил его в Tomcat с помощью файла хранилища ключей.

SSL используется для зашифрованной связи между клиентом и вашей веб-службой. Если вы ставите Apache перед Tomcat, вам необходимо настроить Apache с помощью сертификата SSL ... и он вам вообще не нужен для Tomcat, потому что Apache обрабатывает все взаимодействия с клиентом.

Если пути сертификатов необходимо настроить как в apache, так и в tomcat, то у меня есть файлы cert.p7b и certreq.csr, которые, безусловно, несовместимы с apache, не могли бы вы рассказать, как я могу это сделать?

В .csr Файл - это ваш запрос на сертификат и не важен.

Этот вопрос есть ссылки, которые помогут вам преобразовать ваш .p7b файл в сертификат в формате PEM для использования с Apache.

Вы также можете экспортировать сертификат, закодированный в формате PEM, из своего хранилища ключей, используя -exportcert команда:

keytool -exportcert -alias <alias> | openssl x509 -inform der

В JkExtractSSL Директива указывает Apache передать Tomcat некоторую информацию, связанную с SSL. В соответствии с этот документ, который включает следующие переменные среды:

  • SSL_CIPHER
  • SSL_CIPHER_USEKEYSIZE
  • SSL_SESSION_ID
  • SSL_CLIENT_CERT_CHAIN_п

ну, похоже, я не могу комментировать вашу почту larsks, поэтому я отправляю это как ответ. Спасибо за ваш ответ. Это помогло мне прояснить несколько вещей. Итак, на основе вашего ответа я создал .cer файл из keytool -exportcert команда, как вы предложили. Однако теперь, когда я запускаю apache, я получаю следующую ошибку:

  Error: "[error] mod_ssl: Init: Private key not found (OpenSSL library error follows [error] OpenSSL: error:0D084069:asn1 encoding routines:d2i_ASN1_SET:bad tag [error] OpenSSL:

Я немного погуглил и обнаружил, что «Apache не может прочитать закрытый ключ, защищенный паролем». Ключ не предполагается экспортировать вместе с сертификатом? очевидно нет. Тогда как мне заставить apache прочитать закрытый ключ и где мне найти закрытый ключ?