跳到主要内容

17、Tomcat 内核详解 - 运行、通信以及访问的安全管理

1.运行安全管理

1.1 Java安全管理器——SecurityManager

1.2 Tomcat的系统安全管理

Tomcat在启动的时候开启了安全管理器,它采用的是默认的安全管理器——SecurityManager。

1.3 安全管理器特权

2.安全的通信

2.1 SSL/TLS协议

SSL层提供三方面的服务:

1、 证书:认证客户端和服务器,确保数据发送到正确的客户端和服务器;
2、 加密,加密数据以防止数据中途被窃取;
3、 签名,维护数据的完整性,确保数据在传输过程中不被篡改;

客户单在接收到证书之后,会读取证书中发布机构,匹配浏览器内置的受信任的发布机构列表,如果找不到,则说明这个证书发布结构不可信任,证书自然也就不可信任;程序会抛出一个错误信息;如果是受信任机构发布的,浏览器将使用受信任机构证书的公钥对服务器证书里面的指纹和指纹算法进行解密,再利用这个指纹算法计算服务器证书的指纹,把计算出来的证书与证书里面的指纹进行对比,进而判断证书是否被修改过以及证书是否是受信任结构发布的;

2.2 Java安全套接字扩展——JSSE

涉及到如下类:

  • SSLSocket和SSLServerSocket
  • SSLSocketFactory和SSLServerSocketFactory
  • SSL会话——SSLSession
  • SSL上下文——SSLContext
  • SSLEngine
  • KeyManager
  • TrustManager
  • KeyStore

2.3 Tomcat中SSL安全信道的实现

为了利用HTTPS通信,tomcat需要利用JSSE把SSL/TLS协议集成到自身系统上;Tomcat默认使用JDK中的包实现此功能;

3.客户端访问认证机制

3.1 Web资源认证原理

3.2 认证模式

认证模式是由浏览器与Web服务器之间约定;不同模式有不同的特点;

1、 Basic模式;

客户端对于每一个realm,通过提供用户名和密码来进行认证的方式。

※ 包含密码的明文传递

基本认证步骤:

1、 客户端访问一个受http基本认证保护的资源;

2、 服务器返回401状态,要求客户端提供用户名和密码进行认证;

401Unauthorized

WWW-Authenticate: Basic realm="WallyWorld"

3、 客户端将输入的用户名密码用Base64进行编码后,采用非加密的明文方式传送给服务器;

Authorization: Basic xxxxxxxxxx.

4、 如果认证成功,则返回相应的资源如果认证失败,则仍返回401状态,要求重新进行认证;

特记事项:

1、 Http是无状态的,同一个客户端对同一个realm内资源的每一个访问会被要求进行认证;

2、 客户端通常会缓存用户名和密码,并和authenticationrealm一起保存,所以,一般不需要你重新输入用户名和密码;

3、 以非加密的明文方式传输,虽然转换成了不易被人直接识别的字符串,但是无法防止用户名密码被恶意盗用;

2、 Digest模式;

Digest模式避免了模式避免了密码在网络中传输,提高了安全性,但是认证报文被攻击者拦截,攻击者仍然可以获取到资源; 3.Form模式

使用表单进行身份认证,认证之后对于同一个会话期间都不再进行认证,因为认证的结果已经保存在服务器端的会话中;

由于每种语言都可以自定义自己的Form模式,因此没有一个通用的标准,而且它也存在密码明文传输安全问题;

4、 Spnego模式;

 

①客户端浏览器向web服务器发送http请求。

②服务器返回401状态码,响应头部加上 WWW-Authenticate:Negotiate。

③用户通过浏览器输入用户名向AS请求TGS票证。

④AS生成TGS票证,然后查询用户密码并用此密码加密TGS票证,返回浏览器。

⑤浏览器使用用户密码解密出TGS票证,并向TGS服务发起请求。

⑥TGS服务生成服务票证响应给浏览器。

⑦浏览器将服务票证封装到SPNEGO token中,并发送给web服务器。

⑧服务器解密出用户名及服务票证,将票证发往TGS服务验证。

⑨通过验证,开始通信。
它将认证模块独立出来,结构变得复杂了,但是这样可以为所有应用提供认证功能,例如它可以很容易的实现多个系统之间的单点登录;

5、 SSL模式;

客户端和服务器端通过SSL协议建立起SSL通道,完成整个SSL通道的建立之后,才是认证的核心步骤;

6、 NonLogin模式;

该模式不要求用户登录,对资源进行配置,对没有配置任何角色的资源,用户不用登录即可访问,反之,不能访问;

3.3 Realm域

Realm域是为了方便统一提供一种权限和资源的映射关系;

有三个级别的Realm域:

1、 Engine级别;

所有Web应用共享

1、 Host级别;

该虚拟机上的Web应用共享

1、 Context级别;

专属于某个Web应用

3.4 Tomcat如何实现资源安全管理

3.5 如何让你的Web具备权限认证