Debian OpenSSL CA 证书配置参考:根证书、服务证书与验证

发布时间:2026/8/11 17:27:26
Debian OpenSSL CA 证书配置参考:根证书、服务证书与验证 Debian OpenSSL CA 证书配置参考根证书、服务证书与验证1. 服务介绍OpenSSL CA 用于在内网签发和管理数字证书。搭建 CA 后可以为 Apache、Nginx、LDAP、邮件、VPN 等 TLS 服务签发证书客户端导入 CA 根证书后就能验证服务端证书是否由受信任机构签发。本文提供一套 Debian 环境下的 CA 快速配置参考覆盖 OpenSSL 安装、CA 目录初始化、根密钥和根证书生成、服务端私钥与 CSR 生成、服务证书签发以及证书验证。2. 准备运行环境• 操作系统Debian 系 Linux使用apt安装软件包。• 操作账号root或具备sudo权限的管理员账号。• 软件包openssl、ca-certificates。• 网络条件CA 服务器、服务端和客户端之间网络可达DNS 与网关配置正确。• 时间条件所有主机使用正确系统时间建议启用 NTP证书校验依赖时间。• 实验目录本文使用/CA保存 CA 数据使用/tmp/ca-lab保存服务端申请文件。先检查系统和 OpenSSL 版本cat /etc/os-release apt-get update apt-get install -y openssl ca-certificates openssl version3. 相关知识• **根证书与服务证书**根证书是客户端信任的起点服务端使用由 CA 签发的服务证书两者不能混淆。• **私钥与 CSR**私钥只留在生成它的主机CSR 可以发送给 CACSR 本身不包含私钥。• **证书主题**CN是常见名称但现代客户端优先校验 SAN域名或 IP 发生变化时应重新申请包含正确 SAN 的证书。• **证书有效期**证书过期、尚未生效或系统时间错误都会导致 TLS 验证失败。• **CA 配置文件**修改配置前先备份重点检查 CA 数据目录、索引文件、序列号文件、根证书和私钥路径。• **权限控制**CA 私钥和服务端私钥应设置为仅管理员可读不要把私钥放进公开仓库或上传到不可信平台。• **证书链**服务端启用中间 CA 时需要按服务要求配置完整证书链客户端只信任根证书时服务端应正确发送中间证书。4. 实验步骤4.1 安装 OpenSSL安装证书工具并确认命令可用apt-get update apt-get install -y openssl ca-certificates openssl version -a确认安装结果dpkg -l openssl ca-certificates command -v openssl4.2 准备 OpenSSL 配置复制配置文件避免直接破坏系统默认配置cp -a /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.bak cp -a /etc/ssl/openssl.cnf /CA-openssl.cnf vim /CA-openssl.cnf配置 CA 目录和数据库路径。实际配置中应保证目录、索引文件和序列号文件已经存在[ CA_default ] dir /CA database $dir/index.txt new_certs_dir $dir/newcerts certificate $dir/cacert.pem serial $dir/serial private_key $dir/private/cakey.pem4.3 初始化 CA 目录创建证书、吊销列表、私钥和数据库目录mkdir -p /CA/{certs,crl,newcerts,private,csr} touch /CA/index.txt echo 01 /CA/serial echo 01 /CA/crlnumber chmod 700 /CA/private检查目录和初始化文件cd /CA find . -maxdepth 2 -type f -o -type d ls -l index.txt serial crlnumber4.4 生成 CA 根密钥和根证书进入 CA 目录生成 CA 私钥并限制权限cd /CA openssl genrsa -out private/cakey.pem 2048 chmod 600 private/cakey.pem使用 CA 私钥生成自签名根证书。实验环境可以使用十年有效期生产环境应按安全策略设置openssl req -new -x509 \ -key private/cakey.pem \ -out cacert.pem \ -days 3650 -sha256 \ -config /CA-openssl.cnf查看根证书主题和有效期openssl x509 -in /CA/cacert.pem -noout -text openssl x509 -in /CA/cacert.pem -noout -subject -issuer -dates4.5 服务端生成私钥和证书申请服务端创建申请目录并生成私钥mkdir -p /tmp/ca-lab cd /tmp/ca-lab openssl genrsa -out server.key 2048 chmod 600 server.key生成证书签名请求。交互式输入时服务名称应与实际访问名称一致openssl req -new \ -key server.key \ -out server.csr \ -config /CA-openssl.cnf在 CA 服务器上签发服务证书openssl x509 -req \ -in /tmp/ca-lab/server.csr \ -CA /CA/cacert.pem \ -CAkey /CA/private/cakey.pem \ -CAcreateserial \ -out /tmp/ca-lab/server.crt \ -days 365 -sha256证书签发完成后只把服务证书和 CA 根证书部署到需要使用它们的位置服务端私钥继续留在服务端ls -l /tmp/ca-lab/server.key /tmp/ca-lab/server.csr /tmp/ca-lab/server.crt cp /tmp/ca-lab/server.crt /etc/ssl/certs/server.crt cp /CA/cacert.pem /etc/ssl/certs/lab-ca.crt5. 验证结果检查 CA 根证书和服务端证书openssl x509 -in /CA/cacert.pem -noout -subject -issuer -dates openssl x509 -in /tmp/ca-lab/server.crt -noout -subject -issuer -dates openssl verify -CAfile /CA/cacert.pem /tmp/ca-lab/server.crt如果命令返回OK说明服务端证书由指定 CA 签发且证书链可以验证。TLS 服务已经监听时从客户端检查实际返回证书openssl s_client -connect 127.0.0.1:443 \ -servername server.example.com \ -CAfile /etc/ssl/certs/ca-certificates.crt \ /dev/null重点检查• 证书subject和 SAN 与实际访问域名或 IP 一致。•issuer指向预期 CA。•Not Before、Not After覆盖当前系统时间。• 客户端信任库包含 CA 根证书。• TLS 客户端验证结果为Verify return code: 0 (ok)。6. 常见问题• **客户端不信任**把 CA 根证书导入客户端信任库再执行系统证书更新命令。• **域名不匹配**检查 SAN不要只依赖 CN访问名称变化时重新生成 CSR 和服务证书。• **证书过期或尚未生效**检查服务端、客户端时间和证书有效期。• **CA 签发失败**检查 CA 配置中的目录、索引、序列号和私钥路径不要随意删除数据库文件。• **私钥泄露**立即停止继续使用受影响 CA 或服务证书按组织证书应急流程重新生成密钥和证书。