我有一个网站(http://app4u.ml/(位于 Ubuntu 中)并安装了 Tomcat。通过 HTTP,一切正常。我尝试将网站添加到 HTTPS。我从http://www.selfsignedcertificate.com/并将 '.cert' 和 '.key' 放入服务器中,/etc/ssl/localcerts
并将 '.crt' 文件放入/usr/share/ca-certificates/mozilla.
然后,我在 Putty 上运行:
openssl req -new -x509 -sha256 -days 365 -nodes -out /etc/ssl/localcerts/app4u.ml.crt -keyout /etc/ssl/localcerts/app4u.ml.key
chmod 600 /etc/ssl/localcerts/app4u.ml*
然后,我在两个文件中添加了/etc/apache2/sites-available
以下值:
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/app4u.ml.cert
SSLCertificateKeyFile /etc/ssl/localcerts/app4u.ml.key
ServerAdmin [email protected]
ServerName app4u.ml
DocumentRoot /var/www/html/public_html/
ErrorLog /var/www/html/log/error.log
CustomLog /var/www/html/log/access.log combined
</VirtualHost>
并运行:sudo a2enmod ssl
然后service apache2 restart
。这使得尝试以 HTTPS 访问网站在 chrome 中抛出警告。如果我尝试继续,我会看到一个空文件夹列表(但如果我尝试以纯 HTTP 访问它,它里面有值)。此外,尝试联系服务器上的 Tomcat 会抛出
javax.net.ssl.SSLHandshakeException:握手失败
我做错了什么?缺少了什么?
编辑2:进一步的问题 - 现在我的 tomcat 可以处理 GET 请求,但不能处理 POST 请求。对于 POST 请求,我得到了javax.net.ssl.SSLHandshakeException: Handshake failed
。为什么?
答案1
您需要指示 Apache 将请求转发(代理)到 Tomcat。文档非常完整,但以下内容应该可以为您提供正确的指导(不可能完全为您提供剪切和粘贴指导,因为这取决于您想要什么以及您拥有什么):
运行这个:
a2enmod proxy
a2enmod proxy_http
并将其放入您的配置中:
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/app4u.ml.cert
SSLCertificateKeyFile /etc/ssl/localcerts/app4u.ml.key
ServerAdmin [email protected]
ServerName app4u.ml
SSLProxyEngine on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ErrorLog /var/www/html/log/error.log
CustomLog /var/www/html/log/access.log combined
</VirtualHost>