最近项目中遇到这样的问题可能会涉及到这些东西才去补习了一下吧,apache + tomcat 这是做负载均衡用的,这个不用说,由于这个项目是针对公司内部人员使用的,所以会要求使用https请求,同时系统会根据https请求发来的证书信息去mapping 相应的用户,也就是我们员工啦。其实以前做的系统都是基于http请求的,所以一开始接触https还是要从一些概念入手,像加密技术、SSL、对称加密、非对称加密、公钥、私钥、证书之类的概念,这些东西自己百度都有。主要就是整合配置这些东西,让他们跑起来。
网上找了一些资料,大部分都一样,照抄也不一定都能实现,现在人都太懒啦。抄的东西估计自己都不验证是否行得通。我现在自己把这两天搞得东西记录下吧,省的以后忘了,有的东西要靠使用才会产生记忆,学而不用的话,只是增加大脑垃圾空间,跟电脑一样,像我电脑很久钱存的一些东西,现在都不知道是做什么用的。好吧,不废话了。
简单的流程是这样:可以想下有三个证书。根证书root.cert,个人证书client.cert,服务器证书server.cert。
根证书可以存在客户端浏览器上和服务器上,在浏览器上是为了验证服务器证书是否可信,在服务器上是为了验证个人证书也就是从浏览器过来的用户是否可信,如果服务器要求验证客户端用户的话。个人证书主要是存放在客户端,一般是在IE里,服务器证书当然是放在服务器可以找的着的地方啦,比如数据库或就在放在服务器上。一般会有单向认证和双向认证,单向认证主要就是客户端要验证所请求的服务器,这时客户端不是需要用户个人证书的,但是会要求服务器端发送证书过来,和浏览器中的根证书比较,看是否可信,不可信的话会弹出框框哦。双向认证的话就是在上面过程结束后,服务器端也会要求客户端发送证书过来,和我服务气端的存放根证书比较,我也要看你是不是可信,不然我也不甩你啦。
apache 和tomcat 的loadbalance配置是通过mod_jk实现的,当然也可以通过mod_proxy
SSL 可以配在tomcat上 也可以陪在 apache 上 ,一般我们和loadbalance 一样,也配在 apache 上,这样我们tomcat 也省的另开8443端口。下面是我的配置(关于怎么生成证书,这个我们现在用的是自己公司颁发的,个人证书也是自己发邮件申请的)。顺带把所有配置都贴上先贴loadbalance 配置 :
打开%apache_home%/conf/httpd.conf,在文件中追加Include conf/mod_jk.conf 这句
在%apache_home%/conf目录中新增mod_jk.conf 文件,里面内容如下:
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /* admin
注:mod_jk.so这个东西自己从官网下,然后放到 %apache_home%/modules 目录中。
在%apache_home%/conf目录中新增workers.properties 文件,内容如下:
# Define 1 real worker using ajp13
worker.list=admin,node1
# Set properties for admin (ajp13)
worker.node1.type=ajp13
worker.node1.host=127.0.0.1
worker.node1.port=8009
worker.node1.lbfactor=50
#worker.node1.cachesize=10
# worker.node1.cache_timeout=600
worker.node1.socket_keepalive=1
# worker.node1.recycle_timeout=300
# Now we define the load-balancing behaviour
worker.admin.type=lb
worker.admin.balance_workers=node1
#worker.admin.sticky_session=true
#worker.admin.sticky_session_force=true
这个是负载均衡配置,我这边只配了一个,可以增加更多的node。这时你可以通过打开http://localhost 看是否是tomcat的欢迎页面。
下面是apache 和SSL 的配置打开%apache_home%/conf/httpd.conf,去掉mod_ssl模块相关的注释:如下图:
打开 %apache_home%/conf/extra/httpd-ssl.conf 文件,找到如下位置加上
JkMount /* admin 如图
这句意思是所有的请求交给我们上面配置的负载均衡器admin 转发给tomcat,admin 要和之前workes.property 里面配置名称一致哦。
接下来就是指明服务器证书和根证书存放的位置,如下也是%apache_home%/conf/extra/httpd-ssl.conf这个文件证书存放的位置
SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.crt"
制定证书私钥存放的位置
SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.key"
指定根证书存放的位置
SSLCACertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/intranet.cer"
(关于如何制作证书及密钥可以参考用openssl 自己制作,可以下载httpd-2.2.19-win32-x86-openssl- 0.9.8r.msi这个apache版本,里面自带openssl,只需在apache_home bin目录下3句命令即可生成)
然后还要注释掉%apache_home%/conf/extra/httpd-ssl.conf文件中如下部分,即需要客户端即IE浏览器发送证书到服务器进行验证
SSLVerifyClient require
SSLVerifyDepth 1 (默认是10)
最后要把%apache_home%/conf/extra/httpd-ssl.conf文件中SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire 前面的注释“#”去掉,这句主要是要将apache收到的客户端用户的证书传递给tomcat,以便我们能在tomcat中根据证书信息去映射相应的用户。OK,至此配置基本完成,可以发送一个https请求给tomcat了,直接运行tomcat自带的例子吧,
https://localhost/examples/
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。