Apache-2.2

SSL 配置,Tomcat 與 Apache 和 mod_jk

  • August 18, 2012

我正在尋找使用 tomcat 連接器 mod_jk 配置帶有 tomcat 6 和 apache web 伺服器的 SSL。我對此很陌生,所以請多多包涵。

我使用密鑰庫文件在 tomcat 中購買和配置了 SSL 證書。如果直接通過 https 訪問 tomcat 就完美了。現在我需要在 tomcat 前面使用 apache,我的問題是,我需要在 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>

這裡要提到的重要一點是,httpd-ssl.conf 中沒有配置 SSLCertificateFile 和 SSLCertificateKeyFile,因為我不確定是否在 tomcat 和 apache web 伺服器中都需要它。我已經使用密鑰庫文件在 tomcat 中配置了它。

SSL 用於加密客戶端和您的 Web 服務之間的通信。如果您將 Apache 放在 Tomcat 前面,那麼您需要使用 SSL 證書配置 Apache……而 Tomcat 根本不需要它,因為 Apache 正在處理所有客戶端通信。

如果需要在 apache 和 tomcat 中配置證書路徑,那麼我有 cert.p7b 和 certreq.csr 文件,它們肯定不兼容 apache,你能告訴我該怎麼做嗎?

.csr文件是您的證書請求,並不重要。

此問題 的連結可幫助您將.p7b文件轉換為 PEM 編碼的證書以供 Apache 使用。

您還可以使用以下-exportcert命令從您的密鑰庫中導出 PEM 編碼的證書:

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

JkExtractSSL指令告訴 Apache 將一些 SSL 相關資訊傳遞給 Tomcat。根據此文件,這包括以下環境變數:

  • SSL_CIPHER
  • SSL_CIPHER_USEKEYSIZE
  • SSL_SESSION_ID
  • SSL_CLIENT_CERT_CHAIN_n

引用自:https://serverfault.com/questions/418590