背景
我们公司用了金蝶的云星空,这个系统的实施团队给我们内网弄了一堆HTTP的80端口,并且系统要把HTTP映射到公网,HTTP太不安全,所以准备对外部访问改成HTTPS,这里面就有两种方案:
A.金蝶全套系统都统一改HTTPS,包括业务系统对内对外的各种接口地址都需要配置HTTPS。
B.仅更改对用户的访问地址为HTTPS,业务系统对内的接口地址等仍然使用HTTP。
因为是内网,又涉及到SSL证书内网不信任的问题,考虑服务器互相调用接口又需要重新写,金蝶的团队也不愿意干,领导意愿又不高,这里采用第二种方式。
一、实现的架构
普通用户——访问HTTPS地址——HAPROXY将HTTPS转成HTTP——金蝶前端服务器
二、操作步骤
1.HAPROXY配置
首先需要有一个SSL证书,可以购买也可以自己生成,为外网用的最好还是购买一个。
将SSL证书存储到HAPROXY的某个目录下
cd /data
[root@kcm2hatest data]# ll
总用量 24
-rw-r--r-- 1 root root 6565 8月 1 13:39 cert.pem
-rw-r--r-- 1 root root 1675 8月 1 13:39 key.key
将key与pem文件合并
[root@kcm2hatest data]# cat cert.pem key.key | tee newsslcert.pem
[root@kcm2hatest data]# ll
总用量 24
-rw-r--r-- 1 root root 6565 8月 1 13:39 cert.pem
-rw-r--r-- 1 root root 1675 8月 1 13:39 key.key
-rw-r--r-- 1 root root 8241 8月 1 14:01 newsslcer.pem
添加HAPROXY配置
#---------------------------------------------------------------------------------------------------------------
# 对外https的10000端口,对内http的10000
#--------------------------------------------------------------------------------------------------------------
listen k3-ssl
bind *:10000 ssl crt /data/newsslcer.pem #绑定SSL证书
mode http
log global
option httplog
option dontlognull
option forwardfor except 127.0.0.0/8
maxconn 8000
timeout client 30s
timeout server 30s
balance roundrobin
hash-type consistent
stick-table type ip size 10240k expire 24h
stick on src
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-For %[hdr(X-Forwarded-For)],\ %[src] if { hdr_cnt(X-Forwarded-For) gt 0 }
http-request set-header X-Forwarded-For %[src] if { hdr_cnt(X-Forwarded-For) eq 0 }
server app1 192.168.1.4:10000 check weight 50 check inter 2s rise 3 fall 5 #两个服务器的地址
server app2 192.168.1.5:10000 check weight 50 check inter 2s rise 3 fall 5 #两个服务器的地址
重启HAPROXY
systemctl restart haproxy
2.金蝶云星空配置
IIS中绑定HTTP端口,新增一个10000端口
更改星空配置文件
<appSettings> 后面加这一条
<add key="ForwardLoginUrl" value="{X-Forwarded-Proto}://{Forward-x-RequestHost}:{X-Forwarded-Port}" />
重启IIS
结果
用户访问HTTPS地址可以正常的访问云星空各项业务,实现了一定的安全性。