开发中的一个需求,需要https环境中测试。原来开发环境只有一个jboss。
生产环境有F5,在F5上配置的证书,并卸载证书,F5后边是apache-jboss。到apache的时候已经是http请求了,所以开发环境也要经过两次跳转。开发环境使用nginx-apache-jboss这种结构。nginx上配置证书。
安装nginx
一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、首先要安装 PCRE
- 查看是否已经安装
pcre-config --version
- 如果没有安装,下载 , 解压,进目录
- 编译安装
./configure
make && make install
三、安装nginx
- 下载,解压,进入目录
- 编译安装
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make
make install
- 查看nginx版本
/usr/local/webserver/nginx/sbin/nginx -v
四、Nginx 配置
- 制作证书
方法一:
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr
按提示输入一系列的参数
Country Name (2 letter code) [AU]:CN ISO国家代码(只支持两位字符)
State or Province Name (full name) [Some-State]:XX所在省份
Locality Name (eg, city) []:XX所在城市
Organization Name (eg, company):XXXXX公司名称
Organizational Unit Name (eg, section) []:XXXXX组织名称
Common Name (eg, YOUR name) []:[X](http://kedou.com/)XX申请证书的域名
Email Address []:admin@[admin.com](http://admin.com/) 管理员邮箱
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 交换密钥
An optional company name []:
注:Common Name必须(?)和httpd.conf中server name必须一致,否则apache不能(?)启动 (启动apache时错误提示为:RSA server certificate CommonName (CN) `Kedou' does NOT match server name!? )
openssl req -x509 -days 3650 -key server.key -in server.csr -out server.crt
方法二:
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
openssl genrsa -out server.key 4096
openssl req -new -out server.csr -key server.key
按提示输入一系列的参数
Country Name (2 letter code) [AU]:CN ISO国家代码(只支持两位字符)
State or Province Name (full name) [Some-State]:XX所在省份
Locality Name (eg, city) []:XX所在城市
Organization Name (eg, company):XXXXX公司名称
Organizational Unit Name (eg, section) []:XXXXX组织名称
Common Name (eg, YOUR name) []:[X](http://kedou.com/)XX申请证书的域名
Email Address []:admin@[admin.com](http://admin.com/) 管理员邮箱
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 交换密钥
An optional company name []:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
查看conf目录下是否正常生成了server.key server.csr server.crt三个文件
以上两种方式本质上是一样的,都是自己充当认证服务器,完成证书认证得到自签名的证书,可以认为方法一是方法二的简写方式。
- 配置nginx.conf 以下为关键配置(服务器ip为10.221.10.1)
http {
server {
listen 80;
server_name dev.test.com 10.221.10.1;
return 302 https://$server_name$request_uri;
}
# HTTPS server
server {
listen 443 ssl;
server_name 10.221.10.1 dev.test.com;
ssl_certificate /opt/app/nginx-1.16.1/certs/current/server.crt;
ssl_certificate_key /opt/app/nginx-1.16.1/certs/current/server.key;
location /busi/ {
proxy_pass http://10.221.10.2:80$request_uri;
proxy_redirect http://10.221.10.2 https://dev.test.com;
}
location /cas/ {
proxy_pass http://10.221.10.2:80$request_uri;
proxy_redirect http://10.221.10.2 https://dev.test.com;
}
}
}
以上,将/busi 和 /cas的请求都转发到apache(10.221.10.2)身上。
- 其他配置,有个功能是长连接,所以这里要设置连接超时时长
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
五、Nginx 启动
- 启动nginx
/usr/local/webserver/nginx/sbin/nginx
- 常用的几个命令
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
安装apache
一、安装必须软件
- apr(下载网站:http://apr.apache.org/download.cgi)
- apr-util(下载网站:http://apr.apache.org/download.cgi)
- pcre(下载命令:wget http://ftp.exim.llorien.org/pcre/pcre-8.36.tar.gz)
二、安装apache
- 下载apache
- 解压进入目录安装
- 配置
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr/ --with-pcre=/usr/local/pcre-8.36
- 编译安装
- 如果apache也需要开启https,需要确认apache是否已经安装ssl相关module(主要为:mod_ssl.so),如果未安装, 需重新安装apache并选择加载ssl相关模块,重新编译apache,加上--enable-ssl --with-ssl参数,把ssl模块加入到已经编译好的apache中
三、配置apache
<VirtualHost *:80>
DocumentRoot "/DATA/httpd-2.2.34/htdocs"
ServerName 10.221.10.2
DirectoryIndex /test/index.html
<Directory "/webdocs">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- apache和jboss使用mod_cluster连接
在http://mod-cluster.jboss.org/downloads/ 选择需要的版本及对应的操作系统进行下载所需文件,根据网站文档进行安装
LoadModule proxy_ajp_module modules/proxy/mod_proxy_ajp.so
LoadModule advertise_module modules/mod_cluster/mod_advertise.so
LoadModule manager_module modules/mod_cluster/mod_manager.so
LoadModule slotmem_module modules/mod_cluster/mod_slotmem.so
LoadModule proxy_cluster_module modules/mod_cluster/mod_proxy_cluster.so
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 10.221.10.2:6666
NameVirtualHost 10.221.10.2:6666
ManagerBalancerName myCluster
Maxcontext 300
Maxnode 100
Maxhost 100
<VirtualHost 10.221.10.2:6666>
<Directory />
Order deny,allow
Deny from all
Allow from 10.221
Allow from 172.29
</Directory>
KeepAliveTimeout 300
MaxKeepAliveRequests 0
ServerAdvertise off
#ServerAdvertise on http://@IP@:6666
#AdvertiseFrequency 5
#AdvertiseSecurityKey secret
#AdvertiseGroup @ADVIP@:23364
EnableMCPMReceive
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
AuthType Basic
AuthName "MCM"
AuthUserFile /etc/modclusterpassword
Require user admin
Order deny,allow
Deny from all
Allow from 10.221
Allow from 127.0.0.1
</Location>
</VirtualHost>
</IfModule>
安装jboss
一、下载安装
- 直接从原有项目复制即可
二、配置jboss
- 无特殊配置
- 启动脚本增加参数
-Djboss.mod_cluster.proxyList=10.221.10.2:6666
程序访问限制
- 如果用浏览器访问上边搭建好的https地址,会提示证书不安全,需要确认后才可以访问。
- 如果是用程序进行https接口调用,可以用编码的方式信任证书。
- 如果程序不便改动,那么可以通过以下方式处理:比如busi项目需要访问/cas项目进行登录有效性的验证。
1.将cas的证书导入到busi的jvm中。首先拿到cas的证书,也就是cas所在nginx的证书server.crt,放到busi项目的服务器上。
2.执行以下命令进行导入。
keytool -import -keystore "/opt/app/jboss-eap-6.4/jdk1.8.0_144/jre/lib/security/cacerts" -file ./server.crt -alias mycas -trustcacerts
可能要求输入密码,默认密码是: changeit
- 导入成功后即可访问
- 注意 必须使用域名的方式才可以,而且证书的域名必须和cas的域名匹配 生成证书填写Common Name (eg, YOUR name) []:XX申请证书的域名这一步的时候,不能空着,要配置成cas服务器的域名才可以,就是说必须和我们要访问的域名一样,才可以。
- busi服务器需要添加host,指定ip和域名的对应关系
- 如果busi访问报错:异常信息: javax.net.ssl.SSLProtocolException,handshake alert: unrecognized_name。 给启动脚本增加参数:-Djsse.enableSNIExtension=false。然后重启jboss。
总结
- 至此,整个nginx-apache-jboss的环境搭建完毕。
网友评论