Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java Security  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 [转载]传输安全
bawanglongqiqi





发贴: 73
积分: 37
于 2005-02-16 10:58 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
出自:http://partner.bea.com.cn 作者:不详
传输安全指一组安全技术,用于确保客户端和服务器的真实性,以及在 Web 服务器及其客户端之间传递的数据的完整性和保密性。

  在大多数情况下,仅使用传输安全即足以确保 Web 应用程序或 Web Service 等 Web 资源的安全;但也可以使用其他安全技术,特别是对于 Web Service。有关详细信息,请参阅 Web Service 安全。

传输安全性策略
  传输安全提供了三种基本策略,用于实现三个主要安全目标:参与者的身份验证、秘密通信和数据完整性。有关这些安全目标的描述,请参阅 WebLogic Workshop 安全性概述。

  单向 SSL
  单向 SSL 具备两个主要优点。第一,对 Web 服务器的标识进行身份验证。第二,通过加密客户端与服务器之间的消息,可以确保通信的保密性。单向 SSL 中的“单向”是指仅对服务器的标识进行身份验证,而不对客户端的标识进行身份验证。如果要确保通信的保密性,但客户端标识是非重要因素,则应使用单向 SSL。

  单向 SSL 与基本身份验证
  通过要求提供用户名和密码,基本身份验证可确保客户端标识的真实性。基本身份验证应始终与单向 SSL 配合使用,否则用户名和密码可能会被心怀恶意的第三方截取。要同时确保客户端标识和服务器标识的真实性,应使用单向 SSL。有关实现基本身份验证流程的详细信息,请参阅基本身份验证。

  双向 SSL
  通过客户端数字证书,双向 SSL 将服务器身份验证、数据加密和客户端身份验证组合在一起。

  单向 SSL
  以下主题解释了如何配置单向 SSL 的 WebLogic Workshop Web 应用程序。

  通过要求服务器向其客户端提供数字证书,以及对在服务器和客户端之间传递的数据进行加密,单向 SSL 可以在 Web 服务器和客户端之间设置安全连接。单向 SSL 的主要目标是由加密提供的完整性和保密性,以及由数字证书提供的服务器身份验证。请注意,客户端身份验证本身不是单向 SSL 的目标。要获得客户端的身份验证,应为单向 SSL 补充基本身份验证,或配置双向 SSL 的 Web 资源。

  使用单向 SSL 确保 Web 资源的安全
  要使用单向 SSL 确保 Web 资源的安全,必须 (1) 从可信任颁发机构获取数字证书或创建您自己的数字证书,(2) 确保为 WebLogic Server 启用了 SSL,(3) 将 Web 资源定义为受保护的 Web 资源,(4) 通过启用 HTTPS 的服务器端口公开该 Web 资源,以及 (5) 配置 WebLogic Server,以使用该 Web 资源对数据流进行加密。

  1. 数字证书
  要在生产服务器上启用 SSL,首先需要从可信任的第三方证书颁发机构获取私钥/公钥对。有关详细信息,请参阅 WebLogic Server 8.1 文档中的 Obtaining Private Keys, Digital Certificates and Trusted Certificate Authorities。(或者,也可生成您自己的数字证书来提供给客户端,但大多数 Web 应用程序都使用从第三方获取的数字证书。)还需要在 WebLogic Server 中的相应仓库中存储数字证书。有关详细信息,请参阅 WebLogic Server 8.1 文档中的 Storing Private Keys, Digital Certificates, and Trusted Certificate Authorities。

  2. 配置 WebLogic Server
  默认情况下,WebLogic Server 被配置为支持单向 SSL。有关详细信息,请参阅 WebLogic 8.1 文档中的 Configuring SSL。

  3. 定义受保护的 Web 资源
  通过在 Web 资源(如 Web 应用程序或 Web Service)上放置安全约束,可以将该资源定义为受保护的资源。安全约束由 web.xml 配置文件中的 <security-constraint> XML 元素指定,该 web.xml 配置文件位于 WEB-INF 目录中。

  Web 资源是根据其所在的 URL 进行定义的。在以下示例中,Web Service HelloWorldSecure.jws 被定义为受保护资源,因为该服务所在的 URL(“/security/transport/helloWorldSecure/HelloWorldSecure.jws/”) 被定义为受保护对象。

<security-constraint>
<display-name>
Security Constraint for HelloWorldSecure.jws
</display-name>
<web-resource-collection>
<web-resource-name>HelloWorldSecure.jws</web-resource-name>
<description>受 SLL 保护的 Web Service。</description>
<!--
定义要使用 SSL 进行保护的 Web 资源的范围。
确保对 HelloWorldSecure Web Service 的所有方法调用的安全。
-->
<url-pattern>/security/transport/helloWorldSecure/HelloWorldSecure.jws/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
</security-constraint>
  如果希望保护 HelloWorldSecure Web Service 所在的整个文件夹,需要指定下列 URL。

   <url-pattern>/security/transport/helloWorldSecure/*</url-pattern>
  有关定义受保护 Web 资源的详细信息,请参阅定义受保护的 Web 资源。

  4. 通过启用 HTTPS 的端口公开 Web 资源
  通过编辑 wlw-config.xml 文件(位于 Web 资源所在的 WebLogic Workshop 项目的 WEB-INF 目录中)或应用程序 META-INF 目录中的 wlw-runtime-config.xml 文件,可以将 WebLogic Server 配置为通过启用 HTTPS 的端口公开 Web 资源。请注意,一般推荐使用 wlw-runtime-config.xml 文件,而不要使用 wlw-config.xml 文件,因为在 wlw-config.xml 文件中指定的值将被硬编码到 EAR 文件,而该 EAR 文件将被部署到生产服务器上,而且不能在运行时被替代。

  下面的示例 wlw-config.xml 文件显示了如何在 HTTPS 端口(在本例中由 <https-port> 元素指定为端口 7002)上公开 HelloWorldSecure Web Service。请注意,这不会强制资源仅使用 HTTPS 端口进行公开。用户可以通过由 <protocol> 元素指定的默认端口和 HTTPS 端口访问该资源。通过在资源的安全约束中放置 <transport-guarantee> 元素,可以强制使用 HTTPS 端口(请参阅下面的步骤 5)。

<http-port>7001</http-port>
<https-port>7002</https-port>
<service>
<class-name>security.transport.helloWorldSecure.HelloWorldSecure</class-name>
<protocol>https</protocol>
</service>

要在启用不同协议的端口上公开不同的服务,请添加具有 <class-name> 和 <protocol> 子元素的 <service> 元素。下面的示例 wlw-config.xml 文件指定 HelloWorld Web Service 应使用启用 HTTP 的端口,还指定 Web Service HelloWorldSecure 应使用启用 HTTPS 的端口。

<http-port>7001</http-port>
<https-port>7002</https-port>
<service>
<class-name>HelloWorld</class-name>
<protocol>http</protocol>
</service>
<service>
<class-name>security.transport.helloWorldSecure.HelloWorldSecure</class-name>
<protocol>https</protocol>
</service>

  5. 确保加密所传输的数据
  要使用受保护的 Web Service 加密数据流,请在安全约束中包括具有 CONFIDENTIAL 值的 <transport-guarantee> 元素。这将强制使用在上述步骤 4 中指定的 HTTPS 端口。
<security-constraint>
<display-name>
Security Constraint for HelloWorldSecure.jws
</display-name>
<web-resource-collection>
<web-resource-name>BasicAuthentication.jws</web-resource-name>
<description>A web service secured by SLL and basic authentication</description>

<!--
定义要使用 SSL 进行保护的 Web 资源的范围。
确保对 HelloWorldSecure Web Service 的所有方法调用的安全。
-->

<url-pattern>/security/transport/helloWorldSecure/HelloWorldSecure.jws/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>

<!--
加密客户端和此 Web 资源之间的数据流。
-->

<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

  有关 web.xml 配置文件中所用语法的详细信息,请参阅 WebLogic 8.1 文档中的 web.xml Deployment Descriptor Elements。请特别注意有关 <security-constraint> 的文档。

  双向 SSL
  与在单向 SSL 中相似,双向 SSL 中的服务器将向客户端提供数字证书;而与单向 SSL 不同的是,双向 SSL 中的客户端必须在建立 SSL 会话之前向服务器提供数字证书。

  要使用双向 SSL 确保 Web 资源的安全,请执行使用单向 SSL 确保资源安全的过程。有关过程的详细信息,请参阅单向 SSL。要完成该流程,还必须采取额外的步骤对 WebLogic Server 进行双向 SSL 配置,这可通过 WebLogic Server 控制台或直接编辑服务器的 config.xml 文件来实现。

  有关通过 WebLogic Server 控制台配置双向 SSL 的详细信息,请参阅 WebLogic Server 8.1 文档中的 Configuring Two-Way SSL。

  通过直接编辑服务器的 config.xml 文件,也可对 WebLogic Server 进行双向 SSL 配置。(config.xml 位于服务器的根目录中。例如,作为 Workshop 域的一部分,SamplesApp 的 config.xml 文件位于 BEA_HOME\weblogic81\samples\workshop\config.xml。)

  通过在 config.xml 的 <SSL> 元素中将 TwoWaySSLEnabled 特性设置为 True,可以启用双向 SSL。
<SSL Enabled="true" TwoWaySSLEnabled="true" IdentityAndTrustLocations="KeyStores"
ListenPort="7002" Name="cgServer"/>

  请注意,启用双向 SSL 并不会强制使用双向 SSL。如果仅启用双向 SSL,服务器将要求客户端提供数字证书,但如果客户端未提供数字证书,SSL 会话仍将继续。

  通过将 TwoWaySSLEnabled 和 ClientCertificateEnforced 特性同时设置为 True,可以强制使用双向 SSL。

<SSL TwoWaySSLEnabled="true" ClientCertificateEnforced="true" Enabled="true" IdentityAndTrustLocations="KeyStores"
ListenPort="7002" Name="cgServer"/>

  有关 config.xml 的 <SSL> 元素的语法详细信息,请参阅 WebLogic Server 8.1 文档中的 SSL。

  如果 Web 资源位于强制要求客户端提供证书的服务器上,则客户端可以通过修改资源控制文件上的属性来发送证书。有关详细信息,请参阅使用控件访问传输受保护的资源。

  使用控件访问传输受保护的资源
  此主题解释如何使用 WebLogic Workshop 控件访问使用传输受保护的 Web 资源。

  指定 HTTPS 协议
  由单向和双向 SSL 保护的 Web 资源通过启用 HTTPS 的端口与客户端进行通信。使用 WebLogic Workshop 控件与这些资源进行通信的客户端必须使用同一端口与资源交换数据。

  可以在控件的 @jc:location 批注中指定 Web Service 控件使用相应的 HTTPS 端口。例如,下面的控件通过启用 HTTPS 的端口 7002 与信用卡报告 Web Service 进行通信。

/**
* @jc:location http-url="https://localhost:7002/CreditCardReport/webservice/CreditCardReport.jws"
*/
public interface CreditCardReportControl extends com.bea.control.ControlExtension, com.bea.control.ServiceControl

  指定用户名和密码
  在使用控件访问要求提供用户名和密码的 Web 资源时,需使用 setUsername() 和 setPassword() 方法在 Web Service 的控制文件上设置用户名和密码属性。

  在下面的示例中,VeriCheck Web Service 将通过 Bank Web Service 的控制文件调用该服务。

public class VeriCheck implements com.bea.jws.WebService
{
/**
* @common:control
*/
private security.roleBased.BankControl bankControl;

public void checkForSufficientBalance(String checkingAccountID, int amount)
{
// 在调用 Bank Web Service 时使用下列用户名和密码。
bankControl.setUsername("VeriCheck");
bankControl.setPassword("aeraeraer");

// 检查帐户是否收支平衡。
bankControl.doesAccountHaveSufficientBalance(checkingAccountID, amount);
}
}

  提供客户端数字证书
  在使用控件访问要求客户端提供数字证书的 Web 资源时,可以设置控件属性以提供证书。

  在下面的示例中,假设 WebServiceB 要求客户端提供数字证书。通过使用下列方式在 WebServiceB 的控制文件中设置属性,WebServiceA 可以提供所需的数字证书。

public class WebServiceA implements com.bea.jws.WebService
{
/** @common:control */
security.transport.clientCert.WebServiceBControl ctrl;

/**
* @common:operation
*/
public void invokeWebServiceB()
{
/**
* 对此 Web Service 启用客户端证书。
*/

ctrl.useClientKeySSL( true );

/**
* 指定客户端证书所在的密钥库的位置和密码
*
* 严格地讲,下面对 setKeystore 的方法调用是
* 不必要的,因为 SamplesApp 已被配置为使用
* 默认密钥库 DemoIdentity.jks。
* 此处使用该方法调用的目的是为了说明如何替换
* 其他非默认密钥库的位置。
*/
String sep = File.separator;
ctrl.setKeystore(Home.getPath() + File.separator + "lib" +
File.separator + "DemoIdentity.jks", "DemoIdentityPassPhrase" );

/**
* 在密钥库中指定客户端 SSL 证书和客户端私钥
* 的别名。(在同一密钥库中,证书和私钥必须以相同的
* 别名进行存储。)
* 第二个参数指定了访问密钥库所需的
* 密码。
*/
ctrl.setClientCert("DemoIdentity", "DemoIdentityPassPhrase");

/**
* 调用 WebServiceB 上的 requestCallback 方法。
* 将发送上面指定的客户端证书。
*/
ctrl.requestCallback("WebServiceA");
}

}

  设置和替换默认密钥库
  请注意,可以使用 WebLogic Server 控制台设置默认密钥库位置。请参阅 WebLogic Server 8.1 文档中的 Configuring Keystores and SSL。

  可以使用 setKeystore(path, password) 方法替换默认密钥库位置(请参阅上面的示例)。

  要替换为除“JKS”(Java KeyStore) 之外的密钥库类型,请使用 setKeystore(path, password, type)。




flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923