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、443CA 与申请者之间使用安全传输方式不直接暴露私钥。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 和 Apacheapt 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 || true4.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 辅助脚本创建 CAcd /csk-rootca /usr/lib/ssl/misc/CA.pl -newca交互输入时设置Common NameCSK Global Root CA CountryCN StateChina LocalityBeiJing Organizationskills Organizational UnitOperations DepartmentsCA 会生成数据库、序列号、私钥和根证书。根证书只读分发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 申请主机生成私钥私钥不传给 CAinstall -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.cnf4.4 把 CSR 交给 CA 签名CA 与申请者同机时把 CSR 放到 CA 工作目录分离部署时只传 CSRscp /etc/apache2/ssl/www.chinaskills.cn.csr \ rootCA_HOST:/tmp/www.chinaskills.cn.csrCA 端签名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 rootAPACHE_HOST:/etc/apache2/ssl/根 CA 公钥分发给客户端install -m 0644 /csk-rootca/csk-ca.pem /safe/share/csk-ca.pem4.5 配置 Apache HTTPS 和 HTTP 重定向启用 SSL 模块和站点a2enmod ssl headers rewrite a2ensite default-ssl.conf创建站点配置/etc/apache2/sites-available/www.chinaskills.cn.confVirtualHost *: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 CSKs 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 /webdataWordPress 数据库密码只使用占位符实际密码通过安全凭据传递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 为实验 CASAN 包含访问域名验证结果为OK。5.2 Apache、HTTP 和 HTTPSapachectl 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 和 VPNcurl --cacert /csk-rootca/csk-ca.pem https://www.chinaskills.cn/ ldapsearch -x -H ldap://LDAP_HOST -b dcchinaskills,dccn (objectClass*) dn smbclient -L //STORAGE_HOST -U user01 systemctl is-active vsftpd systemctl is-active openvpn-serverserver 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 规则和地址池冲突。• **私钥泄露风险**立即停止继续分发撤销相关证书并重新签发私钥只保存在受限目录。