openEluer下CA根证书服务器部署与web服务器证书申请

本文提供基于openEuler操作系统和openssl工具的完整配置方案,涵盖CA根证书服务器的部署、web服务器的证书申请/签发/安装全流程,确保证书信任链完整、配置可落地。

环境说明

CA根证书服务器:IP:192.168.0.10,主机名ca-server,操作系统openEuler 22.03 LTS

Web服务器:IP:192.168.0.20,主机名web-server,操作系统openEuler 22.03 LTS

平台支持:天枢一体化虚拟仿真平台

一、前置准备(两台服务器均需执行)

完成系统基础配置,安装必要依赖,确保两台服务器网络互通(可ping通、开放22端口用于文件传输)。

  • 更新系统包(推荐执行,保证系统组件最新):

|---------------|
| dnf update -y |

  • 安装vim工具:

|-------------------------|
| sduo yum isntall vim -y |

  • 安装openssl工具(CA服务器核心依赖,web服务器需用于生成证书请求):

|--------------------------------------|
| dnf install -y openssl openssl-devel |

  • 验证openssl安装成功:

|------------------------------------------------------------|
| openssl version # 输出类似 OpenSSL 1.1.1k FIPS 25 Mar 2021 即正常 |

我们先在平台中将前置准备在一台服务器中升级好后,通过克隆完成安装,然后设置服务器名称及IP。

二、CA根证书服务器部署(仅在CA服务器 192.168.0.10 执行)

CA根证书服务器的核心是构建信任基础,需完成目录结构创建、配置文件调整、根私钥与自签名根证书生成。

1 创建CA标准目录结构

采用openEuler推荐的/etc/pki/CA目录作为CA根目录,用于分类存放私钥、证书、吊销列表等关键文件,严格控制权限防止私钥泄露。

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 创建核心目录(私钥、已签发证书、吊销列表、新证书临时目录) mkdir -p /etc/pki/CA/{private,certs,crl,newcerts} # 创建CA必需的索引文件(记录证书签发/吊销状态)和序列号文件(控制证书编号) touch /etc/pki/CA/index.txt echo 01 > /etc/pki/CA/serial # 初始序列号从01开始 # 配置权限:private目录仅root可访问(关键!防止私钥泄露) chmod 700 /etc/pki/CA/private chown -R root:root /etc/pki/CA |

2 配置openssl.cnf核心文件

/etc/pki/tls/openssl.cnf是openssl的默认配置文件,需调整[CA_default]段参数,适配CA根服务器的工作需求。

  • 备份原配置文件(避免修改错误无法恢复):

|----------------------------------------------------------|
| cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.bak |

  • 编辑配置文件,修改[CA_default]段:

|------------------------------|
| vim /etc/pki/tls/openssl.cnf |

  • 将[CA_default]段替换为以下内容(其余段保持默认):

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [ CA_default ] dir = /etc/pki/CA # CA根目录(与前文创建的目录一致) certs = dir/certs # 已签发证书存放路径 crl_dir = dir/crl # 证书吊销列表存放路径 database = dir/index.txt # 证书索引文件(自动记录证书信息) new_certs_dir = dir/newcerts # 新签发证书的临时存放目录 certificate = dir/cacert.pem # CA根证书路径(后续生成) serial = dir/serial # 证书序列号文件(前文创建) crlnumber = dir/crlnumber # 吊销列表序列号文件(自动生成) crl = dir/crl.pem # 吊销列表文件路径 private_key = dir/private/cakey.pem# CA根私钥路径(后续生成) RANDFILE = dir/private/.rand # 随机数文件(增强加密安全性) x509_extensions = usr_cert # 默认证书扩展 name_opt = ca_default # 证书名称显示选项 cert_opt = ca_default # 证书信息显示选项 default_days = 365 # 证书默认有效期(1年,根证书建议长期有效) default_crl_days= 30 # 吊销列表有效期(30天,需定期更新) default_md = sha256 # 加密算法(SHA-256,安全性更高) preserve = no # 不保留证书请求文件 policy = policy_match # 证书信息匹配策略(需与请求文件一致) |

3 生成CA根私钥与自签名根证书

根私钥是CA服务器的核心机密,自签名根证书是所有下级证书的信任源头,生成过程需严格保密。

  • 生成CA根私钥(2048位RSA密钥,AES256加密保护):

|----------------------------------------------------------------|
| openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048 |

执行后需输入密码(示例:123123),并记住该密码(后续签发证书需验证),参数说明:

  • genrsa:生成RSA私钥
  • -aes256:用AES256算法加密私钥(防止私钥文件被盗用)
  • -out:指定私钥输出路径(严格放在private目录)
  • 2048:密钥长度(2048位满足主流安全需求,4096位更安全但性能略差)
  • 生成自签名根证书(基于根私钥,有效期1年):

|-------------------------------------------------------------------------------------------------|
| openssl req -new -x509 -days 365 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem |

  • 执行步骤:第一步输入刚才设置的根私钥密码;第二步填写CA证书信息(示例如下,根据实际需求修改,Common Name建议为CA服务器域名/IP):

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text Country Name (2 letter code) [XX]:CN # 国家代码(中国填CN) State or Province Name (full name) []:cq # 省份 Locality Name (eg, city) [Default City]:cq # 城市 Organization Name (eg, company) [Default Company Ltd]:lj # 组织/公司名称 Organizational Unit Name (eg, section) []:ljsec # 部门(建议安全部门) Common Name (eg, your name or your server's hostname) []:192.168.0.10 # 核心:CA服务器标识(域名/IP) Email Address []:cqaway@163.com # 管理员邮箱 |

参数说明:

  • req:处理证书请求相关操作
  • -new:生成新的证书请求
  • -x509:生成自签名证书(根证书专用,无需其他机构签发)
  • -days:证书有效期(与配置文件一致,1年)
  • -key:指定用于签名的根私钥
  • -out:指定根证书输出路径
  • 验证CA根证书生成成功:

|--------------------------------------------------------------------|
| openssl x509 -in /etc/pki/CA/cacert.pem -noout -text # 输出证书详细信息即正常 |

三、web服务器证书申请与签发(web服务器 192.168.0.20 + CA服务器协同)

web服务器需先生成自身私钥和证书请求文件(CSR),将CSR提交给CA服务器签发,最终获取有效证书并部署到web服务。

1 web服务器生成私钥与证书请求(CSR)

操作均在web服务器(192.168.0.20)执行,私钥需妥善保管,CSR用于向CA申请证书(不含私钥,可公开传输)。

  • 创建证书存放目录(统一管理web服务器证书文件):

|--------------------------------------------------------------------|
| mkdir -p /etc/nginx/cert chmod 700 /etc/nginx/cert # 限制权限,仅root可访问 |

  • 生成web服务器私钥(2048位RSA,无需加密保护(web服务启动无需手动输密码),若需加密可添加-aes256):

|---------------------------------------------------------|
| openssl genrsa -out /etc/nginx/cert/web-server.key 2048 |

  • 生成证书请求文件(CSR):

|------------------------------------------------------------------------------------------|
| openssl req -new -key /etc/nginx/cert/web-server.key -out /etc/nginx/cert/web-server.csr |

  • 执行步骤:第一步直接回车(若私钥未加密);第二步填写CSR信息(Common Name必须为web服务器的域名/公网IP,其他信息可与CA证书一致或按需填写):

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:cq Locality Name (eg, city) [Default City]:cq Organization Name (eg, company) [Default Company Ltd]:lj Organizational Unit Name (eg, section) []:ljsec Common Name (eg, your name or your server's hostname) []:192.168.0.20 # 核心:web服务器访问地址(域名/IP) Email Address []:cqaway@163.com # 可选属性:直接回车跳过(无需填写) A challenge password []: An optional company name []: |

  • 验证CSR文件生成成功:

|-------------------------------------------------------------------------|
| openssl req -in /etc/nginx/cert/web-server.csr -noout -text # 输出请求信息即正常 |

  • 将CSR文件传输到CA服务器(使用scp,需CA服务器root密码):

|------------------------------------------------------------------------------------|
| scp /etc/nginx/cert/web-server.csr root@192.168.0.10:/tmp/ # 传输到CA服务器的/tmp目录(临时存放) |

2 CA服务器签发web服务器证书

  • 操作在CA服务器(192.168.0.10)执行,基于接收的CSR文件,用CA根私钥签名生成有效证书。

|--------------------------------------------------------------------------|
| openssl ca -in /tmp/web-server.csr -out /etc/pki/CA/certs/web-server.crt |

  • 执行步骤:第一步 输入CA根私钥密码;第二步两次输入y确认签发(分别确认"签名证书"和"提交到数据库")。

说明:签发后的证书存放在/etc/pki/CA/certs/web-server.crt,同时CA服务器的/etc/pki/CA/index.txt会自动记录该证书信息。

  • 验证签发的web证书有效性:

|--------------------------------------------------------------------------------|
| openssl verify -CAfile /etc/pki/CA/cacert.pem /etc/pki/CA/certs/web-server.crt |

输出/etc/pki/CA/certs/web-server.crt: OK即说明证书有效。

  • 将签发好的web证书传输回web服务器:

|------------------------------------------------------------------------------------------|
| scp /etc/pki/CA/certs/web-server.crt root@192.168.0.20:/etc/nginx/cert/ # 传输到web服务器的证书目录 |

3 web服务器部署证书(nginx示例)

操作在web服务器(192.168.0.20)执行,配置web服务使用签发的证书,启用HTTPS,在此之前,需安装nginx的服务部署

  • 安装nginx服务:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dnf install nginx -y # 验证安装是否成功(查看版本) nginx -v # 正常输出示例:nginx version: nginx/1.20.1 # 设置开机自启 systemctl enable nginx # 开放80(HTTP)和443(HTTPS)端口(永久生效) firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp # 重新加载防火墙规则 firewall-cmd --reload # 验证端口是否放行成功 f irewall-cmd --list-ports # 输出应包含80/tcp、443/tcp |

  • 编辑nginx配置文件(默认路径/etc/nginx/nginx.conf):

|------------------------------------|
| vim /etc/nginx/conf.d/default.conf |

  • 添加HTTPS服务配置(监听443端口):

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| server { listen 443 ssl; server_name 192.168.0.20; # 与证书的Common Name一致 # 证书配置 ssl_certificate /etc/nginx/cert/web-server.crt; # 签发的web证书 ssl_certificate_key /etc/nginx/cert/web-server.key; # web服务器私钥 ssl_protocols TLSv1.2 TLSv1.3; # 启用安全的TLS协议 ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件 # 网站根目录与默认页面(按需修改) root /usr/share/nginx/html; index index.html index.htm; location / { try_files uri uri/ /index.html; } } |

  • 验证nginx配置语法正确:

|---------------------------------------------|
| Bash nginx -t # 输出 "test is successful" 即正常 |

  • 重启nginx服务,使证书配置生效:

|------------------------------------------------------------------|
| Bash systemctl restart nginx systemctl enable nginx # 设为开机自启(可选) |

  • 验证HTTPS服务正常(本地测试或客户端访问):

|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| # 本地测试(web服务器执行) curl -v https://192.168.0.20 # 输出包含 "SSL connection using TLSv1.3" 且状态码200即正常 # 或在客户端浏览器访问 https://192.168.0.20,若未提示"不安全"即说明证书信任正常 |

拓扑中加入一台WINDOWS7

在证书管理里面可以看到证书的详细信息。

相关推荐
猫头虎3 天前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
飞翔沫沫情4 天前
OpenEuler 发行版 二进制部署docker
docker·openeuler·容器引擎
菠萝蚊鸭11 天前
openEuler-24.03 ARM64 源码编译 RedisInsight
openeuler·arm64·redisinsight
NotStrandedYet15 天前
CentOS停更后的新选择:图文详解安装6.x内核openEuler+GNOME图形桌面
linux·运维·信创·国产化·openeuler·国产操作系统
lightningyang21 天前
Hadoop 分布式集群配置(OpenEuler 1主2)
hadoop·openeuler·天枢一体化虚拟仿真靶场平台
一往无前fgs1 个月前
【国产信创】openEuler 22.03 安全加固:SSH 端口修改完整指南(含防火墙/SELinux 配置)
网络·安全·ssh·openeuler
IT运维爱好者1 个月前
【国产】华为欧拉操作系统openEuler-LTS-22.03安装Docker-Compose保姆级教程
docker·容器·openeuler·欧拉
人工智能训练1 个月前
openEuler系统中如何将docker安装在指定目录
运维·服务器·ubuntu·docker·容器·ai编程·openeuler
黛琳ghz1 个月前
机密计算与安全容器:openEuler安全生态深度测评
服务器·数据库·安全·计算机·操作系统·openeuler