`
cherubim.chen
  • 浏览: 32534 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

rhel5+apache+jboss+ssl

阅读更多
最近想玩玩开源软件,花了近1个星期的时间整了一下,记录如下:

安装rhel5
在虚拟机下安装,虚拟机不要选scsi硬盘,选普通存储,网络模式选桥接模式,这样安装好后在linux下为网卡指定ip,端口,然后局域内所有机器都可以访问这个安装在虚拟机上的linux,如果选NAT模式,不用为网卡指定ip,自动从dhcp获得ip,这样可以不用为网卡指定ip,但只有虚拟机所在机器才能访问linux
安装好后,ftp和telnet服务默认是没安装的,可以到系统光盘目录下去找出来安装

linux默认是bsh
可以修改/etc/bashrc,在其尾部增加:
set -o vi
alias l='ls -ltr'
export PS1='[\u]$PWD>'
export JAVA_HOME='/opt/java6'
export JBOSS_HOME='/opt/jboss6'
export WL_HOME='opt/bea/weblogic10.3'
export PATH='.':'${JAVA_HOME}/bin':$PATH
------------------------------------------------------------------------------------------
安装jboss
到jboss的网站上下载,直接解压到linux下就可以用
关于多server实例和针对apache的负载均衡配置:
1、可以将jboss解压到一个公共的目录下(用root用户操作,赋予所有用户可读、可写、可执行的权限)
2、进入${JBOSS_HOME}/server目录,复制default目录生成node1、node2两个目录,分别对应两个server实例
cp -r default node1
cp -r default node2
3、分别进入node1、node2目录,修改deploy/jbossweb.sar/server.xml文件
找到<Engine name="jboss.web" defaultHost="localhost">修改为:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="server1">
即增加jvmRoute="server1"或jvmRoute="server2"(node1、node2目录分别对应server1、server2,这里的jvmRoute对应后面的apache中负载均衡配置中的route=)
4、在个人用户目录下(不要用root)新建domains目录
在domains目录下建立jbDomain1(jbDomain2)目录
在jbDomain1(jbDomain2)目录下建立startJB.sh文件,输入以下内容:
#!/bin/sh
> nohup.out
nohup sh ${JBOSS_HOME}/bin/run.sh -Djboss.service.binding.set=ports-01 -b 172.17.249.48 -c node1 &
sleep 2
tail -f nohup.out

说明:
-b 172.17.249.48指定当前server绑定的ip,默认是绑定在当前服务器所有ip上
-c node1对应前面的node1实例目录,告诉run.sh启动哪个目录实例,如果没有这个选项,默认启动default目录实例
-Djboss.service.binding.set=ports-01,指定server实例使用的端口绑定配置集
注:如果启动default目录实例,默认的端口是http:8080,ajp:8009等等
jboss6为多server实例提供了方便配置,即一组默认的端口绑定配置集:default、ports-01、ports-02、ports-03,这些可以在jboss的控制台上修改,这一组配置的端口号默认在default的基础上分别加上100、200、300,即如果用ports-01配置集,那http端口是8180,ajp端口是8109等等,这样就不用到每个server目录下去修改配置文件来指定各端口

这样用户就可以在自己的目录下建立了两个jboss domain目录,分别执行startJB.sh启动jboss实例

------------------------------------------------------------------------------------------
安装apache( --enable-ssl=shared 表示加入ssl模块)
到apache的网站上下载for linux的包,加压到linux目录下,进入apache目录,执行以下命令
注:在linux上把linux安装盘下openssl相关的包都装上
安装apache时就把ssl模块安装好,否则后续图添加好像很难添加上

./configure --prefix=/opt/apache2 --enable-modules=so --enable-ssl=shared  (opt/apache2是apache安装好后的目录位置)
make clean(第一次编译安装这个可以不用执行)
make && make install 

为apache增加proxy等模块:

/bin/httpd -M   #是否mod_proxy被加载
附:apxs命令的安装和配置选项
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中。
-a 此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
-A 与 -a 选项类似,但是它增加的LoadModule命令有一个井号前缀(#),即此模块已经准备就绪但尚未启用。
-e 表示需要执行编辑操作,它可以与 -a 和 -A 选项配合使用,与 -i 操作类似,修改Apache的httpd.conf文件,但是并不安装此模块。
-l

bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy.c /home/cherubim/httpd-2.2.17/modules/proxy/proxy_util.c 
bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy_http.c /home/cherubim/httpd-2.2.17/modules/proxy/proxy_util.c 
bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy_ftp.c /home/cherubim/httpd-2.2.17/modules/proxy/proxy_util.c 
bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy_connect.c /home/cherubim/httpd-2.2.17/modules/proxy/proxy_util.c 
bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy_balancer.c /home/cherubim/httpd-2.2.17/modules/proxy/proxy_util.c 
bin/apxs -i -c -a /home/cherubim/httpd-2.2.17/modules/proxy/mod_proxy_ajp.c /home/cherubim/httpd-2.2.17/modules/proxy/ajp*.c  


关于apache+jboss的负载均衡配置,httpd.conf中配置如下:
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ajp_module   modules/mod_proxy_ajp.so

<Proxy balancer://mycluster>
Order deny,allow
Allow from all
BalancerMember ajp://172.17.249.48:8109/admin-console route=server1 timeout=15
BalancerMember ajp://172.17.249.48:8209/admin-console route=server2 timeout=15
ProxySet stickysession=JSESSIONID
ProxySet lbmethod=bytraffic
ProxySet nofailover=On
</Proxy>
#ProxyPass / balancer://mycluster
ProxyPass /admin-console balancer://mycluster

其中的ajp是apche jserv protocol,在jboss上有开放对应的端口
route=server1要与
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="server1">中的jvmRoute对应

------------------------------------------------------------------------------------------
用openssl生成证书:
1、在linux上把linux安装盘下openssl相关的包都装上
2、openssl安装好后在usr/bin下就有openssl的可执行程序(网上有人说在usr/local目录下会生成openssl目录,但我没看到)
3、创建一个目录,用于存放将要生成的证书,如${HOME}/openssl,直接在该目录下执行以下命令(usr/bin已经在path中,可以直接运行该目录下所有命令)
注:运行openssl时会用到/etc/pki/tls/openssl.cnf,这是一个配置文件,可以手动修改,比如证书有效期默认为365天,可以改为3650
以下命令在执行过程中可能要求输入“Enter pass phrase”也就是密码,统一输入一个即可
a.首先要生成服务器端的私钥(key文件):(服务器端最好是不要设密码,否则apache启动的时候好像要输入这个密码)
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
去除key文件口令的命令:
openssl rsa -in server.key -out server.key

b.openssl req -new -key server.key -out server.csr
生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.(注:common name应该填服务器的ip或者域名,否则ie会提示域名不匹配的错误)

c.对客户端也作同样的命令生成key及csr文件:
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr

d.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

e.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
注:上述两条命令可能会报错,需要手动建立一些文件(其实这些文件路径在openssl.cnf可以找到相关配置)
在 ../../目录下建CA目录,在../../CA/下建newcerts目录
在../../CA目录下产生一个index.txt的空文件
在../../CA目录下产生一个serial的文件,在第一行输入“01”(不包含引号)

现在我们所需的全部文件便生成了.

另:
client使用的文件有:ca.crt,client.crt,client.key
server使用的文件有:ca.crt,server.crt,server.key
.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了)

f.合并成pfx证书:(client.crt好像在ie中也可以直接使用)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

e.把目录下的ca.crt和server.crt,server.key都复制到apache的conf目录下,(ssl.conf需要)
  ca.key自己保留吧,找个合适的地方储存起来.

#########################################################################
客户端安装证书
打开internet explorer(IE),工具-internet选项-内容-证书,点选'个人'
再点击导入,把客户端证书client.p12导入到个人组里。
这里还要输入刚才建立的输出密码才能倒入呢。

接着,点选'受信任的根证书颁发机构',点击导入,把CA根证书ca.crt导入到受信任的根证书颁发机构里。
#########################################################################
停止apache,启动ssl:
修改conf/httpd.conf,将Include conf/extra/httpd-ssl.conf前的#号去掉

客户端验证服务器已经可以了,如果要实现服务器端认证客户端,需要修改:
conf/extra/httpd-ssl.conf文件:
SSLVerifyClient require
SSLVerifyDepth  1

SSLCACertificatePath "/opt/apache/conf"
SSLCACertificateFile "/opt/apache/conf/ca.crt"

好啦,重新启动apache,启动时好像要求输入密码,就输入前面说的统一密码好了
打开IE,
在地址栏里输入https://ip或者域名,弹出个窗口要选择个人的数字证书。
点选,然后确定。
如果服务器证书的common name填写正确的话,你就可以直接进入网站了,看到右下角的小锁头(可靠的SSL128位)。
如果服务器证书的common name填写不正确,就会弹出个‘安全警报’框,告诉你3条:
1.安全证书由信任的站点颁发
(如果说是由不信任的站点颁发,那就是你的ca根证书ca.crt没有导入到ie的受信任的根证书颁发机构里)

2.安全证书的日期有效 
(这个日期缺省是10年,可以在openssl.cnf里调整修改,然后重新制作一整套证书(openssl.cnf看起来像拨

号网络的快捷方式,要用记事本,写字板打开修改))

3.“安全证书上的名称无效,或者与站点名称不匹配”
这就是服务器证书的common name填写不正确所致,不过这也没关系,有人好像愿意这样。我是不想看到这个警告框,烦人。

即使有安全警报,你仍能进入网站,看到右下角的小锁头(可靠的SSL128位)
#################################
最后,成功啦!用吧。
我自己把httpd.conf里的listen 80都加#注释了,servername改为10.10.10.10:443,只用https不用http,嗬嗬!!


由上可见,服务器端证书和客户端证书其实是对等的,没有什么特别。都是用来标明身份的,只不过服务端证书的common name在填写的时候要注意与服务器的ip或域名匹配,否则ie会提示警告
每份证书中包含了证书拥有者的公钥、私钥以及上级证书的对它的签名(认证)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics