如何把一个web集群由HTTP转换为HTTPS
发布网友
发布时间:2022-05-01 23:53
我来回答
共2个回答
热心网友
时间:2022-06-25 07:03
1、概述
如果你的应用使用SSL证书,则需要决定如何在负载均衡器上使用它们。
单服务器的简单配置通常是考虑客户端SSL连接如何被接收请求的服务器解码。由于负载均衡器处在客户端和更多服务器之间,SSL连接解码就成了需要关注的焦点。
2、有两种主要的策略
第一种是我们选择的模式,在haproxy这里设定SSL,这样我们可以继续使用七层负载均衡。SSL连接终止在负载均衡器haproxy ----->解码SSL连接并发送非加密连接到后端应用tomcat,这意味着负载均衡器负责解码SSL连接,这与SSL穿透相反,它是直接向代理服务器发送SSL连接的。
第二种使用SSL穿透,SSL连接在每个tomcat服务器终止,将CPU负载都分散到tomcat服务器。然而,这样做会让你失去增加或修改HTTP报头的能力,因为连接只是简单地从负载均衡器路由到tomcat服务器,这意味着应用服务器会失去获取 X-Forwarded-* 报头的能力,这个报头包含了客户端IP地址、端口和使用的协议。
有两种策略的组合做法,那就是第三种,SSL连接在负载均衡器处终止,按需求调整,然后作为新的SSL连接代理到后台服务器。这可能会提供最大的安全性和发送客户端信息的能力。这样做的代价是更多的CPU能耗和稍复杂一点的配置。
选择哪个策略取决于你及应用的需求。SSL终端为我所见过最典型的策略,但SSL穿透可能会更安全。
3、使用HAProxy作为SSL终端
首先,我们将介绍最典型的解决方案 - SSL 终端。正如前面提到的,我们需要让负载均衡器处理SSL连接。这就意味着要将SSL证书放在负载均衡服务器上。
记住,在生产环境里使用(而不是自签名)的SSL证书,是不会需要你自己来生成或签名 - 你只需要创建证书签名请求 (csr) 并把它交给那个你向它购买证书的机构即可。
首先, 我们创建一份自签名的证书作为示范,并在本地使用同一份证书。
openssl genrsa -out /etc/haproxy/wzlinux.key 2048
openssl req -new -key /etc/haproxy/wzlinux.key -out /etc/haproxy/wzlinux.csr
> Country Name (2 letter code) [AU]:CN
> State or Province Name (full name) [Some-State]:Shanghai
> Locality Name (eg, city) []:Shanghai
> Organization Name (eg, company) [Internet Widgits Pty Ltd]:wzlinux
> Organizational Unit Name (eg, section) []:
> Common Name (e.g. server FQDN or YOUR name) []:www.wzlinux.com
> Email Address []:
> Please enter the following 'extra' attributes to be sent with your certificate request
> A challenge password []:
> An optional company name []:
cd /etc/haproxy
openssl x509 -req -days 3655 -in wzlinux.csr -signkey wzlinux.key -out wzlinux.crt
这就生成了wzlinux.csr,wzlinux.key和wzlinux.crt文件了。
接着,在创建了证书之后,我们需要创建pem文件。pem文件本质上只是将证书、密钥及证书认证中心证书(可有可无)拼接成一个文件。在我们的例子中,我们只是简单地将证书及密钥文件并以这个顺序拼接在一样来创建wzlinux.pem 文件。这是HAProxy读取SSL证书首选的方式。
cat wzlinux.crt wzlinux.key | tee wzlinux.pem
当购买真正的证书 时,你不一定会获取拼接后的文件。你可以要自己拼接它们。然而,很多机构也会提供一份拼接好的文件给你。如果你没有获取到拼接后的文件,则它可能不是一个 pem 文件,而是 bundle、cert、cert、key文件或一些相同概念但名称类似的文件。
无论如何,只要我们得到了HAProxy使用的pem文件,我们只需经过简单配置就是可以处理SSL连接了。
下面我们将要配置haproxy来安装SSL证书,配置文件如下
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 warning
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 400000
user haproxy
group haproxy
daemon
tune.ssl.default-dh-param 2048
# nbproc 3
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
option httpclose
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
stats enable
stats hide-version
stats uri /haproxy?status
stats realm Haproxy\ Statistics
stats auth admin:asd870719
# stats admin if TRUE
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
#frontend main *:5000
# acl url_static path_beg -i /static /images /javascript /stylesheets
# acl url_static path_end -i .jpg .gif .png .css .js
# use_backend static if url_static
# default_backend app
frontend wzlinux_ssl
bind *:80
bind *:443 ssl crt /etc/haproxy/wzlinux.pem
mode http
default_backend wzlinux
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
# balance roundrobin
# server static 127.0.0.1:4331 check
backend wzlinux
mode http
balance roundrobin
option forwardfor
# option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server wzlinux01 10.0.0.9:8080 check inter 15000 rise 2 fall 4
server wzlinux02 10.0.0.9:8081 check inter 15000 rise 2 fall 4
server wzlinux03 10.0.0.9:8082 check inter 15000 rise 2 fall 4
server wzlinux04 10.0.0.9:8083 check inter 15000 rise 2 fall 4
server wzlinux05 10.0.0.9:8084 check inter 15000 rise 2 fall 4
server wzlinux06 10.0.0.9:8085 check inter 15000 rise 2 fall 4
server wzlinux07 10.0.0.9:8086 check inter 15000 rise 2 fall 4
# http-request set-header X-Forwarded-Port %[dst_port]
# http-request add-header X-Forwarded-Proto https if { ssl_fc }
因为 SSL 连接在负载均衡器上终止了,我们依然来发送正常的 HTTP 请求到后台服务器。
只接受SSL连接
如果你想让网站只接受SSL连接,你可以添加向前端配置加上redirect导向:
frontend wzlinux_ssl
bind *:80
bind *:443 ssl crt /etc/haproxy/wzlinux.pem
redirect scheme https if !{ ssl_fc }
mode http
default_backend wzlinux
上面,我们添加了 redirect 导向,如果连接不是通过SSL连接的,它将http重定向到https。
4、使用HAProxy实现SSL穿透
使用SSL穿透,我们将让后台服务器处理SSL连接,而非负载均衡器来处理。
负载均衡器的工作就只是简单地将请求转发到配置好的后台服务器。因为连接还保持加密状态,HAProxy只能将它转发给其他服务器,其他事情就没法做了。
在这个配置中,我们需要在前端和后台配置中同时使用TCP模式而不是HTTP模式。HAProxy只会把连接当作信息流来转发到其他服务器,而不会使用在HTTP请求上才能使用的功能。
首先,我们调整一下前端配置:
frontend wzlinux_ssl
bind *:80
bind *:443
option tcplog
mode tcp
default_backend wzlinux
这里依然同时绑定80和443端口,以保证正常的HTTP连接和SSL连接都能工作。
正如上述提到的,转发一个安全连接而服务器而不作任何解码,我们需要使用TCP模式(mode tcp)。这也意味着我们需要设置tcp日志而不是默认的http日志(option tcplog)。
接着,我们要调整后台end配置。注意,我们还要将这个更改成TCP模式,并删除一些directives以避免因为修改/增加HTTP报头功能所带来的冲突:
backend wzlinux
mode tcp
balance roundrobin
option ssl-hello-chk
server wzlinux01 10.0.0.9:8080 check inter 15000 rise 2 fall 4
server wzlinux02 10.0.0.9:8081 check inter 15000 rise 2 fall 4
server wzlinux03 10.0.0.9:8082 check inter 15000 rise 2 fall 4
server wzlinux04 10.0.0.9:8083 check inter 15000 rise 2 fall 4
server wzlinux05 10.0.0.9:8084 check inter 15000 rise 2 fall 4
server wzlinux06 10.0.0.9:8085 check inter 15000 rise 2 fall 4
server wzlinux07 10.0.0.9:8086 check inter 15000 rise 2 fall 4
正如你所看到的,这里设置成了mode tcp - 前端和后台配置都需要设置成这个模式。
我们还删除了option forwardfor和http-request选项 - 这些不能用于TCP模式,而且我们也不能向已加密的请求添加报头,还有一些前面的默认配置也删去关于http的配置,这里不再演示。
为了检查正确与否,我们可以使用ssl-hello-chk来检查连接及它处理SSL(特别是SSLv3)连接的能力。
在这个例子中,我虚构了两个接受SSL证书的后台服务器。如果你有阅读过 edition SSL certificates ,你会看到如何将它们集成到 Apache 或 Nginx 来创建一个网络服务器后台,以处理SSL通信。使用SSL 穿越,不需要给HAProxy创建或使用SSL证书。后台服务器都能够处理SSL连接,如同只有一台服务器且没有使用负载均衡器那样。
热心网友
时间:2022-06-25 07:03
技术方面的话我解决不了,但是https是因为http增加了一个SSL证书,申请一个SSL证书就可以由HTTP转换为HTTPS.深圳 EVTrust
如何把http变成https
首先,确保数据加密,获取SSL证书是转换的基础。这需要明确您的网站运行服务器类型,以及是通过托管服务商还是自建服务器。一旦确定,就需要获取相应的SSL证书。其次,安装SSL证书是关键。对于托管服务商用户,可以利用自动安装工具轻松完成;对于自建服务器用户,需手动导入证书文件,并配置服务器启用SSL功能。...
静态ip - StormProxies
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球200+的国家与地区,超7000万住宅IP。3、高可靠性,24小时稳定运行,平均99.99%的可用率;4、性价比更高,便宜好用,单个IP也能享受最优价格,没有额外费用;5、易于使用,支持HTTP/HTTPS/SOCKS5协议,提供多种API参数,网络集成更快捷;6、客服全天在线为您排忧解难,并可根据您的业务需求制定更合适的代理…StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
如何把一个web集群由HTTP转换为HTTPS
# http-request add-header X-Forwarded-Proto https if { ssl_fc }因为SSL 连接在负载均衡器上终止了,我们依然来发送正常的 HTTP 请求到后台服务器。只接受SSL连接如果你想让网站只接受SSL连接,你可以添加向前端配置加上redirect导向:frontend wzlinux_ssl bind *:80 bind *:443 ssl crt /etc/haproxy/wzlin...
怎样把网站从http转换成https
http转换成https需要申请SSL证书,具体的申请流程如下:第一步,生成并提交CSR(证书签署请求)文件CSR文件一般都可以通过在线生成(或服务器上生成),申请人在制作的同时系统会产生两个秘钥,公钥CSR和密钥KEY。选择了SSL证书申请之后,提交订单并将制作生成的CSR文件一起提交到证书所在的CA颁发机构。第二...
一步步教你把HTTP网站免费转成HTTPS网站
(4)选择“免费型DV SSL”,并点击立即购买。购买成功后跳转到“我的证书”页面:(5)此时的状态处于“待完成”,点击右侧“补全”按钮,补全域名信息:(6)按照流程单击“下一步”,填写个人信息,上传相关信息等。最后跳回“我的证书”页面:(7)此时的状态变成了“待审核”。点击右侧“进度”按钮,进...
网站从http转换成https怎么弄 网站从http转换成https方法介绍
1、确定需要HTTPS的域名,当然这个域名是独立的,可以正常解析。2、拥有一台独立服务器,通常适应的是云服务器(虚拟主机通常都不支持的)。3、网站程序源码,这个很重要不是所有源码都支持HTTPS,不过通常主流都是支持的,不支持的也是稍微修改一下就可以了。4、关键的一步HTTPS是要办理认证的,这一点...
web项目http如何改成https
您好!实现HTTPS很简单,主要注册SSL证书安装到服务器,当然最好是独立服务器(云服务器)才可以实现安装证书。一、确定需要域名(网址),登陆淘宝:Gworg 注册SSL证书。二、按照客服的要求完成域名验证,通常是DNS解析认证,比较简单。三、获得SSL证书,将SSL证书安装到服务器,就可以实现HTTPS了。
http链接怎么转https
http链接转https方法:确定自己的网站地址然后将网址给Gworg做一下SSL认证。认证可以选择直接认证或者自助申请认证,一般提交认证几分钟就可以拿到数字证书。然后就是去网站主机里面上传数字证书文件,如果不会也可以让Gworg一次性完成上传,完成后网站就改成HTTPS访问了。网站建好后默认都是http网站,这种网站...
在项目中如何把http的请求换成https
步骤一、确认已经配置好SSL证书 步骤二、修改主机头值,可以随便输入 步骤三、新建一个站点,主机头填写为您的域名。步骤四、将路径选择为您的网站目录,设置访问权限为只读即可。步骤五、创建好后站点后,选择该站点,点击鼠标右键–“属性”–“主目录”,按照下图设置,选中“重定向到URL”,并勾选“...
网站从http转换成https怎么弄?
那么网站怎样从http转换成https呢?1、申请SSL证书 网站要实现https加密,首先要申请SSL证书,申请SSL证书的步骤如下:CSR文件制作:申请SSL证书之前,需要制作CSR文件,可在沃通官网CSR在线生成工具中生成CSR文件,并妥善保存生成好的CSR和Key文件,然后将CSR提供给SSL证书供应商来申请SSL证书。CA认证证书申请...
如何将http改成https
您好!一、首先在独立的服务器(云服务器、VPS),搭建好普通的网站,并且这个网站可以访问。二、登陆淘宝搜索关键字:Gworg 获取SSL证书。三、拿到SSL证书安装到服务器就实现HTTPS网站了。注:虚拟主机通常都不支持。