【问题标题】:Apache WebServer + Tomcat + Spring + HttpsApache WebServer + Tomcat + Spring + Https
【发布时间】:2012-07-30 15:35:51
【问题描述】:

我有一个在 http 上运行的应用程序,然后我尝试通过 https 创建登录页面。早期的 apache web server 用于通过 ajp 协议将请求转发给注册 worker 的 tomcat。现在我在/etc/apache2/crt中添加了一个密钥和证书,即ssl.keyssl.crt。其中还有一个certificate.csr 文件。用于生成上述证书的命令来自http://www.akadia.com/services/ssh_test_certificate.html,因为/etc/apache2/sites-available 中有两个文件:defaultdefault-ssl,所以我还没有完成第6 步。我在default-ssl 中更改了两行:

SSLCertificateFile    /etc/apache2/crt/certificate.csr
SSLCertificateKeyFile /etc/apache2/crt/ssl.key

我还更改了 tomcat 的 server.xml 以在 8446 后接收 https:

<Connector port="8446" protocol="HTTP/1.1" SSLEnabled="true"
          maxThreads="150" scheme="https" secure="true"
          clientAuth="false" sslProtocol="TLS" 
          keystoreFile="/etc/apache2/crt/ssl"
          keystorePass="password"/>

我还更改了web.xml,现在它还包含:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure Login</web-resource-name>
        <url-pattern>/login/*</url-pattern>
     <!--   <url-pattern>/other/secure/stuff/*</url-pattern> -->
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

我尝试了curl -Iv https://localhostcurl -Iv https://localhost:8446,但出现以下错误:

About to connect() to localhost port 8446 (#0)
*   Trying 127.0.0.1... Connection refused
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

请告诉我如何实现这一目标。

【问题讨论】:

  • 部分工作的答案:sudo a2ensite default-ssl 和使用 ssl.crt 现在 Apache 在 443 端口听到。我希望它把它转发给 tomcat...尝试它..

标签: spring apache tomcat https


【解决方案1】:

SSLCertificateFile 应该指向您的ssl.crt 文件而不是ssl.csr(这仅对提交给您的证书颁发机构以请求证书有用......之后,CSR 根本没有用) .

如果您有 Apache httpd 执行您的 SSL 终止(这就是为什么您会有 SSLCertificateFile 和其他指令在那里),那么您不需要在 Tomcat 中进行任何额外的设置来处理 CONFIDENTIAL 通信。

如果您想将 Tomcat 配置为接受 HTTPS 通信,那么您的 /etc/apache2/crt/ssl 文件需要是 Java 密钥库,而不是像 Apache httpd 使用的裸证书文件。 Java 密钥库是更复杂的野兽,需要使用 Java 的 keytool 程序来操作。

我强烈建议您阅读Tomcat's SSL Howto,它为您提供了有关如何正确设置密钥库并在 Tomcat 中进行配置的分步说明。

【讨论】:

  • 我最初指向 ssl.crt 然后我想也许我错了。关于第二点,我也有同样的感觉,但不确定。那么tomcat应该只通过ajp听apache吗?谢谢你的回答,让我试试你的建议..顺便说一句,我想让 apache 做所有的事情,让 tomcat 不知道 https ..
  • 我让它指向 ssl.crt。从 web.xml 中删除的内容仍然没有帮助。在浏览器上我得到:err 102 - “服务器拒绝连接。”
  • 只有您可以决定什么对您自己的环境有意义:您可以选择是否使用 Apache httpd 作为前端 Web 服务器。 Tomcat 是一个非常好的 Web 服务器,如果配置得当,它在性能方面可以与 Apache httpd 竞争。如果配置 Apache httpd 对您来说更容易配置 SSL(并且您可以从中获得一些其他好处),那么请随意让 Apache httpd 连接到 SSL 终端,并且只使用 AJP 来连接两者。如果您不需要 Apache httpd 来做其他任何事情,那么将它从您的设置中删除并只使用 Tomcat 可能是值得的。
  • 关闭 Tomcat 并删除所有日志文件。然后,启动 Tomcat 并查看 logs/catalina.out 和任何其他创建的日志文件:如果 Tomcat 无法正常启动,其中应该有某种错误消息。
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多