关于tomcat下设置HTTP访问和HTTPS访问的注意点

来源:互联网 发布:苹果电脑怎么编译c语言 编辑:程序博客网 时间:2024/05/16 07:52

本文提到的tomcat版本为8.5。

文中如果错误之处,欢迎指正。

tomcat默认使用8080端口的HTTP协议访问服务器上的项目,可以直接访问conf文件夹下的server.xml文件查询相关设置,如果只是查询的话,建议直接用浏览器打开,结构清晰明显,如果想要修改的话,建议用文本编辑器打开。

默认8080端口设置如下:

<Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>

这里的redirectPort声明重定向端口,在网上查阅相关资料得知8443端口是tomcat打开SSL的文本服务的默认端口,即用于HTTPS访问的端口,但是在默认设置下,server.xml里并没有8443端口相关的设置,顶多能看到被注释掉的示例设置:

示例1:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"               maxThreads="150" SSLEnabled="true">        <SSLHostConfig>            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"                         type="RSA" />        </SSLHostConfig>    </Connector>

示例2:

<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>


Certificate是与SSL证书相关的配置,本人使用的tomcat并没有自带上述示例中配置的证书文件。

相关访问设置的问题不是本文的重点,网上多得是,所以就不描述了,下面来说一下设置的注意点

1.

如果只需要HTTP访问,只用修改conf文件夹下的server.xml即可,一般来说就两个地方需要设置,一个是访问端口(<Connector>),一个则是访问域名(<Host>),具体就不赘述了。

2.

如果需要HTTPS访问,按以下方式进行设置:

1)

添加用于HTTPS访问的端口,https默认访问端口是443,所以基本上按以下设置即可,keystoreFile填写的是SSL证书的路径,一般将获取的SSL证书存放在conf文件夹下即可:
 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"    maxThreads="150" scheme="https" secure="true"    keystoreFile="conf/xxx.jks"    keystorePass="si80392afmcwu9"    clientAuth="false" sslProtocol="TLS" />

2)

在HTTP访问设置中加上重定向端口(redirectPort),并设置为HTTPS访问的端口,当你想访问网站无需输入端口号时,只需将访问端口设置为80即可,如下:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443"/>

3)

这一步是HTTPS设置比较重要的地方,需要考虑到网站是需要同时兼容HTTP和HTTPS访问还是全都强制转为HTTPS访问,这里就需要设置conf文件夹下的web.xml了:
<login-config>    <!-- Authorization setting for SSL -->    <auth-method>CLIENT-CERT</auth-method>    <realm-name>Client Cert Users-only Area</realm-name></login-config><security-constraint>    <!-- Authorization setting for SSL -->  <web-resource-collection>    <web-resource-name>SSL</web-resource-name>    <url-pattern>/*</url-pattern>  </web-resource-collection>  <user-data-constraint>    <transport-guarantee>CONFIDENTIAL</transport-guarantee>  </user-data-constraint></security-constraint> 

CLIENT-CERT认证一种基于客户端证书的认证方式,比较安全。但缺陷是在没有安全证书的客户端无法使用。

security-constraint元素是一种计算机函数,允许不通过编程就可以限制对某个资源的访问,在大多数情况下,安全套接字层(SSL)用于INTEGRAL或CONFIDENTIAL,标识需要限制访问的资源子集。

web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTP方法。如果不存在HTTP方法,就将安全约束应用于所有的方法。

web-resource-name是与受保护资源相关联的名称。http-method元素可被赋予一个HTTP方法,比如GET和POST。

url-pattern是将安全约束用在设定的匹配URL上。

auth-constraint元素用于指定可以访问该资源集合的用户角色。如果没有指定auth-constraint元素,就将安全约束应用于所有角色。

user-data-constraint元素用来显示怎样保护在客户端和Web容器之间传递的数据。

transport-guarantee元素必须具有如下的某个值:
  1. NONE,这意味着应用不需要传输保证。
  2. INTEGRAL,意味着服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变。
  3. CONFIDENTIAL,这意味着传输的数据必须是加密的数据。
一般来说,如果需要同时兼容HTTP与HTTPS访问的话,在web.xml里不设置以上内容即可,但是如果需要强制转换的话,按上面的示例设置即可。

参考链接:
1. Tomcat提供的安全机制:http://blog.csdn.net/doupei2006/article/details/11602247
2.web.xml中<security-constraint>和四种认证类型:http://blog.csdn.net/lisheng19870305/article/details/40819481
3.security-constraint元素:http://www.baike.com/wiki/security-constraint%E5%85%83%E7%B4%A0

原创粉丝点击