在 HTTPS 和 Tomcat 上,GET 请求有效,但 POST 请求无效

在 HTTPS 和 Tomcat 上,GET 请求有效,但 POST 请求无效

我已设法使我的 Ubuntu 支持 HTTPS。如果我想在 Chrome 上查看位于 /var/www 的页面,它会显示良好(侧面有绿色锁)。

但我在 tomcat 上遇到了问题。如果我想在 Chrome 中查看 tomcat 上的页面,我会收到安全警告(和一个红色锁)。此外,在 Android 中,我可以通过 GET 发出请求,但对于 POST 请求,我得到的是javax.net.ssl.SSLHandshakeException: Handshake failed。我不知道如何获取密钥库,所以我创建了一个密钥库并通过 使 server.xml 支持它<Connector...。这是问题吗?

我怎样才能让 tomcat 支持 POST 而不只是 GET?

答案1

好吧,如果您需要运行 tomcat 以使用 HTTPS,那么您需要创建密钥库,如果您需要在 443 端口中运行相同的程序,则需要配置 ubuntu 以允许 tomcat 使用特权端口。小于 1024 的端口号是特权端口。因此,您需要执行以下步骤。我非常不确定您做了多少或取得了多少成就。同时,我详细介绍了以下步骤。

特权端口上的 Tomcat7(:80,443)
1)在 server.xml 中,将以下行

 <Server port="8005" shutdown="SHUTDOWN">
    <Connector port="80" maxHttpHeaderSize="8192" protocol="HTTP/1.1" 
            maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
            enableLookups="false" redirectPort="443" acceptCount="100" 
            connectionTimeout="20000" disableUploadTimeout="true" 
            socketBuffer="18000" 
            compression="on" URIEncoding="UTF-8" 
            compressionMinSize="2048" 
            noCompressionUserAgents="gozilla, traviata" 
            compressableMimeType="application/javascript,text/html,text/xml,text/javascript,text/css,text/plain,application/json,text/json,a    pplication/xml"/>

<Connector port="443" maxHttpHeaderSize="8192" protocol="HTTP/1.1" SSLEnabled="true" 
        scheme="https" secure="true" 
        keystoreFile="/path/to/my.keystore" keystorePass="changeit" 
        clientAuth="false" sslProtocol="TLS" 
        maxThreads="350" minSpareThreads="25" maxSpareThreads="75" 
        enableLookups="false" acceptCount="100" 
        connectionTimeout="60000" disableUploadTimeout="true" 
        bufferSize="4096" 
        compression="on" 
        compressionMinSize="2048" URIEncoding="UTF-8" 
        noCompressionUserAgents="gozilla, traviata" 
        compressableMimeType="application/javascript, text/html, text/xml,text/javascript, text/css,text/plain,     application/json,text/json,application/xml"/>


2)安装 authbind

sudo apt-get install authbind

3)使端口 80 可用于 authbind(您需要是 root 用户):

sudo su
touch /etc/authbind/byport/80
chmod 500 /etc/authbind/byport/80
chown tomcat7 /etc/authbind/byport/80
touch /etc/authbind/byport/443
chmod 500 /etc/authbind/byport/443
chown tomcat7 /etc/authbind/byport/443

4) 将 IPv4 设为默认值(authbind 目前不支持 IPv6)。为此,请创建文件 $TOMCAT_HOME/bin/setenv.sh,内容如下:

CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"
AUTHBIND=yes

5)将 /usr/share/tomcat7/bin/startup.sh 最后一行更改为以下内容。

exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
# OLD: exec "$PRGDIR"/"$EXECUTABLE" start "$@"

Tomcat Keystore生成步骤:

  1. 要生成 SSL 密钥,请在终端中运行以下命令

$JAVA_HOME/bin/keytool -genkey -alias Tomcat -keysize 2048 -keyalg RSA -validity 3650 -keystore /path/to/my.keystore

提供必要的信息并设置密码。默认密码为“changeit”。

  1. 授予my.keystore文件的执行权限

chmod 777 /path/to/my.keystore

就是这样。

注意:我已经发布了用于生产环境的 tomcat server.xml 连接器标签。如果您在低服务器配置的预生产环境中运行它,最好避免或减少标签内的选项,如 max-min-Threads、lookups、timesouts 等。

相关内容