我在tomcat上运行了一个webapp。现在我想强制执行https。我收到了3个文件,我保存在tomcat / conf /:localhost-rsa-cert.pem,localhost-rsa-chain.pem和localhost-rsa-key.pem
我更改了server.xml,因此未注释的连接器如下所示并重新启动了tomcat。我只能使用... com:8080访问我的页面而不是... com:8443。有什么问题?
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
我读到你需要在web.xml中更改一些内容。
答案 0 :(得分:1)
要默认强制执行https,您需要将以下内容添加到web.xml(这是与server.xml位于同一目录中的根web.xml)。即使用户输入https://www.yoursite.com
,这也会强制将所有请求重定向到http://www.yoursite.com**
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
**
但首先您需要正确安装/配置证书,并且需要确保在手动输入https时可以访问应用程序https。
我已按照以下步骤在tomcat 8上安装和配置SSL。
生成的密钥库运行命令:
keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
通过运行命令生成csr文件:
keytool -certreq -keyalg RSA -alias tomcat -file yourCSR.csr -keystore tomcat.keystore
在www.godaddy.com上提交CSR请求
一旦我的请求获得批准,goDaddy就会颁发证书。我已按照以下步骤操作(goDaddy将此指令与cert文件一起发送)。 通过运行以下命令安装根证书:
<强> keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file [name of the root certificate]
强>
运行以下命令安装中间证书:
keytool -import -alias intermed -keystore tomcat.keystore -trustcacerts -file [name of the intermediate certificate]
我的中级证书以.pem
通过运行以下命令将已颁发的证书安装到密钥库中:
<强> keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file [name of the certificate]
强>
最后,我将以下内容添加/修改为server.xml并重新启动tomcat服务器。
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile=".mykeystore" keystorePass="xxxxxx"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA" />