SSL 配置,带有 Apache 和 mod_jk 的 Tomcat

SSL 配置,带有 Apache 和 mod_jk 的 Tomcat

我希望使用 tomcat 连接器 mod_jk 为 tomcat 6 和 apache web 服务器配置 SSL。我对此还很陌生,所以请耐心等待。

我已购买 SSL 证书并使用密钥库文件在 tomcat 中配置。如果直接通过 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-配置:

    <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 中使用 keystore 文件对其进行了配置。

答案1

SSL 用于客户端和 Web 服务之间的加密通信。如果您将 Apache 放在 Tomcat 前面,则需要使用 SSL 证书配置 Apache……而对于 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 将一些 SSL 相关信息传递给 Tomcat。根据这个文件,其中包括以下环境变量:

  • SSL_CIPHER
  • SSL_CIPHER_USEKEYSIZE
  • SSL_SESSION_ID
  • SSL_CLIENT_CERT_CHAIN_n

答案2

好吧,看来我无法评论你的帖子,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 读取私钥,以及我在哪里可以找到私钥?

相关内容