Sun ONE Application Server 开发者指南(13)

类别:Java 点击:0 评论:0 推荐:
 

JAX-RPC Web服务中创建安全性

本节讲述为JAX-RPC服务应用程序提供安全性的过程,主要是通过应用HTTP/SSL到基本和交互认证,从而为容纳应用的web容器提供安全性来实现。关于认证的更多信息,请参见Sun ONE应用服务器开发人员web应用指南。

本节阐述了以下主题: 基于SSL的基本认证 向web.xml添加安全元素 在客户端代码中设置安全属性 基于SSL的交互认证 为Web服务设置客户端证书认证

为了给HTTP/S 基本和交互认证配置JAX-RPC web服务终端,必须执行以下步骤:

使用作为J2SE SDK 一部分的keytool生成证书和击键密码。 向sun-web.xml配置描述文件中添加安全元素 在客户端代码中添加一些属性 编译并且运行web服务

基于SSL的基本认证

以下是为基于HTTP/S的基本认证配置Web service的步骤:

1.配置一个证书并且在服务器的HTTP监听上启动SSL。关于配置证书和在HTTP上启动SSL的更多信息,请分别参见Sun ONE应用服务器管理员安全手册中的“管理证书”和“启动安全”两节。

HTTP客户端在SSL握手验证服务器证书的时候,使用一系列的可信证书授权(CA)。证明服务器CA是客户端的可信CA,是非常重要的。

2.对于基于J2SE 1.4的客户端,其中包括基于JSSE的客户端,例如web服务应用程序,你需要导入服务器CA的证书到JSSE cacerts 数据库。请使用命令行工具keytool来导入可信的CA证书。

以下代码示范了如何导入CA的证书到基于J2SE的客户端的可信CA数据库。

keytool -import -v -alias "CMS-CA" -file cmsca.cer -keystore cacerts

关于如何使用keytool,可以用-help选项运行keytool,或者参阅以下网址:

http://java.sun.com/products/jdk/1.2/docs/tooldocs/solaris/keytool.html

3.        输入密码库密码:changeit

Owner: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=California, C=US
Issuer: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=California, C=US
Serial number: 1
Valid from: Mon Jun 03 12:00:00 PDT 2002 until: Thu Jun 03 12:00:00 PDT 2004
Certificate fingerprints:
MD5: 6C:8D:A6:E4:55:52:1A:FF:9D:19:44:D7:0F:62:66:95
SHA1:89:B1:0E:7E:8F:56:B2:34:65:46:15:86:53:7E:3E:6B:4F:9D:84:63
Trust this certificate? [no]: yes
Certificate was added to keystore
[Saving cacerts]

4. 配置服务器实例使用合适的域,并且确认该域中包括了你允许访问web服务的用户。

例如,为了配置一个扁平文件用户,请在管理界面中执行以下步骤:

选择server instance并且点击左边面板中的Security节点。 在右边面板中为Default Realm选择下拉框,并且选中"file"选项。 在左侧面板中选择Realms,通过点击file realm把用户加入到文件域中。 使修改生效。现在,服务器的扁平文件用户数据库就可以被使用了。

关于配置服务器实例从而使用域的详细信息,请参考Sun ONE 应用服务器管理员指南。

web.xml添加安全元素

为web应用激活基本认证并指定一个约束进行强制认证。关于web.xml中安全元素的更多信息,请参见Sun ONE 应用服务器开发人员web应用指南。

这里有一个为web服务的基于servlet的终端配置基本认证的例子。这个安全约束使主要用户名称具备了"ServiceUser"角色,该角色在sun-web.xml文件中被映射为用户”bob”。

The WEB-INF/web.xml:

<security-constraint>

   ....
   <web-resource-collection>
      <web-resource-name>SecureHello</web-resource-name>
      <url-pattern>/security</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
   </web-resource-collection>

   <auth-constraint>
      <role-name>manager</role-name>

      </auth-constraint>

</security-constraint>

<login-config>

   <auth-method>BASIC</auth-method>

</login-config>

The WEB-INF/sun-web.xml:

<sun-web-app>
<security-role-mapping>

   <role-name>ServiceRole</role-name> <principal-name>bob</principal-name>

</security-role-mapping>
</sun-web-app>

5. 为基于J2SE的客户端设置安全属性。想得到逐步指导,请参见"在客户端代码中设置安全属性"。

在客户端代码中设置安全属性

为了实现基于SSL的基本认证,客户端代码必须设定一些安全相关的属性。

TrustStore属性

客户端象下面这样设置trustStore属性:

System.setProperty("javax.net.ssl.trustStore", trustStore);

trustStorePassword 属性

trustStorePassword属性是J2SE SDK 密码库的密码。在上一节,运行keytool的时候指定了默认密码changeit。客户端在下面的代码实例中设置trustStorePassword属性:

System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);

UsernamePassword 属性

Username和Password属性对应管理员角色。客户端象下面这样设置Username和Password属性。

stub._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, username);
stub._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, password);

基于SSL的交互认证

想要配置并创建具备交互认证的JAX-RPC服务,请执行"基于SSL的基本认证".中的步骤,然后执行下面的步骤:

1.以下代码示范了如何导出客户端证书

$Java_home/bin/keytool -export -alias -client -storepass changeit -file client.cer -keysnttore client.keystore

2.导入客户端证书到服务器的密码库

$Java_home/bin/keytool -import -v -trustcacerts -alias -client -file client.cert -keystore server.keystore -keypass changeit -storepass changeit

3.使用asant工具运行应用程序

asant run

本文地址:http://com.8s8s.com/it/it16919.htm