CA+https+python动态网页
HTTPS站点搭建与CA机构配置指南 本文详细介绍了HTTPS与HTTP协议的区别,重点讲解了SSL/TLS加密原理及HTTPS连接建立过程。主要内容包括:CA机构的搭建步骤(生成私钥、自签名证书、证书请求与签名),Web服务器配置(安装mod_ssl模块、配置证书路径、部署HTTPS站点),以及客户端CA根证书导入方法。通过SCP命令实现CA服务器与Web服务器间证书文件的安全传输,最终完成一个
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
-
在主机CA上为主机CA生成私钥
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem)umask 077 //创建文件时,设置只有所有者具有读写权限 openssl genrsa //生成私钥 -out //设置私钥的存放路径 -
在主机CA上为主机CA生成自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365openssl 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证书
-
在主机CA上为CA提供所需的目录及文件
touch /etc/pki/CA/index.txt //生成数据库文件 echo 01 > /etc/pki/CA/serial //生成序列号文件 -
在主机WEB上为主机WEB生成私钥,并将私钥存放在/etc/httpd/ssl目录中
mkdir -p /etc/httpd/ssl (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key) -
在主机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 -
在主机web上将签署请求文件通过可靠方式发送给CA服务器。
scp /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/
-
在主机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文件才是已经签名后可用的文件 -
在主机WEB上将CA主机上已经数字签名后的Web证书下载下来
scp root@ca.example.com:/etc/pki/CA/certs/httpd.crt /etc/httpd/ssl/ -
在主机WEB上安装apche http扩展模块mod_ssl
yum -y install mod_ssl -
在主机WEB上修改主配置文件,使用刚刚下载的web证书
vim /etc/httpd/conf.d/ssl.conf //在ssl.conf配置文件内做以下修改 SSLCertificateFile /etc/httpd/ssl/httpd.crt //指定存放证书的位置 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key //指定私钥存放的位置
-
在主机WEB上的/var/www/html/目录内创建index.html文件
echo maoqi > index.html -
在主机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 -
设置防火墙
firewall-cmd --add-service=https --permanent firewall-cmd --reload -
在客户端上去下载CA服务器上的根证书
scp root@ca.example.com:/etc/pki/CA/cacert.pem /root -
打开火狐浏览器,导入证书
设置–首选项–高级–证书–查看证书–导入–找到根证书,然后双击–把“信任使用此CA标识的网站”勾上–确定–确定 -
访问https://web.example.com
集成动态web内容
在主机WEB上:
-
安装httpd mod_wsgi
yum -y install httpd mod_wsgi -
上传动态web内容–Python语言编写
mkdir /var/www/wsgi cd /var/www/wsgi //然后将Python编写的动态web内容上传到该目录下注意,转移的文件ch可能没有执行权限,所以需要赋予文件执行权限
chmod +x 【文件名】 -
部署虚拟主机
首先将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 -
在DNS服务器的正向解析数据库中写入py.example.com对应的解析内容
vim /var/named/example.com
py IN A 192.168.100.100systemctl restart named -
在web服务器上设置防火墙
firewall-cmd --add-service=http --permanent firewall-cmd --reload -
验证
访问http://py.example.com
使用HTTPS访问动态网页:
-
修改主配置文件
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 -
验证
访问https://py.example.com
更多推荐




所有评论(0)