CA机构和HTTPS站点的搭建

HTTPS:它通过在 HTTP 协议的基础上引入 SSL/TLS 协议,使得数据在传输过程中得到加密和保护。这样,HTTPS 能够保证通信的安全性,防止数据泄露和篡改,同时对服务器进行身份认证,让客户端能够确认所连接的服务器是真实可靠的。

HTTP:即超文本传输协议,它是一种用于在网络上传输超文本(如 HTML 页面、图片、视频等)的应用层协议。HTTP 以明文形式传输数据,这意味着数据在传输过程中容易被窃取、篡改或监听,存在安全风险。

SSL/TLS:SSL(安全套接层)及其继任者 TLS(传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。它们位于传输层和应用层之间,主要作用是对应用层数据进行加密、认证和完整性保护。

HTTPS=HTTP+SSL/TLS

HTTP:以明文的方式通过 80端口进行数据传输
HTTPS:以数据加密的方式通过443端口进行数据传输

连接建立过程

  • 客户端发起请求:客户端向服务器发送一个 HTTPS 请求,请求中包含客户端支持的加密算法、SSL/TLS 协议版本等信息,随机生成一组32字节数据random_c
  • 服务器响应:服务器收到请求后,选择双方都支持的加密算法和协议版本,并将自己的数字证书发送给客户端,公钥加密数据随机生成一组32个字节的数据random_s
  • 客户端验证与密钥交换:客户端验证服务器的数字证书,并从中获取服务器的公钥。然后客户端生成一个随机的对称加密密钥pre_master,使用服务器的公钥对其进行加密,并发送给服务器。
  • 连接建立:服务器使用自己的私钥解密客户端发送的对称加密密钥pre_master,双方都拥有了相同的对称加密密钥,之后就可以使用该密钥进行加密数据传输,同时通过消息认证码来确保数据的完整性。最后的会话密钥:random_c+random_s+pre_master
    在这里插入图片描述

CA机构的搭建

openssl: 命令的选项
-x509 :生成自签名证书格式,专用于创建私有CA
-new :生成新证书的签署请求
-key :生成请求时用到的私钥文件路径
-out :生成后的文件存放路径,如果是自签名操作,将直接生成签署过的证书
-days :证书有效期 默认是365天

前提:在DNS服务器上的正向解析数据库中添加ca.example.com的解析内容
vim /var/named/examp.com
ca IN A 192.168.100.200

systemctl restart named
  1. 在主机CA上为主机CA生成私钥

    (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem)
    
    umask 077	//创建文件时,设置只有所有者具有读写权限
    openssl genrsa		//生成私钥
    -out		//设置私钥的存放路径
    
  2. 在主机CA上为主机CA生成自签名证书

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
    
    openssl req -new		//请求生成新证书
    -x509		//创建私有CA
    -key		//请求时后面接用到的私钥文件路径
    -out		//后面接生成证书的路劲
    

    Country Name(国家):CN
    State or Province Name(省份):HB
    Locality Name(城市):WH
    Organization Name(组织名称):LQ
    Organizational Unit Name(组织单位名称):IT
    Common Name(服务器主机名):ca.example.com
    Email Address(邮箱):root@example.com

​ web证书:web端生成私钥—>web端生成签署请求文件—>发送CA—>CA签名—>CA服务器端生成 web证书—>web端下载web证书

  1. 在主机CA上为CA提供所需的目录及文件

    touch /etc/pki/CA/index.txt		//生成数据库文件
    echo 01 > /etc/pki/CA/serial	//生成序列号文件
    
  2. 主机WEB上为主机WEB生成私钥,并将私钥存放在/etc/httpd/ssl目录中

    mkdir -p /etc/httpd/ssl
    (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key)
    
  3. 主机WEB上为server.example.com站点生成签署请求文件(生成自签名证书)

    openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
    
    /etc/httpd/ssl/httpd.csr 	//此时的httpd.csr证书是没有签名的证书
    

    Country Name(国家):CN
    State or Province Name(省份):HB
    Locality Name(城市):WH
    Organization Name(组织名称):LQ
    Organizational Unit Name(组织单位名称):IT
    Common Name(服务器主机名):server.example.com
    Email Address(邮箱):root@example.com

  4. 主机web上将签署请求文件通过可靠方式发送给CA服务器。

    scp /etc/httpd/ssl/httpd.csr  root@ca.example.com:/etc/pki/CA/
    

    在这里插入图片描述

  5. 在主机CA上 对签署请求进行数字签名,并指明所生成的Web证书的存放路径

    openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
    
    /etc/pki/CA/certs/httpd.crt	//此时的httpd.crt文件才是已经签名后可用的文件
    
  6. 在主机WEB上将CA主机上已经数字签名后的Web证书下载下来

    scp root@ca.example.com:/etc/pki/CA/certs/httpd.crt /etc/httpd/ssl/
    
  7. 主机WEB上安装apche http扩展模块mod_ssl

    yum  -y install mod_ssl
    
  8. 主机WEB上修改主配置文件,使用刚刚下载的web证书

    vim  /etc/httpd/conf.d/ssl.conf
    //在ssl.conf配置文件内做以下修改
    SSLCertificateFile /etc/httpd/ssl/httpd.crt		//指定存放证书的位置
    SSLCertificateKeyFile /etc/httpd/ssl/httpd.key	//指定私钥存放的位置
    

    在这里插入图片描述

  9. 主机WEB上的/var/www/html/目录内创建index.html文件

    echo maoqi > index.html
    
  10. 主机WEB上部署https站点

    vim /etc/httpd/conf.d/httpd-vhosts.conf
    //在httpd-vhosts.conf文件内添加以下内容
    <VirtualHost 192.168.100.100:443>
        DocumentRoot "/var/www/html"
        ServerName web.example.com
        SSLEngine on
        SSLCertificateFile /etc/httpd/ssl/httpd.crt
        SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
    </VirtualHost>
    
    systemctl restart httpd
    
  11. 设置防火墙

    firewall-cmd  --add-service=https  --permanent
    firewall-cmd --reload
    
  12. 在客户端上去下载CA服务器上的根证书

    scp  root@ca.example.com:/etc/pki/CA/cacert.pem  /root
    
  13. 打开火狐浏览器,导入证书
    设置–首选项–高级–证书–查看证书–导入–找到根证书,然后双击–把“信任使用此CA标识的网站”勾上–确定–确定

  14. 访问https://web.example.com

集成动态web内容

主机WEB上:

  1. 安装httpd mod_wsgi

    yum -y install httpd  mod_wsgi
    
  2. 上传动态web内容–Python语言编写

    mkdir  /var/www/wsgi
    cd  /var/www/wsgi   	//然后将Python编写的动态web内容上传到该目录下
    

    注意,转移的文件ch可能没有执行权限,所以需要赋予文件执行权限

    chmod +x 【文件名】
    
  3. 部署虚拟主机
    首先将httpd.conf里面的documentroot那一行注释掉
    然后将虚拟主机配置文件模板复制到/etc/httpd/conf.d/这个目录下

    cp -p httpd-vhosts.conf /etc/httpd/conf.d/
    vim  /etc/httpd/conf.d/httpd-vhosts.conf	//进入文件修改以下内容
    
    <VirtualHost 192.168.100.100:80>
        DocumentRoot "/var/www/wsgi"
        WSGIScriptAlias  /   "/var/www/wsgi/webapp.py"
        #ServerName py.example.com
    </VirtualHost>
    
    systemctl restart httpd
    
  4. 在DNS服务器的正向解析数据库中写入py.example.com对应的解析内容
    vim /var/named/example.com
    py IN A 192.168.100.100

    systemctl restart named
    
  5. 在web服务器上设置防火墙

    firewall-cmd --add-service=http  --permanent
    firewall-cmd --reload
    
  6. 验证
    访问http://py.example.com

使用HTTPS访问动态网页

  1. 修改主配置文件

    vim  /etc/httpd/conf.d/httpd-vhosts.conf
    
    <VirtualHost 192.168.100.100:443>
        DocumentRoot "/var/www/wsgi"
        ServerName server.example.com
        SSLEngine on
        SSLCertificateFile /etc/httpd/ssl/httpd.crt
        SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
    </VirtualHost>
    
    systemctl restart httpd
    
  2. 验证
    访问https://py.example.com

Logo

更多推荐