运行SSL的一般提示
SSL协议被设计成尽可能有效率和安全。可是,加密/解密是一个从执行角度看很花费计算的过程。在SSL上运行一个完整的Web应用是不十分必须的,并且让一个开发者决定哪个页面需要安全连接,哪个不需要,是符合惯例的。可能需要安全连接的页面包括登录页面,个人信息页面,购物车的付款,或者信用卡信息需要被传输的页面。在一个应用中的任何页面可以被简单在地址前面加上https:替代http:来通过secure socket请求。任何绝对请求安全连接的页面需要检查与这一页对应的协议的类型,并在如果https:没有被指定时采取合适的动作。
在安全连接上使用基于名字的实际主机是被质疑的。这是SSL协议自身设计上的局限。客户端浏览器接受服务器证书的SSL握手必须在HTTP请求被访问之前发生。结果,包含实际主机名的请求信息不能在认证前被判断,并且这也是不可能对于一个IP地址签发多个证书的原因。如果所有的基于一个IP地址的实际主机需要认证同一个证书,那么多个主机的地址就应该在服务器上不干扰普通的SSL操作。但是要知道,多数客户端浏览器将比较服务器的域名和证书中列出的域名,如果域名不匹配,那么浏览器将向客户显示警告。一般来说,在产品环境的SSL中普遍使用只有基于地址的主机。
开启基于SSL的相互认证
这一节讨论安装客户端的证书。当服务器和客户端的认证都可以用时,被称为相互或者双向的认证。在客户端认证,客户端需要提交由你选择接受的CA发布的证书。至少有有两种方法开启客户端认证。不管你选择哪种,你都必须输入keystore的位置和在Web服务器配置文件中的密码来开启SSL,就像在Configuring the SSL Connector(page 939)中讨论的那样。这两种开启基于SSL的相互认证方法如下:
l 设置在证书域中clientAuth为true。按下面步骤来完成设置,
a.如果你还没有启动应用服务器,就启动它。启动应用服务器的信息可以在Starting and Stopping the J2EE Application Server(page 91)中找到。
b.启动Admin Console。启动Admin Console的信息可以在Starting the Admin Console(page 92)中找到。
c.在Admin Console树中,展开Security,然后展开Realms,并选择certificate。证书域被用于基于带着SSL的HTTP的所有传输。
d.选择Add来把clientAuth的属性添加到服务器上。在名字里输入clientAuth,在值里输入true。
e.点击Save来保存这些新的属性。
f.登出Admin Console。
当你通过设置clientAuth属性为true开启客户端的认证时,客户端的认证将被所有的通过指定SSL端口的请求采用。
l 使用部署工具把认证的方法设置为Client-certificate。通过这种开启客户端认证的方式,客户端的认证只是对被安全约束控制的指定资源有效。以这种方式设置客户端认证将在Example:Client-Certificate Authentication over HTTP/SSL with JAX-RPC(page 950)中讨论。
当客户端认证以上述两种方法开启后,客户端认证将被执行两次。
检验相互的认证正在运行
你可以通过获得debug信息来检验相互的认证正在工作。这要在客户端完成,并且这个例子展示了如何传递在targets.XML中的一个系统属性来让targets.xml产生一个在系统属性中有javax.net.debug的客户,这可以被添加到例如<INSTALL>/j2eetutorial14/examples/security/common/targets.xml文件中。
为了使SSL相互认证的debug信息可用,要传递系统属性javax.net.debug=ssl,handshake,这可以提供关于相互认证是否运行的信息。下面的例子按照<INSTAL>/j2eetutorial14/examples/
security/common/targets.xml文件定义了run-mutualauth-client任务,是通过像粗体演示的那样添加sysproperty:
<target name="run-mutualauth-client"
description="Runs a client with mutual authentication over
SSL">
<java classname="${client.class}" fork="yes" >
<arg line="${key.store} ${key.store.password}
${trust.store} ${trust.store.password}
${endpoint.address}" />
<sysproperty key="javax.net.debug" value="ssl,
handshake" />
<sysproperty key="javax.net.ssl.keyStore"
value="${key.store}" />
<sysproperty key="java.net.ssl.keyStorePassword"
value="${key.store.password}"/>
<classpath refid="run.classpath" />
</java>
</target>
上一篇: 以前编写JSP网站时写的一些工具函数.
下一篇: Eclipse Release Build: 3.1正式发布! ——平台新特性(二)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




