`

通过Proxy向Weblogic集群传递客户端证书

阅读更多

通过Proxy向Weblogic集群传递客户端证书

 

 

      过Weblogic集群的人都知道可以使用Proxy来分发请求和实现负载均衡,这种配置方式既灵活又十分经济,不需要额外购买昂贵的硬件负载均衡设置,十分适合中小企业采用。
在企业应用中,数据安全是非常重要的,为了保证数据的安全性,最理想也最简便的办法就是使用SSL。通过使用CA证书,服务器和客户机都能对对方的身份进行认证,在确信对方身份是可信任之后再进行业务操作,并且网络上传输的数据也是加密的,这样就能基本保证数据是安全的。一般情况下,SSL对服务器和客户机双方身份确认是由浏览器和WEB服务器来完成的,无需编程。但是,有时候应用系统也需要能取到客户证书信息,比如需要在应用中对用户证书中的用户身份信息与用户登录应用系统的帐号进行比对,以进一步确认用户身份。
对于多数的硬件负载均衡器,一般都支持透明的双向SSL,即服务器和用户证书都可以穿透负载均衡器到达对方,应用系统根本感觉不到负载均衡器的存在。但是,在使用Proxy实现的集群中,应用系统中能否正常拿到客户端证书信息呢?当然可以!
前两天接到一个客户的求援,说是他们的一个应用系统,因为不知是什么原因,硬件负载均衡器用不起来,只能用Proxy来实现负载均衡,现在需要启用SSL,但是在服务器端却取不到客户证书信息。实话说,虽然我知道在Proxy的情况下,服务器肯定有办法拿到客户证书信息的,但以前也主要在有硬件负载均衡器的情况下配置集群,还没有专门去研究Proxy与SSL的问题,惭愧啊。既然今天遇上这事儿了,那就抽点时间演练一遍。说干就干,脱下外套,操家伙上。

一、搭建环境:
 搭这个环境软件都是具备的,自己机器上装有Weblogic8.1,只需要配置几个以上Server来模拟集群环境即可。我建了两个domain,一个名为proxydomain,在其上建了一个名为proxyserver的Server,另一个domain名为bizdomain,其上建了两个Server bixserver1和bizserver2来充当集群中的业务服务器。当然,业务服务器上布署的应用可比HelloWorld复杂很多啊,呵呵(下面会详细讲啦)。

二、签发CA证书
 为了使用SSL,CA证书是不可少的。为了能得到一组互相信任的服务器证书和客户证书,我没有使用weblogic自带的demo证书来配置SSL,而是用OpenSSL新签发了一组证书,怎么用OpenSSL来签发证书超出本次课程范围,想知道的同学可以另外交钱学习啊,呵呵。签发的证书信息如下: 

 
 
服务器证书

 

 

 
客户证书


服务器证书可以弄一个keystore装起来,再配置到weblogic上,我嫌麻烦,就直接把证书和私钥拖到服务器上布署了(大家别学我),而客户证书和私钥需要打包成pfx格式再安装到操作系统中才可以。

三、配置proxy server
 配置proxy server很简单,只需要在proxydomain> Servers> proxy 页的General  属性页中,把“ SSL Listen Port Enabled”和“Client Cert Proxy Enabled”勾选上,“SSL Listen Port”改成443(SSL默认端口)。然后再到“Keystores & SSL”属性页上,在“SSL Configuration”下面的分别设置: 
Private Key File Name:=certs/server_key.pem
Server Certificate File Name:=certs/server.pem
Trusted CA File Name:=certs/root.cer

其中certs是CA证书保存目录,物理路径是 %weblogic安装目录%/user_projects/domains/proxydomain
在“Advanced Options-->Server Attributes”下面设置:
Two Way Client Cert Behavior:=Client Certs Requested And Enforced
含义就是强制要求客户端有证书才能连接

然后再在proxydomain/applications目录下新建一个proxy目录(你叫其他名称也可以,不会吃官司的),再在其下建一个目录WEB-INF(必须是这个名,大写),然后建两个空的XML文件:web.xml和weblogic.xml,在web.xml里填上:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "
http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">

  <display-name>weblogic代理测试</display-name>
  <description>weblogic代理测试</description>

  <servlet>
    <servlet-name>HttpClusterServlet</servlet-name>
    <servlet-class>weblogic.servlet.proxy.HttpClusterServlet</servlet-class>
    <init-param>
      <param-name>WebLogicCluster</param-name>
      <param-value>localhost:90|localhost:91</param-value>

    </init-param>
    <init-param>
      <param-name>DebugConfigInfo</param-name>
      <param-value>ON</param-value>
    </init-param>
  </servlet>
     
  <servlet-mapping>
    <servlet-name>HttpClusterServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>HttpClusterServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>


  <servlet-mapping>
    <servlet-name>HttpClusterServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>HttpClusterServlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>
 
</web-app>

在weblogic.xml里填上:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "
http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
  <charset-params>
    <input-charset>
      <resource-path>/*</resource-path>
      <java-charset-name>GBK</java-charset-name>
    </input-charset>
  </charset-params>
  <context-root>/</context-root>
</weblogic-web-app>

再把proxydomain/applications/proxy作为一个web应用布署到proxyserver上,这样,proxy服务器就配好了,启动一下,如果看到控制台有报错,那么你可以去买彩票了,小概率事件发生了。

四、配置bizserver
 在bizdomain/applications目录下新建一个目录biz,里面再建一个WEB-INF,然后照样放两个XML:web.xml和weblogic.xml。web.xml的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "
http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
  <display-name>weblogic代理测试_业务服务器</display-name>
  <description>weblogic代理测试_业务服务器</description>
</web-app>

Weblogic.xml的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "
http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
  <charset-params>
    <input-charset>
      <resource-path>/*</resource-path>
      <java-charset-name>GBK</java-charset-name>
    </input-charset>
  </charset-params>
  <context-root>/</context-root>
</weblogic-web-app>

然后在bizdomain/applications/biz目录下放一个非常复杂的JSP:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.net.InetAddress" %>
<%@ page import="java.security.cert.*" %>

<%
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
%>
<%
String serverIP = InetAddress.getLocalHost().getHostAddress();
int serverPort = request.getServerPort();
String clientIP = request.getRemoteAddr();
try{
  java.util.Enumeration enums = request.getHeaderNames();
  java.util.ArrayList list = new java.util.ArrayList();
  while(enums.hasMoreElements()) {
    String name = (String)enums.nextElement();
    out.print(name+":");
    out.println(request.getHeader(name)+"<br>");
  }
}catch(Exception ex) {
  out.println(ex.getMessage());
  ex.printStackTrace();
}
%>
<center>
当是客户机IP是:<br>
<font color="red"><b><%=clientIP%></b></font>
<br><br>
当前连接的服务器是:<br>
<font color="red"><b><%=serverIP%>:<%=serverPort%></b></font>
<br><br>
</center>
<%
String certstr="";
X509Certificate[] certs =  (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
if(certs!=null) {
  X509Certificate mycert=(X509Certificate)certs[0];
  //out.println("Has Cert from Client!");
  certstr=mycert.toString();
} else
  out.println("could not get certificate from client!");
%>
Your Certificate(javax.servlet.request.X509Certificate) is Encode
As:
<br>
<%=certstr%>
</body>

接着再把biz作为web应用程序布署到bizserver1和bizserver2上。

五、配置Cluster
 在bizdomain的console上,在 bizdomain> Clusters 页点“Configure a new Cluster...”建一个集群,其中:
General 下:
Name = MyCluster
Cluster Address:=localhost:90,localhost:91
Default Load Algorithm:=round-robin

然后在“Servers”页把bizserver1和bizserver2选择到MyCLuster。
这样,集群也配完了。把刚才配置的这些机器都启动起来。

六、测试
 打开浏览器,输入https://SHENG_NOTEBOOK/index.jsp,如果不出意外的话,应该会显示以下内容:
 
 

可以看到,在mycluster中的服务器上已经得到了客户证书。
如果连接服务器不成功的话,看看客户证书有没有安装??

 

 

另外,用Apache作Proxy也是可以的,配置与本文相差不太大。

  • 大小: 38 KB
  • 大小: 41.4 KB
  • 大小: 118.7 KB
  • 大小: 118.7 KB
  • 大小: 118.7 KB
分享到:
评论
1 楼 yvonxiao 2009-01-15  
正在找这方面的资料,谢谢啦~~

相关推荐

    WebLogic集群环境搭建

    WebLogic集群环境搭建的知识点主要包括以下几个方面: 1. WebLogic集群环境的概念 WebLogic集群是由多个运行同一WebLogic Server软件的服务器节点组成,可以提供高可用性和可扩展性的应用服务器环境。集群中的各个...

    weblogic 集群与Coherence 集群之路

    此外,通过负载均衡,WebLogic集群可以将来自客户端的请求均匀分配到各个服务器,避免单点过载。 在WebLogic集群中集成Coherence,我们可以利用Coherence的数据网格功能,创建一个分布式、高性能的缓存层。...

    weblogic集群安装及nginx https反向代理及负载均衡配置

    集群中的每个节点都运行着一个 WebLogic Server 实例,并且这些实例通过共享的 JNDI 命名服务互相通信。 ##### 1.5 安装准备 - **浮动 IP**:浮动 IP 用于外部访问集群,确保集群可以被外部客户端发现并访问。 - **...

    Linux环境WebLogic集群简单配置

    8. **配置代理服务器(proxyServer)**:如果需要,可以额外配置一个代理服务器,如`10.21.18.40:7004`,用于接收客户端请求并分发到集群。 9. **验证和测试**:最后,通过发送HTTP请求到代理服务器,检查集群是否...

    Weblogic集群概念和配置文档

    WebLogic集群是Oracle WebLogic Server的一种高级特性,它允许在多台服务器上分布和复制应用服务,以提高可用性、可扩展性和性能。在本文档中,我们将深入探讨WebLogic 8.1集群的概念和配置。 **Domain** Domain是...

    weblogic proxyserver

    WebLogic Proxy Server是Oracle WebLogic Server的一个重要组件,它作为一个反向代理服务器,用于在客户端和WebLogic集群之间提供透明的通信。这个组件允许你通过单一的入口点访问集群中的多个服务器实例,从而实现...

    WebLogic 集群中SSL 配置说明

    通过上述步骤,我们可以在WebLogic 8.0 SP3集群环境中成功配置SSL,从而实现安全的数据传输。SSL配置不仅涉及到证书的准备与安装,还需要细致地调整WebLogic服务器的各项设置。确保正确配置SSL有助于提升系统的整体...

    采集系统weblogic集群部署说明

    - 集群环境配置:包括Admin Server、Managed Server和Proxy Server的配置,例如,PC1和PC2上各部署一台Managed Server,共用同一Admin Server。 - 创建新Domain:使用Configuration Wizard,设置Domain名、位置、...

    weblogic集群搭建 proxy culs 单播 组播

    weblogic集群搭建 单播 组播 proxy culs

    weblogic 配置集群的方法

    本文将详细介绍如何在WebLogic Server 8.1上配置集群,并通过Proxy Server实现对集群的访问。 **一、WebLogic集群的基础概念** WebLogic集群是多个独立的WebLogic Server实例的集合,这些实例共享相同的域配置,...

    weblogic集群配置多服务器版

    - 通过 Proxy Server 或直接通过 Managed Server 访问集群。 #### 五、注意事项 - 确保所有 Server 的配置一致,避免版本冲突或不兼容问题。 - 在生产环境中,建议使用静态 IP 地址以确保集群的稳定性和安全性。 -...

    ( weblogic集群部署for_linux

    通过以上步骤,我们可以成功地在Linux环境下部署Oracle WebLogic Server 11g集群。该集群不仅提高了系统的可用性,还增强了系统的扩展性和性能。此外,通过合理的规划和配置,还可以进一步优化集群的表现,满足更...

    weblogic12.1.3集群部署

    ### WebLogic 12.1.3 集群部署详解 #### 一、WebLogic 12.1.3 集群部署基础 ...通过上述步骤,我们可以了解到WebLogic 12.1.3集群部署的基础流程和技术要点。这对于企业级应用的部署具有重要的指导意义。

    weblogic集群测试.pdf

    - **Apache与WebLogic集成**:配置Apache作为反向代理,通过mod_proxy模块将HTTP请求转发到WebLogic集群。 在实际操作中,还需要配置WebLogic集群的详细设置,如集群名称、服务器实例、网络通道等,并确保Apache与...

    weblogic集群(适用于WebLogic Server 9.2)

    本文将详细介绍如何在 WebLogic Server 9.2 上配置集群,以及如何通过 Proxy Server 访问集群。 ### 预备知识:Domain 和 Server **Domain** 是 WebLogic Server 的基本管理单元,它由一个或多个服务器实例组成,...

    weblogic集群环境设置

    6. **配置网络代理**:`proxy.cmd`可能用于配置WebLogic Proxy Plugin,这是一个用于负载均衡的组件,它可以隐藏集群的内部结构,将客户端请求路由到集群中的不同服务器。未命名.GIF可能是一张显示配置过程或集群...

Global site tag (gtag.js) - Google Analytics