本文提到的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元素必须具有如下的某个值:
- NONE,这意味着应用不需要传输保证。
- INTEGRAL,意味着服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变。
- CONFIDENTIAL,这意味着传输的数据必须是加密的数据。
一般来说,如果需要同时兼容HTTP与HTTPS访问的话,在web.xml里不设置以上内容即可,但是如果需要强制转换的话,按上面的示例设置即可。
1. Tomcat提供的安全机制:http://blog.youkuaiyun.com/doupei2006/article/details/11602247
2.web.xml中<security-constraint>和四种认证类型:http://blog.youkuaiyun.com/lisheng19870305/article/details/40819481
3.security-constraint元素:http://www.baike.com/wiki/security-constraint%E5%85%83%E7%B4%A0