我已设法使我的 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生成步骤:
- 要生成 SSL 密钥,请在终端中运行以下命令
$JAVA_HOME/bin/keytool -genkey -alias Tomcat -keysize 2048 -keyalg RSA -validity 3650 -keystore /path/to/my.keystore
提供必要的信息并设置密码。默认密码为“changeit”。
- 授予my.keystore文件的执行权限
chmod 777 /path/to/my.keystore
就是这样。
注意:我已经发布了用于生产环境的 tomcat server.xml 连接器标签。如果您在低服务器配置的预生产环境中运行它,最好避免或减少标签内的选项,如 max-min-Threads、lookups、timesouts 等。