当前位置: 首页 > news >正文

HTTPS加密与私有CA配置全攻略

HTTPS 基础概念
HTTPS = HTTP + SSL/TLS
- HTTP:  明文传输,端口 80
- HTTPS: 数据加密传输,端口 443

TLS 握手流程
步骤客户端 (Client)服务端 (Server)
1Client Hello: 支持的 TLS 版本、加密算法列表、随机数 random_c (32字节)
2Server Hello: 确认 TLS 版本、加密算法、随机数 random_s (32字节) Server Certificate: 发送证书(含公钥)
3Client Key Exchange: 发送 pre_master(用公钥加密)
4用私钥解密 pre_master,生成会话密钥: Session Key = random_c + random_s + pre_master

关键点:会话密钥通过三方随机数生成,确保前向安全性。


CA 目录结构
#查看记录openssl信息
vim /etc/pki/tls/openssl.cnf
# 默认 CA 根目录
#键值对 key = value
dir = /etc/pki/CA
#调用值用$符号
# 子目录与文件	
$dir/certs          # 证书存放目录 → /etc/pki/CA/certs
database = $dir/index.txt  # 证书数据库 → /etc/pki/CA/index.txt

OpenSSL 命令选项
选项作用
-x509生成自签名证书(用于私有 CA)
-new生成证书签署请求(CSR)
-key指定私钥文件路径
-out指定输出文件路径
-days设置证书有效期(默认 365 天)

私有 CA 配置流程
1. DNS 准备(CA 服务器)
# 添加解析记录
vim /var/named/ydh.com
ca  IN  A  192.168.100.10
#重启服务
systemctl restart named
2. 生成 CA 密钥与自签名证书
# 生成 CA 私钥(权限 600)
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem)# 生成自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

填写信息
Country(国家)=CN, State(省份)=HB, City(城市)=WH, Org(公司)=LQ, OU(组织单元)=linux,
CN(主机名字)=ca.example.com, Email(邮箱)=root@example.com

3. 初始化 CA 环境
touch /etc/pki/CA/index.txt     # 证书数据库
echo 01 > /etc/pki/CA/serial    # 初始序列号,不能为空

Web 服务器证书申请
1. 在Web服务器生成 Web 私钥与 CSR
#查看DNS是否关联
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.100.10	#更改DNS,使其关联CA服务器#重启网卡服务
systemctl restart network#私钥放入/etc/httpd/ssl文件中
mkdir /etc/httpd/ssl
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key)# 生成证书签署请求 (CSR)
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365

填写信息:CN(主机名)=web.example.com(其他与 CA 一致)

2. Web服务器发送 CSR 到 CA 服务器
scp /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/
3. CA服务器签署证书
openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
4. Web服务器下载签名后的证书
scp root@ca.example.com:/etc/pki/CA/certs/httpd.crt /etc/httpd/ssl/

Apache HTTPS 配置
1. Web服务器安装模块与配置 SSL
yum -y install mod_ssl
vim /etc/httpd/conf.d/ssl.conf
#更改证书的路径,私钥路径
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
2.Web服务器配置 HTTPS 虚拟主机
vim /etc/httpd/conf.d/httpd-vhosts.conf
#添加
<VirtualHost 192.168.100.20:443>DocumentRoot "/var/www/html"ServerName web.example.comSSLEngine onSSLCertificateFile /etc/httpd/ssl/httpd.crtSSLCertificateKeyFile /etc/httpd/ssl/httpd.key
</VirtualHost>
3. 重启服务与防火墙
#关闭防火墙
systemctl stop firewall
systemctl disable firewall
#或
systemctl restart httpd
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

客户端信任 CA 根证书
  1. 客户端下载 CA 根证书:

    #更改DNS为192.168.100.10
    vim /etc/sysconfig/network-scripts/ifcfg-ens33scp root@ca.example.com:/etc/pki/CA/cacert.pem .
    
  2. 浏览器导入:

    • Firefox:设置 → 隐私与安全 → 证书 → 查看证书 → 导入
    • 勾选两个 信任此 CA 标识的网站
  3. 访问测试:
    https://web.example.com

    在这里插入图片描述


动态 Web 内容集成(Python WSGI)
1. 安装依赖
yum -y install httpd mod_wsgi
mkdir /var/www/wsgi
# 上传 Python 应用至 /var/www/wsgi
2. 配置虚拟主机
# 注释主配置中的 DocumentRoot
# vim /etc/httpd/conf/httpd.conf
# DocumentRoot "/var/www/html"#将python.text改名为webapp.py,并赋予权限
mv python.txt webapp.py
chmod +x test.py # 配置 WSGI 虚拟主机
vim /etc/httpd/conf.d/httpd-vhosts.conf
#访问python.txt
<VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/wsgi"WSGIScriptAlias / /var/www/wsgi/webapp.pyServerName py.example.com
</VirtualHost>

在这里插入图片描述

#访问html网页
<VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/wsgi"ServerName py.example.com
</VirtualHost>

在这里插入图片描述

3. DNS 解析与防火墙**
# DNS 服务器添加记录
vim /var/named/example.com.zone
py  IN  A  192.168.100.20
systemctl restart named# 防火墙放行 HTTP
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
4. 验证访问
systemctl restart httpd

访问:http://py.example.com


关键修正说明

  1. TLS 握手流程
    • 补充 Change Cipher SpecFinished 消息(实际通信需确认密钥切换)。
    • 明确会话密钥生成公式为伪代码(实际使用 PRF 函数)。
  2. 路径标准化
    • 统一使用 /etc/pki/CA 作为 CA 根目录。
    • 明确 index.txtserial 为 CA 数据库文件。
  3. 命令纠错
    • 修正 openssl ca 命令的输入文件路径 (/etc/pki/CA/httpd.csr)。
    • 添加 mod_ssl 安装步骤(原笔记遗漏)。
  4. 防火墙优化
    • 使用 --add-service=https 代替端口放行,提高可读性。
  5. 动态 Web 部分
    • 明确需注释主配置中的 DocumentRoot 避免冲突。
      作为 CA 根目录。
    • 明确 index.txtserial 为 CA 数据库文件。
  6. 命令纠错
    • 修正 openssl ca 命令的输入文件路径 (/etc/pki/CA/httpd.csr)。
    • 添加 mod_ssl 安装步骤(原笔记遗漏)。
  7. 防火墙优化
    • 使用 --add-service=https 代替端口放行,提高可读性。
  8. 动态 Web 部分
    • 明确需注释主配置中的 DocumentRoot 避免冲突。
    • 补充 WSGIScriptAlias 指向应用入口文件(如 webapp.py)。
http://www.lryc.cn/news/619131.html

相关文章:

  • spring-cloud整合nacos详细攻略
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 11-docker单机版的容器编排工具docker-compose基本使用
  • 数据分析专栏记录之 -基础数学与统计知识
  • Threejs 设置灯光照射点位置 辅助器不跟随移动
  • 大数据中的数据压缩原理
  • QT第五讲-控件QLineEdit、QSpinBox、QSlider、QScrollBar、QDial、QProgressBar、QLCDNumber
  • 计算机网络摘星题库800题笔记 第4章 网络层
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • VUE的8个生命周期
  • C++list(2)
  • 【JavaEE】多线程之线程安全(上)
  • 串口通信学习
  • 【PyTorch学习笔记 - 03】 Transforms
  • Spring-Cache 缓存数据
  • Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:UART Controller,通用异步收发传输器控制器
  • I2C 接收与发送数据的流程
  • 成都影像产业园实训考察:重庆五一职院关注技能就业
  • 【DL】深层神经网络
  • 《疯狂Java讲义(第3版)》学习笔记ch1
  • 力扣 hot100 Day71
  • 【1】Transformers快速入门:自然语言处理(NLP)是啥?
  • 机器学习第十课之TF-IDF算法(红楼梦文本分析)
  • LangChain SQLChatMessageHistory:SQL数据库存储聊天历史详解
  • 混合精度加快前向传播的速度
  • 计算机视觉(8)-纯视觉方案实现端到端轨迹规划(模型训练+代码)
  • MDD-Net:通过相互Transformer进行多模态抑郁症检测
  • 【沧海拾昧】使用LibUsbDotNet进行Windows/Ubuntu跨平台串口管理