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

Linux 服务部署:自签 CA 证书构建 HTTPS 及动态 Web 集成

Linux 服务部署:自签 CA 证书构建 HTTPS 及动态 Web 集成

一、HTTPS基础原理

HTTPS是HTTP协议基于SSL/TLS协议的加密版本,核心差异及握手过程如下:

  1. HTTP与HTTPS对比

    协议传输方式端口核心特点
    HTTP明文传输80无加密,安全性低
    HTTPS数据加密(SSL/TLS)443数据加密、身份验证,安全性高
  2. SSL/TLS握手过程(简化)

    • 客户端(Client)动作

      第一步ClientHello:发送支持的SSL/TLS版本、加密算法,生成随机数random_c(32字节)。

      第三步ClientKeyExchange:用服务器公钥加密预处理密钥pre_master,发送给服务器。

    • 服务器(Server)动作

      第二步ServerHello:确定版本和加密算法,生成随机数random_s(32字节);发送证书(含公钥)。

      第四步用私钥解密pre_master,结合random_c+random_s+pre_master生成会话密钥,用于后续数据加密传输。

在这里插入图片描述

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

二、CA(证书颁发机构)配置

CA是用于颁发和管理数字证书的机构,私有CA配置步骤如下:

1. 前提准备
  • 在DNS服务器的正向解析文件中添加CA域名解析(如ca.example.com对应IP 192.168.100.10):
    vim /var/named/example.com.zone
    # 添加以下内容
    ca      IN      A       192.168.100.10
    # 保存退出后重启DNS服务
    systemctl restart named
    
2. CA核心配置文件(/etc/pki/tls/openssl.cnf[CA_default] 段)

查看缺少那些文件没有

# 配置文件关键内容如下
dir             = /etc/pki/CA           # CA根目录
certs           = $dir/certs            # 已颁发证书存储目录
database        = $dir/index.txt        # 证书跟踪数据库
new_certs_dir   = $dir/newcerts         # 新证书临时目录
certificate     = $dir/cacert.pem       # CA根证书路径
serial          = $dir/serial           # 证书序列号文件
private_key     = $dir/private/cakey.pem # CA私钥路径(需保密)
RANDFILE        = $dir/private/.rand    # 指定随机数生成器的种子文件路径
3. 生成CA私钥和自签名证书
  1. 生成CA私钥(权限严格限制,umask 077确保仅root可读写):

    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem)
    
  2. 生成CA自签名证书-x509指定自签名格式):

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
    
    • openssl req`**:OpenSSL 中用于处理证书请求(CSR)的子命令。
    • -new:生成新的证书请求。
  • -x509:直接生成自签名证书(通常用于根 CA,因为根证书无需其他机构签名)。

    • -key:指定用于签名的私钥路径(这里是 CA 的私钥 cakey.pem)。
    • -out:指定输出的证书文件路径(生成的 CA 根证书 cacert.pem)。
    • -days 365:设置证书有效期为 365 天(1 年)。

    证书信息(DN 字段)填写详情

    证书需要包含标识身份的“可分辨名称(Distinguished Name, DN)”,以下是各字段的输入和含义:

    1. Country Name (2 letter code) [XX]:CN
      • 国家/地区代码(2 个字母),输入 CN 表示“中国”。
    2. State or Province Name (full name) []:HB
      • 省/州名称,输入 HB 通常代表“湖北省”。
    3. Locality Name (eg, city) [Default City]:WH
      • 城市名称,输入 WH 通常代表“武汉市”。
    4. Organization Name (eg, company) [Default Company Ltd]:LQ
      • 组织/公司名称,这里填写自定义名称 LQ
    5. Organizational Unit Name (eg, section) []:linux
      • 部门/单位名称,输入 linux 表示该 CA 属于 Linux 相关部门。
    6. Common Name (eg, your name or your server's hostname) []:ca.example.com
      • 通用名称(核心字段),通常是 CA 服务器的域名,这里设置为 ca.example.com(符合 CA 服务器的命名规范)。
    7. Email Address []:root@example.com
      • 联系邮箱,填写 root@example.com 作为证书管理员的联系方式。
  1. 创建CA必要文件
    touch /etc/pki/CA/index.txt  # 证书数据库
    echo 01 > /etc/pki/CA/serial  # 初始序列号(从01开始)
    

三、Web服务器证书申请与签名

Web服务器(如Apache)需向CA申请证书,步骤如下:

1. Web服务器生成私钥和CSR(证书签名请求)
  1. 创建存放证书的目录

    mkdir /etc/httpd/ssl  # Apache证书目录
    
  2. 生成Web服务器私钥

    (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key)
    
  3. 生成CSR文件(需与CA信息匹配,主机名填web.example.com):

    openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
    
    • DN字段示例:国家(CN)、省份(HB)、城市(WH)、组织(LQ)、部门(linux)、主机名(hrz2.example.com)、邮箱(root@example.com)。
2. CA签名Web证书
  1. Web服务器发送CSR给CA

    scp /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/  # 传输CSR
    
  2. 在主机CA上 对签署请求进行数字签名,并指明所生成的Web证书的存放路径

    openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/httpd.crt -days 365
    
3. Web服务器获取签名证书
scp root@ca.example.com:/etc/pki/CA/httpd.crt /etc/httpd/ssl/  # 下载签名后的证书

四、Apache部署HTTPS站点

通过mod_ssl模块配置Apache支持HTTPS:

1. 安装mod_ssl
yum -y install mod_ssl  # 安装SSL模块
2. 配置SSL证书路径

修改/etc/httpd/conf.d/ssl.conf,指定证书和私钥路径:

# 编辑配置文件
vim /etc/httpd/conf.d/ssl.conf
# 修改以下两行
SSLCertificateFile /etc/httpd/ssl/httpd.crt  # Web服务器证书
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key  # Web服务器私钥
3. 配置HTTPS虚拟主机

创建/etc/httpd/conf.d/httpd-vhosts.conf,添加虚拟主机配置:

# 编辑虚拟主机配置文件
vim /etc/httpd/conf.d/httpd-vhosts.conf
# 添加以下内容
<VirtualHost 192.168.100.20:443>DocumentRoot "/var/www/html/test"  # 网站根目录ServerName hrz2.example.com  # 绑定域名SSLEngine on  # 启用SSLSSLCertificateFile /etc/httpd/ssl/httpd.crt  # 证书路径SSLCertificateKeyFile /etc/httpd/ssl/httpd.key  # 私钥路径
</VirtualHost>
# 保存退出后重启Apache
systemctl restart httpd
4. 客户端信任CA根证书
  1. 下载CA根证书到客户端

    scp root@192.168.100.10:/etc/pki/CA/cacert.pem .  # 从CA服务器下载
    
  2. 导入浏览器(以火狐为例):
    设置 → 首选项 → 高级 → 证书 → 查看证书 → 导入 → 选择cacert.pem → 勾选“信任使用此CA标识的网站” → 确认。

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  3. 访问验证
    浏览器访问 https://hrz2.example.com,显示安全连接。

在这里插入图片描述

五、集成Python动态Web内容

通过mod_wsgi模块部署Python动态内容:

1. 安装依赖
yum -y install httpd mod_wsgi  # 安装Apache和WSGI模块
2. 部署动态内容
  1. 创建存放Python脚本的目录

    mkdir /var/www/wsgi  # 存放Python脚本
    # 将Python动态脚本(如webapp.py)上传至该目录
    
  2. 配置虚拟主机
    修改/etc/httpd/conf.d/httpd-vhosts.conf,添加HTTP虚拟主机(80端口):

    vim /etc/httpd/conf.d/httpd-vhosts.conf
    # 添加以下内容
    <VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/wsgi"WSGIScriptAlias  /  "/var/www/wsgi/webapp.py"  # 绑定Python脚本ServerName py.example.com  # 动态站点域名
    </VirtualHost>
    
3. DNS解析配置

在DNS服务器添加py.example.com解析:

vim /var/named/example.com.zone
# 添加以下内容
py      IN      A       192.168.100.20  # 解析到Web服务器IP
# 保存退出后重启DNS
systemctl restart named
4. 验证

浏览器访问 http://py.example.com,查看动态内容是否正常加载。

http://www.lryc.cn/news/620234.html

相关文章:

  • GO学习记录四——读取excel完成数据库建表
  • [AXI5]AXI协议中awsize和awlen在Vector Atomic地址膨胀中的作用
  • Vue3从入门到精通: 3.5 Vue3与TypeScript集成深度解析
  • FPGA的PS基础1
  • 力扣(O(1) 时间插入、删除和获取随机元素)
  • 热门手机机型重启速度对比
  • 以鼠标位置为中心进行滚动缩放
  • 力扣top100(day02-03)--链表03
  • 修复运动模糊的视频用什么软件?快速解决方案分享
  • ECCV-2018《Variational Wasserstein Clustering》
  • AI工程化闭环法(AIEC – AI Engineering Cycle) 适合TRAE CURSOR CLAUDE等工具
  • Transformer 之自注意力机制(一)
  • TF-IDF------词向量转化:从“文字”到“向量”
  • 可视化调试LangChain SQLChatMessageHistory:SQLite数据库查看全攻略
  • Java多线程进阶-从乐观锁到读写锁
  • 西门子TIA-SCL转STL指令项目案例及技巧
  • 【Python】Python 函数基本介绍(详细版)​
  • ARM 实操 流水灯 按键控制 day53
  • ACL 可以限制哪些流量?入方向和出方向怎么判断?
  • vue路由_router
  • rk3588 ubuntu20.04安装包经常出现的问题总结(chatgpt回复)
  • C++ 优选算法 力扣 209.长度最小的子数组 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • VUE基础笔记
  • 计算机网络---IPv6
  • 向长波红外成像图注入非均匀噪声
  • ROS2实用工具
  • 小电视视频内容获取GUI工具
  • Ansible 实操笔记:Playbook 与变量管理
  • 传输层协议 TCP(1)
  • C语言队列的实现