要求一:内网网站使用HTTPS
要求二:负载均衡使用HTTPS
要求三:通过测试得出负载均衡进行转发时消耗的时延
配置内网网站使用HTTPS部分
一、准备工作(以内部服务器-1为例)
- 配置安全项
- systemctl stop firewalld.service #关闭防火墙
- systemctl disable firewalld #禁止开机自启动
- 修改主机名
- vi /etc/hostname #编辑此文件,修改主机名为inside.com
- 域名绑定IP地址
- 编辑 /etc/hosts 文件,在文件中追加以下内容:10.0.0.1 inside.com
- inside.com为自定义的本地域名
- reboot #重启使配置生效
- 安装与实现https相关的依赖
- 内部服务器需要将修改自己的IP地址为172.16.123.1/24网段内的IP,并且将上网方式切换为桥接网络
- yum -y update
- yum -y install mod_ssl openssl #安装依赖
- 如果我们前期没有安装过httpd服务,则c这里执行的命令要替换为:
- yum -y install mod_ssl openssl httpd
- 安装需要的服务后,将IP地址修改为10.0.0.1/24 ,上网方式切换为内部网络
二、实现HTTPS
- 创建CA证书存放目录
- mkdir /etc/httpd/ca
- 修改SSL配置文件
- 编辑文件 /etc/httpd/conf.d/ssl.conf
- 取消注释 DocumentRoot 所在行
- 取消注释 ServerName 所在行,为:
- ServerName inside.com:443
- 取消 SSLProtocol all -SSLv3 所在行的注释
- 修改 SSLCertificateFile 所在行,为:
- SSLCertificateFile /etc/pki/tls/certs/inside.com.crt
- 修改 SSLCertificateKeyFile 所在行,为:
- SSLCertificateKeyFile /etc/pki/tls/private/inside.com.key
- 进入证书存放目录 /etc/httpd/ca
- 创建自己的CA证书
- openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
- 生成CA证书签名请求
- openssl req -newkey rsa:4096 -nodes -sha256 -keyout test.com.key -out test.com.csr
- 生成注册主机的证书
- openssl x509 -req -days 365 -in test.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out test.com.crt
- 复制文件到指定目录
- cp inside.com.crt /etc/pki/tls/certs/
- cp inside.com.key /etc/pki/tls/private/
- 重启Apache服务
- systemctl restart httpd
- 此时在本地主机访问https://inside.com是访问不到的,我们还需要修改本地主机的hosts文件
- 用记事本打开 C:\Windows\System32\drivers\etc 下的 hosts 文件
- 追加以下内容:172.16.123.106 inside.com
- 保存后关闭文件
配置负载均衡使用HTTPS部分
一、准备工作
- 基本思路为:
- 客户端和代理服务器之间使用HTTPS,代理服务器和内部服务器之间使用HTTP
- yum -y install mod_ssl openssl #安装https相关服务
- 修改主机名
- vi /etc/hostname #编辑此文件,修改主机名为outside.com
- 域名绑定IP地址
- 编辑 /etc/hosts 文件,在文件中追加以下内容:172.16.123.106 outside.com
- outside.com为自定义的本地域名
二、配置HTTPS-自签名证书
- mkdir /etc/nginx/ssl #新建目录,用于存放证书相关文件
- cd /etc/nginx/ssl/ #进入目录
- openssl genrsa -des3 -out server.pass.key 2048 #生成私钥
- genrsa 生成rsa私钥
- -des3 使用des3算法
- -out server.pass.key 生成的私钥文件名称
- 2048 私钥长度
- 执行7中代码后会提示输入两次密码,自己设置密码,成功后当前目录下会出现server.pass.key文件
- openssl rsa -in server.pass.key -out server.key #拷贝一个不需要输入密码的密钥文件,也可覆盖原文件,实现删除密钥文件密码的操作
- 有密码的私钥是server.pass.key,没有密码的私钥是server.key
- 步骤7和步骤9可以写为一个步骤,只需要执行:
- openssl genrsa -out server.key 2048
- 不写参数-des3 可以直接生成不需要密码的密钥文件
- 经过前面的步骤,我们已经得到私钥,生成私钥之后,便可以创建csr文件了,此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,我们使用的为第二种方法
- openssl req -new -key server.key -out server.csr -subj “/C=CN/ST=Henan/L=Zhengzhou/O=TEST/OU=TEST/CN=outside.com” #生成CSR(证书签名请求)
- 当前目录下出现csr文件
req 生成证书签名请求
-new 新生成
-key 私钥文件
-out 生成的CSR文件
-subj 生成CSR证书的参数
/C= Country 国家
/ST= State or Province 省
/L= Location or City 城市
/O= Organization 组织或企业
/OU= Organization Unit 部门
/CN= Common Name 域名或IP #此处要写自己的域名outside.com
- openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自签名证书
- 当前目录下生成crt证书t文件
- 参数 -days 365 表示证书有效期为365天
- X.509证书包含三个文件:key,csr,crt
- key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
- csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
- crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
- X.509标准是密码学里公钥证书的格式标准。X.509证书己应用在包括TLS/SSL在内的众多Internet协议里
三、配置HTTPS-修改服务器配置文件
- 编辑nginx主配置文件 /etc/nginx/nginx.conf 找到以下部分并全部取消注释
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
- 将证书和私钥的路径修改为我们之前创建的目录
ssl_certificate "/etc/nginx/ssl/server.crt";
ssl_certificate_key "/etc/nginx/ssl/server.key";
- systemctl reload nginx 保存并退出,重载nginx服务
- 在本地主机访问 https://outside.com,提示不安全,我们手动确认即可看到nginx的欢迎页
- 这时我们已经实现在本地主机和代理服务器之间的HTTPS通信了,但是还没有实现负载均衡的HTTPS,接下来我们需要配置,将发送到代理服务器的请求转发到内部服务器,达到使用负载均衡使用HTTPS的效果
- 编辑nginx主配置文件 /etc/nginx/nginx.conf,增加一行配置信息(红色字体)
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/etc/nginx/ssl/server.crt";
ssl_certificate_key "/etc/nginx/ssl/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://load1; #将请求转发到自定义服务器组 load1
}
}
- load1为我们上文中配置的服务器组
- systemctl reload nginx #保存退出并重载nginx服务
- 在浏览器地址栏访问 https://outside.com ,此时我们看到的不再是nginx的欢迎页面,而是内部服务器的网站页面
- 接下来我们需要在相同的nginx主配置文件 /etc/nginx/nginx.conf 中增加一行配置信息,将http请求重定向到https,这样即可实现在访问http的情况下也能自动跳转到https,注意我们修改的为http服务处的文件信息,而不是https服务处的文件信息,要注意上下文
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name outside.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
rewrite ^(.*)$ https://$host$1 permanent; #用于将http页面重定向到https页面
location / {
proxy_pass http://load1; #将请求转发到自定义服务器组 load1
}
location /status{
stub_status;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
- 在本地浏览器输入http://outside.com也会自动跳转到https://outside.com,负载均衡服务使用https实现
原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com