有个兄弟在做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

Apache Proxy with Weblogic Cluster under SSL相关推荐

  1. 阿里云免费SSL证书申请与安装使用-附Nginx,Apache,IIS 6,IIS 8配置SSL教程

    大家直接跳转吧:http://www.07net01.com/2017/01/1795676.html 也许是看到了Https是未来发展的大趋势,Symantec 和GeoTrust 两大SSL公司最 ...

  2. 最大化BEA WebLogic Cluster的性能、可用性和安全

    通过高级的集群功能,基于BEA WebLogic Server的电子商务应用可以跨越多台服务器.(注意:WebLogic Server支持多种类型的集群,其 中仅有一个和本文相关--它叫做Web Cl ...

  3. 【SSL】【Apache】 使用向导配置 https/ssl

    前言 Apache 2.4.39 phpStudy 8.1.1.2 tomcat 8.0 的项目 准备 在 httpd.conf 配置文件中加载 Http 反向代理用到的模块 LoadModule p ...

  4. weblogic cluster error-----Could not= open connection with host: 127.0.0.1

    weblogic主机及一台从机启动成功后,在启动从机的时候报错, <BEA-000905> <Could not open connection with host: 127.0.0 ...

  5. Apache 超详细编译参数解析

    配置帮助表: -h, --help 显示帮助信息 display this help and exit --help=short 用short参数将只显示正在运行的当前脚本的选项,而不能列出适用于Ap ...

  6. Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired

    1 .问题 apache错误日志提示如下 AH02004: SSL Proxy: Peer certificate is expired 接下来日志会打印ssl握手失败 然后抓包分析的时候错误提示如下 ...

  7. Weblogic加Apache的负载均衡以及群集配置

    Weblogic的负载均衡可以通过软件和硬件的方式实现.硬件可以使用F5等设备,软件一般使用apache来实现.下面说明使用apache的具体方法. Weblogic的负载均衡可以通过软件和硬件的方式 ...

  8. 安装和配置Apache + mongrel cluster

    背景: 机器1 192.168.100.231, os: CentOS release 3.6 (Final),装上apache2.3.6+mongrel cluster 机器2 192.168.10 ...

  9. Apache 代理(Proxy) 转发请求

    代理分为:正向代理(Foward Proxy)和反向代理(Reverse Proxy) 1.正向代理(Foward Proxy) 正向代理(Foward Proxy)用于代理内部网络对Internet ...

最新文章

  1. linux内核rcu锁实例,Linux Rcu到底有没有锁?
  2. 【Infragistics教程】在javascript类中添加静态成员属性
  3. python之初接触
  4. Spring Boot 优雅停止服务的几种方法
  5. 2019.05.15
  6. apache工作原理
  7. python面向对象的三个基本特征 含义和作用简介_面向对象语言的三个基本特征各自特点及优势...
  8. mysql5.6最好的备份方案_Mysql 5.6迁移至PostgreSQL 9.6的实践小结
  9. python编译后的pyd爆破
  10. 从MySQL导入导出大量数据的程序实现方法
  11. 【付费毕设】php mysql社团报名管理系统
  12. sql查询慢原因及优化
  13. Spring Boot中级篇-集成Swagger2分组文档
  14. The 'manifest_version' key must be present and set to 2 (without quotes)
  15. Firefox七种武器之firebug
  16. Compose 跨平台的现状
  17. C语言开发过程中段错误处理方法之经典
  18. IEEE 754浮点数工业标准
  19. 一文彻底看懂LightGBM
  20. 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦

热门文章

  1. 安装win7时提示:“缺少所需的CD/DVD驱动器设备驱动程序。…………”
  2. 1688API接口,Onebound数据
  3. python3操作excel csv、xls、xlsb、xlsm、xlsx
  4. 电力微气象灾害监测与预警
  5. Ubuntu16.04 LTS 安装NVIDIA驱动的辛酸史!+ nvidia-settings无法正常打开!+ Tensorflow-gpu成功调用GPU!
  6. ACM/OI 出题用
  7. Python Gensim文本分析——从文本预处理到TFIDF、LDA建模分析
  8. 速度环加位置环进行电机控制
  9. inux系统用户名和全名有什么区别
  10. 信息系统高级软考(备考)