Linux实训4

要求一:内网网站使用HTTPS

要求二:负载均衡使用HTTPS

要求三:通过测试得出负载均衡进行转发时消耗的时延

配置内网网站使用HTTPS部分

一、准备工作(以内部服务器-1为例)

  1. 配置安全项
    1. systemctl stop firewalld.service #关闭防火墙
    2. systemctl disable firewalld #禁止开机自启动
  2. 修改主机名
    1. vi /etc/hostname #编辑此文件,修改主机名为inside.com
  3. 域名绑定IP地址
    1. 编辑 /etc/hosts 文件,在文件中追加以下内容:10.0.0.1 inside.com
    2. inside.com为自定义的本地域名
  4. reboot #重启使配置生效
  5. 安装与实现https相关的依赖
    1. 内部服务器需要将修改自己的IP地址为172.16.123.1/24网段内的IP,并且将上网方式切换为桥接网络
    2. yum -y update
    3. yum -y install mod_ssl openssl #安装依赖
    4. 如果我们前期没有安装过httpd服务,则c这里执行的命令要替换为:
      1. yum -y install mod_ssl openssl httpd
    5. 安装需要的服务后,将IP地址修改为10.0.0.1/24 ,上网方式切换为内部网络

二、实现HTTPS

  1. 创建CA证书存放目录
    1. mkdir /etc/httpd/ca
  2. 修改SSL配置文件
    1. 编辑文件 /etc/httpd/conf.d/ssl.conf
    2. 取消注释 DocumentRoot 所在行
    3. 取消注释 ServerName 所在行,为:
      1. ServerName inside.com:443
    4. 取消 SSLProtocol all -SSLv3 所在行的注释
    5. 修改 SSLCertificateFile 所在行,为:
      1. SSLCertificateFile /etc/pki/tls/certs/inside.com.crt
    6. 修改 SSLCertificateKeyFile 所在行,为:
      1. SSLCertificateKeyFile /etc/pki/tls/private/inside.com.key
  3. 进入证书存放目录 /etc/httpd/ca
  4. 创建自己的CA证书
    1. openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
  5. 生成CA证书签名请求
    1. openssl req -newkey rsa:4096 -nodes -sha256 -keyout test.com.key -out test.com.csr
  6. 生成注册主机的证书
    1. openssl x509 -req -days 365 -in test.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out test.com.crt
  7. 复制文件到指定目录
    1. cp inside.com.crt /etc/pki/tls/certs/
    2. cp inside.com.key /etc/pki/tls/private/
  8. 重启Apache服务
    1. systemctl restart httpd
  9. 此时在本地主机访问https://inside.com是访问不到的,我们还需要修改本地主机的hosts文件
    1. 用记事本打开 C:\Windows\System32\drivers\etc 下的 hosts 文件
    2. 追加以下内容:172.16.123.106 inside.com
    3. 保存后关闭文件

配置负载均衡使用HTTPS部分

一、准备工作

  1. 基本思路为:
    1. 客户端和代理服务器之间使用HTTPS,代理服务器和内部服务器之间使用HTTP
  2. yum -y install mod_ssl openssl #安装https相关服务
  3. 修改主机名
    1. vi /etc/hostname #编辑此文件,修改主机名为outside.com
  4. 域名绑定IP地址
    1. 编辑 /etc/hosts 文件,在文件中追加以下内容:172.16.123.106 outside.com
    2. outside.com为自定义的本地域名

二、配置HTTPS-自签名证书

  1. mkdir /etc/nginx/ssl #新建目录,用于存放证书相关文件
  2. cd /etc/nginx/ssl/ #进入目录
  3. openssl genrsa -des3 -out server.pass.key 2048 #生成私钥
    1. genrsa 生成rsa私钥
    2. -des3 使用des3算法
    3. -out server.pass.key 生成的私钥文件名称
    4. 2048 私钥长度
  4. 执行7中代码后会提示输入两次密码,自己设置密码,成功后当前目录下会出现server.pass.key文件
  5. openssl rsa -in server.pass.key -out server.key #拷贝一个不需要输入密码的密钥文件,也可覆盖原文件,实现删除密钥文件密码的操作
    1. 有密码的私钥是server.pass.key,没有密码的私钥是server.key
  6. 步骤7和步骤9可以写为一个步骤,只需要执行:
    1. openssl genrsa -out server.key 2048
    2. 不写参数-des3 可以直接生成不需要密码的密钥文件
  7. 经过前面的步骤,我们已经得到私钥,生成私钥之后,便可以创建csr文件了,此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,我们使用的为第二种方法
  8. openssl req -new -key server.key -out server.csr -subj “/C=CN/ST=Henan/L=Zhengzhou/O=TEST/OU=TEST/CN=outside.com” #生成CSR(证书签名请求)
    1. 当前目录下出现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
  1. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自签名证书
    1. 当前目录下生成crt证书t文件
    2. 参数 -days 365 表示证书有效期为365天
    3. X.509证书包含三个文件:key,csr,crt
      1. key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
      2. csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
      3. crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
    4. X.509标准是密码学里公钥证书的格式标准。X.509证书己应用在包括TLS/SSL在内的众多Internet协议里

三、配置HTTPS-修改服务器配置文件

  1. 编辑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 {
#        }
#    } 
  1. 将证书和私钥的路径修改为我们之前创建的目录
        ssl_certificate "/etc/nginx/ssl/server.crt";
        ssl_certificate_key "/etc/nginx/ssl/server.key"; 
  1. systemctl reload nginx 保存并退出,重载nginx服务
  2. 在本地主机访问 https://outside.com,提示不安全,我们手动确认即可看到nginx的欢迎页
  3. 这时我们已经实现在本地主机和代理服务器之间的HTTPS通信了,但是还没有实现负载均衡的HTTPS,接下来我们需要配置,将发送到代理服务器的请求转发到内部服务器,达到使用负载均衡使用HTTPS的效果
    1. 编辑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       
        }
    } 
    1. load1为我们上文中配置的服务器组
    2. systemctl reload nginx #保存退出并重载nginx服务
    3. 在浏览器地址栏访问 https://outside.com ,此时我们看到的不再是nginx的欢迎页面,而是内部服务器的网站页面
  1. 接下来我们需要在相同的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 {
        }
    } 
  1. 在本地浏览器输入http://outside.com也会自动跳转到https://outside.com,负载均衡服务使用https实现

原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com

(1)
witersen的头像witersen
上一篇 2019年10月22日 下午7:51
下一篇 2020年9月17日 下午6:52

相关推荐

发表回复

登录后才能评论