当前位置: 首页 > 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.dtcms.com/a/328859.html

相关文章:

  • OpenBMC中观察者模式架构与实现全解析
  • http与https协议区别;vue3本地连接https地址接口报500
  • 解惑rust中的 Send/Sync(译)
  • 什么是费曼学习法?
  • 机器学习-Cluster
  • Jenkins一直无法启动,怎么办?
  • C# winform 调用 OPC UA C# WinForm 的批量订阅方法
  • Java19 Integer 位操作精解:compress与expand《Hacker‘s Delight》(第二版,7.4节)
  • 向长波红外成像图注入非均匀噪声
  • 【嵌入式电机控制#31】FOC:霍尔安装误差的补偿
  • Unity:GUI笔记(二)——工具栏和选择网格、滚动列表和分组、窗口、自定义皮肤样式、自动布局
  • Linux系统有何特点?linux系统组成如何?
  • NTUSER.DAT是什么文件
  • 华为云之Redis部署及基础语法
  • 遨游通讯推出两款三防平板,满足“危急特”场景定制化需求
  • 《AVL树的原理与C++实现:详解平衡二叉搜索树的高效构建与操作》
  • ACL 可以限制哪些流量?入方向和出方向怎么判断?
  • 高级IO(五种IO模型介绍)
  • wordpress不同页面调用不同keywords和description
  • STM32CubeMX + HAL 库:用FSMC接口与IS62WV51216芯片实现stm32外部SRAM扩展
  • csp知识基础——贪心算法
  • Java协程深度教程:从概念到Spring Boot实战
  • XCZU6CG-2FFVC900I Xilinx FPGA AMD ZynqUltraScale+ MPSoC
  • 【计算机网络】王道考研笔记整理(4)网络层
  • 【C++】哈希的应用:位图和布隆过滤器
  • VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序
  • Java Record 类 — 简化不可变对象的写法
  • MATLAB 绘图速查笔记
  • 模式设计:策略模式及其应用场景
  • Vue3 中 <script setup> 场景下,需要手动导入和不需要手动导入的内容整理