☰
Debian OpenSSL CA 根证书与 Apache HTTPS 配置
2026/10/1 15:16:23 网站建设 项目流程

Debian OpenSSL CA 根证书与 Apache HTTPS 配置

1. 服务介绍

本篇在 Debian 上创建实验 CA 根证书,使用 CA 为 Apache 网站签发服务器证书,再启用 HTTPS、HTTP 到 HTTPS 重定向和 WordPress/Web 站点。CA 负责签发与验证证书,Apache 负责提供 Web 服务,NFS/MariaDB 等后端按实际拓扑独立部署。

实验目标:

• CA 根证书保存到/csk-rootca/csk-ca.pem。

• 根 CA Subject 使用CSK Global Root CA,服务证书使用*.chinaskills.cn。

• Apache 使用 CA 签发的证书提供 443 HTTPS,并把 HTTP 请求重定向到 HTTPS。

• 客户端导入根 CA 后访问站点不出现信任警告。

• Apache 以受限用户运行,站点根目录使用/webdata,隐藏版本信息。

2. 准备运行环境

• 操作系统:Debian Linux,已安装 OpenSSL、Apache2;生产系统使用受支持版本。

• 权限:root 或 sudo 管理账号;CA 私钥只允许 root 读取。

• 域名:www.chinaskills.cn,服务证书 SAN 必须包含实际访问域名。

• 角色:CA 主机、Apache Web 主机、客户端;CA 与申请者可以是同一台,也可以分离。

• 证书目录:根 CA 公钥路径/csk-rootca/csk-ca.pem;私钥使用独立受限目录。

• 后端:若/webdata来自 StorageSrv NFS,先验证 NFS 挂载;WordPress 数据库可放在独立 MariaDB 主机。

• 网络:TCP 80、443;CA 与申请者之间使用安全传输方式,不直接暴露私钥。

3. 相关知识与注意点

• 根 CA 私钥是信任体系核心。丢失或泄露会影响所有已签发证书;生产环境使用离线根 CA、颁发 CA、加密备份和严格权限。

• 客户端需要信任根 CA 公钥;Apache 需要服务器证书和对应私钥。不要把 CA 私钥复制到 Web 服务器。

• Subject CN 不能替代 SAN。现代浏览器按 SAN 校验域名,证书必须包含www.chinaskills.cn或适用通配符。

•CA.pl依赖 OpenSSL 配置和工作目录;批量环境建议使用明确的 openssl.cnf 和独立 CA 数据目录,避免误用其他 CA 状态文件。

• 证书申请文件 CSR 可以跨主机传递,私钥不应离开申请主机;签名完成后只传回证书和必要的 CA 链。

• Apache TLS 配置修改后先apachectl configtest,再 reload;证书验证同时看 SAN、有效期、Issuer、私钥匹配和客户端信任。

• Apache 版本隐藏只能减少信息泄露,不能替代更新、最小权限、访问控制和安全响应头。

4. 实验步骤

4.1 安装 OpenSSL 和 Apache

apt update apt install -y openssl apache2 systemctl enable --now apache2 openssl version apachectl -v

如果需要重做实验 CA,先备份旧目录和 CA 数据库,再清理;不要在生产 CA 上直接执行删除命令:

mv /csk-rootca /csk-rootca.backup.$(date +%F-%H%M%S) 2>/dev/null || true

4.2 创建 CA 根证书

创建受限目录:

install -d -o root -g root -m 0700 /csk-rootca install -d -o root -g root -m 0700 /csk-rootca/private

使用 Debian OpenSSL 辅助脚本创建 CA:

cd /csk-rootca /usr/lib/ssl/misc/CA.pl -newca

交互输入时设置:

Common Name:CSK Global Root CA Country:CN State:China Locality:BeiJing Organization:skills Organizational Unit:Operations Departments

CA 会生成数据库、序列号、私钥和根证书。根证书只读分发:

install -m 0644 demoCA/cacert.pem /csk-rootca/csk-ca.pem chmod 0600 demoCA/private/cakey.pem openssl x509 -in /csk-rootca/csk-ca.pem -noout -subject -issuer -dates -fingerprint -sha256

原实验 CA 初始化截图:

4.3 生成服务器密钥和 CSR

在 Apache 申请主机生成私钥,私钥不传给 CA:

install -d -o root -g root -m 0750 /etc/apache2/ssl openssl genrsa -out /etc/apache2/ssl/www.chinaskills.cn.key 2048 chmod 0600 /etc/apache2/ssl/www.chinaskills.cn.key

创建包含 SAN 的 CSR 配置:

cat >/etc/apache2/ssl/www.chinaskills.cn.cnf <<'EOF' [req] distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [req_distinguished_name] C = CN ST = China L = BeiJing O = skills OU = Operations Departments CN = www.chinaskills.cn [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = www.chinaskills.cn DNS.2 = *.chinaskills.cn EOF openssl req -new \ -key /etc/apache2/ssl/www.chinaskills.cn.key \ -out /etc/apache2/ssl/www.chinaskills.cn.csr \ -config /etc/apache2/ssl/www.chinaskills.cn.cnf

4.4 把 CSR 交给 CA 签名

CA 与申请者同机时,把 CSR 放到 CA 工作目录;分离部署时只传 CSR:

scp /etc/apache2/ssl/www.chinaskills.cn.csr \ root@CA_HOST:/tmp/www.chinaskills.cn.csr

CA 端签名:

cd /csk-rootca cp /tmp/www.chinaskills.cn.csr newreq.pem /usr/lib/ssl/misc/CA.pl -sign

确认签发者、主题、SAN 和有效期:

openssl x509 -in newcert.pem -noout -subject -issuer -dates -ext subjectAltName install -m 0644 newcert.pem /tmp/www.chinaskills.cn.crt

把服务器证书传回 Apache 主机:

scp /tmp/www.chinaskills.cn.crt root@APACHE_HOST:/etc/apache2/ssl/

根 CA 公钥分发给客户端:

install -m 0644 /csk-rootca/csk-ca.pem /safe/share/csk-ca.pem

4.5 配置 Apache HTTPS 和 HTTP 重定向

启用 SSL 模块和站点:

a2enmod ssl headers rewrite a2ensite default-ssl.conf

创建站点配置/etc/apache2/sites-available/www.chinaskills.cn.conf:

<VirtualHost *:80> ServerName www.chinaskills.cn DocumentRoot /webdata Redirect permanent / https://www.chinaskills.cn/ </VirtualHost> <VirtualHost *:443> ServerName www.chinaskills.cn DocumentRoot /webdata SSLEngine on SSLCertificateFile /etc/apache2/ssl/www.chinaskills.cn.crt SSLCertificateKeyFile /etc/apache2/ssl/www.chinaskills.cn.key <Directory /webdata> Options -Indexes AllowOverride None Require all granted </Directory> ServerTokens Prod ServerSignature Off Header always set X-Content-Type-Options nosniff </VirtualHost>

启用站点并检查:

a2ensite www.chinaskills.cn.conf apachectl configtest systemctl reload apache2

原实验 Apache TLS 和 CA 信任截图:

4.6 配置网站目录和后端

创建站点目录:

install -d -o webuser -g www-data -m 0750 /webdata printf '%s\n' "This is the front page of CSK's website" >/webdata/index.html chown webuser:www-data /webdata/index.html chmod 0640 /webdata/index.html

如果/webdata来自 StorageSrv NFS,先确认挂载:

findmnt /webdata showmount -e STORAGE_HOST mount -t nfs STORAGE_HOST:/webdata /webdata

WordPress 数据库密码只使用占位符,实际密码通过安全凭据传递:

apt install -y wordpress php libapache2-mod-php php-mysql cp -R /usr/share/wordpress/* /webdata/ chown -R webuser:www-data /webdata/

编辑wp-config.php时使用独立数据库账号,不使用 MariaDB root 账号;站点目录和数据库权限分离。

5. 验证结果

5.1 CA 和服务器证书

openssl x509 -in /csk-rootca/csk-ca.pem -noout -subject -issuer -dates openssl x509 -in /etc/apache2/ssl/www.chinaskills.cn.crt -noout -subject -issuer -dates -ext subjectAltName openssl verify -CAfile /csk-rootca/csk-ca.pem /etc/apache2/ssl/www.chinaskills.cn.crt

预期:服务器证书 Issuer 为实验 CA,SAN 包含访问域名,验证结果为OK。

5.2 Apache、HTTP 和 HTTPS

apachectl configtest systemctl is-active apache2 ss -lntp | grep -E ':80|:443' curl -I http://www.chinaskills.cn/ curl --cacert /csk-rootca/csk-ca.pem -I https://www.chinaskills.cn/ openssl s_client -connect www.chinaskills.cn:443 \ -servername www.chinaskills.cn \ -CAfile /csk-rootca/csk-ca.pem </dev/null

预期:HTTP 返回 301/302 到 HTTPS;带 CA 文件访问 HTTPS 不出现信任错误;Apache 日志无持续 TLS 或权限错误。

5.3 网站、LDAP、Samba 和 VPN

curl --cacert /csk-rootca/csk-ca.pem https://www.chinaskills.cn/ ldapsearch -x -H ldap://LDAP_HOST -b 'dc=chinaskills,dc=cn' '(objectClass=*)' dn smbclient -L //STORAGE_HOST -U user01 systemctl is-active vsftpd systemctl is-active openvpn-server@server ip addr show tun0 ip route

客户端继续验证:HTTPS 证书链、LDAP 组认证、Samba 上传下载、FTP Chroot 和 OpenVPN 地址池。

6. 常见问题排查

• **证书验证失败**:检查 CA 文件、Issuer、SAN、有效期、私钥和客户端信任;不要把服务器证书当根 CA。

• **Apache 启动失败**:执行apachectl configtest,检查证书路径、私钥权限、站点语法和 443 端口冲突。

• **HTTP 不跳转 HTTPS**:确认 80 站点绑定、Redirect 指令和站点启用状态。

• **浏览器仍有警告**:确认客户端导入正确 CA、访问域名匹配 SAN、系统时间正确;不要用忽略证书错误代替修复。

• **NFS 网站目录不可访问**:检查挂载、NFS 服务器导出规则、UID/GID 和 Apache 用户权限。

• **LDAP 认证失败**:先用ldapsearch验证连接和 Base DN,再检查 Apache LDAP filter、账号密码和 TLS。

• **Samba 权限异常**:检查目录属主、SGID/sticky bit、smb.conf、Samba 用户数据库和客户端缓存凭据。

• **OpenVPN 连接后内网不通**:检查ip_forward、路由、NAT、FORWARD 规则和地址池冲突。

• **私钥泄露风险**:立即停止继续分发,撤销相关证书并重新签发;私钥只保存在受限目录。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询