0

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

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

我还更改server.xml了 tomcat 以在 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

请让我知道如何实现这一目标。

4

1 回答 1

2

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

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

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

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

于 2012-07-31T01:24:09.600 回答