`
gaoyuntao2005
  • 浏览: 311190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Proxy with Weblogic Cluster under SSL

阅读更多

有个兄弟在做Weblogic Cluster与Apache Proxy的SSL,他的问题是,当部署在Weblogic中的Web应用使用了SSL重定向(比如但你要访问Weblogic的关键资源的时候,你需要重定向到SSL),比如下面的标准J2EE的Web.xml部署:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <display-name>ssl</display-name>
 <welcome-file-list>
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>

 <security-constraint>
  <display-name>Example SSL Security Constraint</display-name>

  <web-resource-collection>
   <web-resource-name>SSL Protected Area</web-resource-name>
   <url-pattern>/protected/*</url-pattern>
  </web-resource-collection>

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

由于当前的URL到达了/propected,Web服务器发现客户端还是走HTTP 7001方式,它会向客户端发送HTTP 302,重定向客户端到SSL端口,比如7002,但当我们对Weblogic集群使用了Proxy的时候,这可能有一点点麻烦。

我们首先需要配置Weblogic的各个Managed Server,比如HTTP端口都是7001,SSL端口都是7002,然后配置一个由Weblogic提供给apache的proxy包(一个叫做mod_wl_20.so的文件),然后在Apache加载它,再提供几个简单的参数,便可以Run起来,为了让一切变得很简单,我们可以分开两步来走:
1,先配通HTTP方式
2,提供SSL方式

针对1,其实那是3分钟的事情
1.1 找到Weblogic中的mod_wl_20.so,放在%BEA_HOME%\weblogic81\server\bin,copy到Apache 2.0的modules目录
1.2 在httpd.conf中增加下面的配置:
LoadModule weblogic_module modules/mod_wl_20.so

<IfModule mod_weblogic.c>
WebLogicCluster sourcesite:8001,destsite:8001
MatchExpression *
</IfModule>

注意,sourcesite:8001,destsite:8001是我在另外两台机器上的Managed Server,针对所有类型资源的访问请求,都会被Apache转发Weblogic集群上去。然后,重启Apache,测试一下。


针对步骤2,需要注意一些问题,首先是要配置SSL的信任关系,也就是,Apache Proxy转发请求的时候,会验证服务器的身份,因此,我们配置一套Java证书库,我是用XCA和SecureXRCP(http://www.blogjava.net/security/archive/2007/01/07/SecureXRCP.html)去完成的,图形化操作比Openssl的纯命令行要方便很多。

2.1 创建证书库
首先,创建一个CA,它包括了cskey.pem的私钥(保护密码是weblogic)
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,829FBE604B9F2544

ej6WSSIsZVw+xU+ihKt4wkz+aGODjFp0vp4Gh+nUjLmWxc9oLgVr4gLzvveop0pk
q1IyfriedXd2OK2etxkcTC0jRQQBs5r83UjCo+DV2bWsbgh+9fSekuRSoGBIbZC+
tjuctihk4tenN5o7jygdI55k9ncH6O486X50aGgiRblzzk4GoYQfQn+2Hksso99T
pzYZdP9KSN0FVHl7D+Zt/oKBw68kIYLV7n+Z2h8LPTW/w6c5rdnCylQZrPfu9ses
b753HI0tcYgtE3ExmEbRhPgzITVGdA+crzEcxlmMxxjknnpg2VJiItlDpEyBXyQ8
1wFB3inxQoqkrttuxLUZLjo+d3OSUZwEy0it/8oZWj5D1cnfafwOXaKuj7ys0FwF
nPoD4Oz5hKfyEFdxXzDm+PKNRT39aYYcWYe73wws75nP3Dj5qfGJCZXzG0Pqbltm
EZH4vJbV+vU75tX5fNo32UZNTKW5d0/jCIFWz5KjFl/7Ohra698FAlAiMMspcMUt
9FNCKV8jT1Ntrxpp/KSauZHjkW7hUeXLsUp/NTIhPCZnzsjIM6zKCm9rCwyAXbav
Rn2g1chzZKUj6RhRTEi8iYX6gKt6om9MEDewEu0EweZiJQ5M5efS8qUMJA+CYXUQ
o2XM5J7blqBETcO8j/dgM1/DPnmLOkZdHgeNssVgld50vEbQN89W6w39H0DSre65
TEFr9oMeJhWWavrh4bcdYn190kku5ZorMZqsacQqeoCznQw017FyyvzGzAy75s3s
v8Wyea7egQ8YEsO5ecdyNxXY+eTKa1HNNbxqWPUcAB67EjXniiCzEkd4mOB/BQIv
yQE8JofXemruflGvBXdBuPOzPWD0pY5FvnFzl6YhrOoMWuC02Fcr/X+a3MGnJPep
9krtXbBQ318MOdeDwkk8dcm+8U76PHuLgWYG+Y7FGiqrHCi1EafHqlxM6jMetaX5
Hjomj6gME1bpnOFzFEo1d74JwNF7Zf73PQZvWV3LGv/HmxXC+KQDi9SfRaFIKgtE
syr3iVAMHauiIbL4vVGLE4sg+JgApYdNhuy1USz3Dxp0+NtOU6CUAeNNHVqS7+uF
eP5PGoMplCF+7pPBUhqiRePVTrId+TuYKPfSBfW1MZ/5YYTzRUiMS14FmB49Ds7T
xyODF4tVpV1j2IxyCAffYdEXOYDn0A13xu5pvU17R9Sd0XtHvq3uOHAtN8A6GQFy
Wt5KesqCj179nSRMlBxs4NhjHmwerhLdIIMIDVROulYh0Abfq9kqTdiqqDnrmV+d
93BDcc/wGq0OZNmMyqK4tmtz8KA520feBA9u9eT5j9MSsm/SWVorrjpPI8JBvqcg
kb0PpQyvP6CcGMkpXDhE/AYEkAiT86fxpAXJnHvQIXRd6p7GscDnQ5AKj+hRro9J
yyL1yrB9vih4xGUiTRycTiT+6LEuH9dWnlKyyv2pRfC0XMVHqJZ760bnjDuFPR2E
6guobsKQx9pnEQGZa7VIJqN/DXmgzVHUTRvz7Pby9k8fS8Jc3iDVeZ2k/4tbbbeG
SmNdQ2NVHwGAa0sDIb0vG7YYG6G2oD8R1EHG71MwZekTQaC7VFpJwg==
-----END RSA PRIVATE KEY-----

以及其对应的公开证书cs.pem

-----BEGIN CERTIFICATE-----
MIIFDjCCA/agAwIBAgIBATANBgkqhkiG9w0BAQQFADBxMQswCQYDVQQDEwJDUzEL
MAkGA1UEBhMCQ04xCzAJBgNVBAcTAkdaMQswCQYDVQQIEwJHRDELMAkGA1UEChMC
Q1MxDzANBgNVBAsTBk9OU0lURTEdMBsGCSqGSIb3DQEJARYOZGh1YW5nQGJlYS5j
b20wHhcNMDcwMTAzMDI0MTQ2WhcNMTYxMjMxMDI0MTQ2WjBxMQswCQYDVQQDEwJD
UzELMAkGA1UEBhMCQ04xCzAJBgNVBAcTAkdaMQswCQYDVQQIEwJHRDELMAkGA1UE
ChMCQ1MxDzANBgNVBAsTBk9OU0lURTEdMBsGCSqGSIb3DQEJARYOZGh1YW5nQGJl
YS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLCKfrRzEcAwAd
yt1os1vfNJ5dyYDwRqYaUB2n1hPmu7jchVDm8HHlLhZSxyK21rKlcfnrGnPLKWfY
amNP1azmNYbJPDBtfa0rYmn2u33qqXxW61fB3UnSALoFwZ5eNG/vyesaPW+ok63k
z+t+gUyzFXIfuPTVuJbdTkZtO1v44I6Wl0aWjxKpCJZSbw7PVD2g5dqoY2HaJN0W
ZvnMY9e8MLNc0fSeyGhEp6N8NKKAn15prQ6wpudAG3HNuSrMYZTJqKffiSQCJEFe
0UfI/AFQuPw7xk2d2wDMBKJOHxUtMtsUJ4pcxie0L7WSnU2YO3yVMCeLVJHp4JJ1
EbS4jLUTAgMBAAGjggGvMIIBqzASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1UdDgQW
BBQnpgv2gTClymABt62gsGyPtTm/bzCBmwYDVR0jBIGTMIGQgBQnpgv2gTClymAB
t62gsGyPtTm/b6F1pHMwcTELMAkGA1UEAxMCQ1MxCzAJBgNVBAYTAkNOMQswCQYD
VQQHEwJHWjELMAkGA1UECBMCR0QxCzAJBgNVBAoTAkNTMQ8wDQYDVQQLEwZPTlNJ
VEUxHTAbBgkqhkiG9w0BCQEWDmRodWFuZ0BiZWEuY29tggEBMAsGA1UdDwQEAwIB
BjARBglghkgBhvhCAQEEBAMCAAcwHQYJYIZIAYb4QgECBBAWDnd3dy5wZ3Aub3Jn
LmNuMB0GCWCGSAGG+EIBAwQQFg53d3cucGdwLm9yZy5jbjAdBglghkgBhvhCAQQE
EBYOd3d3LnBncC5vcmcuY24wHQYJYIZIAYb4QgEHBBAWDnd3dy5wZ3Aub3JnLmNu
MB0GCWCGSAGG+EIBCAQQFg53d3cucGdwLm9yZy5jbjAdBglghkgBhvhCAQ0EEBYO
d3d3LnBncC5vcmcuY24wDQYJKoZIhvcNAQEEBQADggEBAANNRHl+xc7lbLAIW8HK
cNRJcSqYuUaPgLpMEZw5AnWngbUgs5KOYPCHpfft34DxrFsArV3fOiyhmznQE2f+
BmX8afaDprlq4y4J5GZJz9b+comZEQgbhLqTvZcMW9JuHcIYB7eyvrMam8CEX/qZ
asvYRnworD+LtzYRv9EFUfDPFtkxPpAZBFQJngE5icWI0HdG8W7rWQSOHq+FZxRi
Zz70T97MEtU/MUZb6nDIVleaKB8o2OrSlJRP7ENYV9ueL3tKm7ZlZLbFEHLoyCeF
c2qJp8d1BVx3n1unVABcZbGIFVwxXQqKhtmgd6pLbAfzd1lR6Yhd2p+yTZEvpAqG
ErE=
-----END CERTIFICATE-----

因为pem是文本格式,读者可以直接copy上面的文本然后各自保存为pem后缀名的文件即可使用!

有了CA,各位就可以为Weblogic集群中的所有Managed Server创建对应的证书库(我说的当然是Identity证书库)。
用SecureXRCP为每个Managed Server new一个证书库,然后创建密钥对,然后用私钥去创建一个
CSR(证书请求),保存为一个文件,再用XCA去对这个文件签名(用上述的cskey.pem,你需要往XCA导入上面的
PEM,也可以用你以前创建的CA根私钥)。

Note:如果读者对XCA用法不是很熟悉,可以阅读Weblogic Security In Action的中篇
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=26770&tstart=0
或者直接使用Openssl,Openssl的安装使用可以参考
http://www.blogjava.net/Files/openssl/%e7%ac%ac15%e7%ab%a0%20OpenSSL%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5.rar
http://www.blogjava.net/Files/openssl/%e7%ac%ac14%e7%ab%a0%20OpenSSL%e7%bc%96%e8%af%91%e5%92%8c%e5%ae%89%e8%a3%85.rar

我在我的Weblogic Cluster中有两台被管Server,因此我分别创建了两个证书库
sourcesite.jks
destsite.jks
然后导出了两个简单的csr,用XCA中的CS私钥Sign了之后,便有了两个证书(这个步骤跟你去VeriSign提交CSR和获取证书一模一样)
从XCA,你导出了两个der格式的证书,在SecureRCP中再针对上面两个JKS证书库分别Import CA Reply(就是sourcesite.der和destsite.der),
就完成了证书库的创建。

OK,看看我们现在有些什么文件(这些文件大家可以在本文附件中找到)。
CS.der
CSKey.pem
cs.jks
cs.pem
destsite.csr
destsite.der
destsite.jks
sourcesite.csr
sourcesite.der
sourcesite.jks
其中,对于Weblogic被管Server来说,需要的是sourcesite.jks(用作Identity JKS),cs.jks里面只有一个cs.der,它可以用作Weblogic Server的Trust JKS。

对于Apache Proxy,它需要cs.der,即信任CA的根证书,但由于Apache Proxy是PEM格式Prefer的,因此,请用weblogic的der2pem命令去转换一下cs.der为cs.pem。

准备好证书库以及证书等琐碎事情之后,可以继续配置Apache SSL。


2.2  配置Apache信任Weblogic集群
修改上面提到的Apache的httpd.conf:

LoadModule weblogic_module modules/mod_wl_20.so
LoadModule ssl_module modules/mod_ssl.so

<IfModule mod_ssl.c>
    Include conf/ssl.conf
</IfModule>

<Location "/examplesWebApp">
  SetHandler weblogic-handler
</Location>

<Location "/ssl">
  SetHandler weblogic-handler
</Location>

<IfModule mod_weblogic.c>
WebLogicCluster sourcesite:8002,destsite:8002
SecureProxy ON
TrustedCAFile C:\CertGen\CS\cs.pem
RequireSSLHostMatch false

Debug ALL
WLLogFile C:\Apache2\Apache2\logs\wls_proxy_server.txt
</IfModule>


首先,你需要用LoadModule加载ssl以及weblogic提供给apache的mod。
其次,打开SecureProxy(Set ON),然后Apache会将前端的所有请求转发给Apache信任的ManagedServer(包括sourcesite, destsite两个节点,前提是这两个节点上的ManagedServer拥有TrustedCAFile信任的CA所签发的证书/私钥,即sourcesite.der和destsite.der)。
最后,我们看看httpd.conf同一目录下的ssl.conf文件,增加一个虚拟主机的配置即可:
<VirtualHost _default_:8002>
DocumentRoot "c:/apache/htdocs"
ServerName adserver:8002
ServerAdmin dhuang@bea.com
ErrorLog logs/error_log
TransferLog logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/ssl.key/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "c:/apache/cgi">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost> 


注意:下面的私钥、证书可以独立用Openssl生成,用SecureRCP或XCA也可以,但要注意,私钥不能加密,因为Apache可能不支持私钥解密。
SSLCertificateFile conf/ssl.key/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key


有些朋友可能会问到,如果我一个sourcesite上有两个Managed Server, 分别使用8002和8004两个SSL端口,怎么办?
那就需要配置两个虚拟主机,增加一个
<VirtualHost _default_:8004>
DocumentRoot "c:/apache/htdocs"
ServerName adserver:8004
ServerAdmin dhuang@bea.com
ErrorLog logs/error_log
TransferLog logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/ssl.key/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "c:/apache/cgi">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost> 

这样,Weblogic Managed Server重定向SSL的时候, Apache必须识别来自用户的8002、8004的SSL请求。


最后,配置完毕,我们看看问题是如何被解决的:
#1,用户访问Apache Proxy http://adserver/ssl
#2,Apache Proxy转发请求给Managed Server sourcesite,http://sourcesite:8001/ssl
#3,http://sourcesite:8001/ssl返回页面,页面有一个protected的链接
#4,Apache Proxy转发响应给用户
#5,用户看到Protected链接,点击它(http://adserver/ssl/protected)
#6,Apache Proxy转发protected请求给Managed Server sourcesite,http://sourcesite:8001/ssl/protected
#7,ManagedServer发现是protected HTTP请求,要求做SSL,返回HTTP 302,要用https://sourcesite:8002/ssl/protected
#8,Apache Proxy转发响应给用户
#9,是IE而不是用户代替用户处理了HTTP 302的重定向,提交给https://adserver:8002/ssl/protected给Apache
#10,由于你配置了上面的针对SSL的虚拟主机,Apache会继续为你效劳,转发给sourcesite,https://sourcesite:8002/ssl/protected
#11,ManagedServer发现是protected SSL请求,That's OK,返回正确的响应, HelloWorld!

本来有一些SSL握手动作在Apache与ManagedServer通讯之前发生,但都无非是ManagedServer向Proxy提交自己的证书的过程,只要Managed Server的证书确实被CS这个CA签发过,则可以确保后面的请求继续,否则Apache会终止与该Managed Server通讯!

所需的证书,私钥以及证书库可以在该文件中找到
http://www.blogjava.net/Files/security/CS.rar

分享到:
评论

相关推荐

    WebLogic 集群中SSL 配置说明

    ### WebLogic 集群中SSL配置详解 #### 前言 随着互联网技术的发展,安全问题变得尤为重要。为了确保数据传输的安全性,许多企业采用了SSL(Secure Sockets Layer)加密技术来保护其Web应用程序。Oracle WebLogic ...

    apache Proxy_Error

    apache Proxy Error apache Proxy Error apache Proxy Error apache Proxy Error

    linux下apache与weblogic的整合

    在实际生产环境中,Apache与WebLogic的整合还可以涉及SSL证书配置、安全策略设置、性能优化等多个方面。这种整合方式不仅提供了负载均衡能力,还有助于隐藏后端服务器的细节,提高系统的安全性。

    apache2.4 最新版代理weblogic的插件so,亲测可用

    在某些情况下,为了优化性能、负载均衡或者安全考虑,我们可能需要在Apache前端设置一个代理服务器来转发请求到后端的WebLogic Server。`mod_wl`模块是Apache的一个插件,它使得Apache能够与WebLogic Server通信,...

    Apache+weblogic基础知识

    2. **模块管理**:Apache支持多种模块,如mod_rewrite用于URL重写,mod_ssl用于SSL/TLS加密,mod_proxy用于代理服务。用户可以根据需求加载或禁用特定模块。 3. **权限控制**:Apache可以通过设置不同的访问控制...

    Apache&weblogic;安装及配置反向代理转发

    Apache 和 Weblogic 安装及配置反向代理转发 在本文中,我们将详细介绍如何安装和配置 Apache 和 Weblogic,以实现反向代理转发。该配置可以将 Weblogic 服务器的内容转发到 Apache 服务器上,从而提高网站的性能和...

    apache集群weblogic

    Apache和WebLogic之间的通信还需要注意SSL/TLS的配置。如果应用需要HTTPS,Apache需要配置为SSL终止点,处理客户端的加密请求,然后将未加密的流量转发给WebLogic。为此,Apache需要配置相应的SSL证书和私钥。 测试...

    WebLogic11G集群配置+apache安装及配置转发

    其中,/app是Apache上的路径,weblogic_cluster是WebLogic集群的地址。 4. **负载均衡**:Apache同样可以实现负载均衡,通过`ProxyBalancer`模块,结合`BalancerMember`指令将请求分发给不同的WebLogic实例。 5. ...

    weblogic_proxy配置案例及注意事项

    在 Proxy Server 上部署代理版本包 defaultProxyApp,该版本包通常位于 #/weblogic/weblogic92/samples/server/examples/src/examples/cluster/sessionrep/inmemrep/defaultProxyApp。需要修改两个关键文件 web.xml ...

    Apache_2.4.23-x86-no-ssl.zip

    这通常涉及到下载OpenSSL二进制文件,将其添加到系统路径,然后在Apache的配置文件httpd.conf中修改或添加必要的SSL设置,如SSL证书和私钥的位置,以及启用SSL模块。 Apache的配置文件httpd.conf是控制服务器行为的...

    Weblogic10+Apache2.2.4整合过程

    整合Weblogic与Apache可以实现负载均衡、SSL终止和优化性能等功能。以下是详细的整合步骤: 一、JDK安装与配置 1. 下载JDK的Linux版本,如`jdk-1_5_0_14-linux-i586.rpm.bin`,并赋予执行权限。 2. 运行安装命令`....

    Linux下面配置Apache2 + tomcat7.0 + ssl 集群安装与配置

    在Linux环境下,构建一个基于Apache2和Tomcat7.0的SSL集群是一项关键任务,它涉及到网站的安全性和负载均衡。Apache作为前端服务器处理HTTPS请求,而Tomcat则作为后端应用服务器处理Java应用。以下是对这个配置过程...

    weblogic proxyserver

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

    apache 无法加载ssl模块的问题

    在大多数 Linux 发行版中,你可以通过包管理器(如 apt-get 或 yum)来安装,命令通常为 `sudo apt-get install libapache2-mod-proxy-ssl` 或 `sudo yum install mod_ssl`。 2. **配置问题**:检查 Apache 的配置...

    weblogic 92 cluster

    本文将深入探讨如何配置WebLogic Server 9.2集群,以及如何通过Proxy Server来访问集群。 首先,理解WebLogic的基础概念至关重要。**Domain**是WebLogic Server实例的基本管理单元,通常包含一个或多个Server实例,...

    BEA WebLogic Cluster

    ### BEA WebLogic Cluster 关键知识点 #### 一、引言与路线图 - **文档范围及受众**:本文档旨在介绍 BEA WebLogic Server 集群的使用方法,适用于那些希望了解集群如何工作以及如何配置集群以提高应用程序性能和...

    SSLproxy:透明 SSLTLS 代理,用于解密网络流量并将其转移到其他程序,例如 UTM 服务,以进行深度 SSL 检查

    SSLproxy - 透明的 SSL/TLS 代理,用于解密网络流量并将其转移到其他程序以进行深度 SSL 检查 版权所有 (C) 2017-2021, 。 版权所有 (C) 2009-2019, 。 概述 SSLproxy 是 SSL/TLS 加密网络连接的代理。 它旨在...

Global site tag (gtag.js) - Google Analytics