Debian服务器上面配置Apache的ssl证书
1. 安装 Apache 和 SSL 模块:
1 2 3 4 |
apt update apt install apache2 openssl a2enmod ssl systemctl restart apache2 |
2. 创建证书存放目录:
1 2 |
mkdir -p /etc/apache2/ssl chmod 755 /etc/apache2/ssl |
场景 1:证书文件为 *.cn_chain.crt + *.cn_public.crt + *.key
步骤 1:合并证书文件
将服务器证书(public.crt)和中间证书(chain.crt)合并(也可以不合并 直接在SSLCertificateFile属性引入 public.crt ):
1 |
cat /path/to/*.cn_public.crt /path/to/*.cn_chain.crt > /etc/apache2/ssl/*.cn_fullchain.crt |
步骤 2:复制私钥和证书到安全目录
1 2 3 |
cp /path/to/*.cn.key /etc/apache2/ssl/ chmod 600 /etc/apache2/ssl/*.cn.key # 私钥权限 chmod 644 /etc/apache2/ssl/*.cn_fullchain.crt # 证书权限 |
步骤 3:配置 Apache SSL 虚拟主机
编辑配置文件(如 /etc/apache2/sites-available/ssl.conf):
1 2 3 4 5 6 7 8 9 10 11 12 |
<VirtualHost *:443> ServerName *.cn DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/apache2/ssl/*.cn_fullchain.crt SSLCertificateKeyFile /etc/apache2/ssl/*.cn.key # 其他配置(日志、目录权限等) ErrorLog ${APACHE_LOG_DIR}/ssl_error.log CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined </VirtualHost> |
场景 2:证书文件为 *_com.crt + *_com.ca-bundle + *_com.key
步骤 1:复制证书文件到目录
1 2 3 4 5 |
cp *_com.crt STAR_*_com.ca-bundle /etc/apache2/ssl/ cp *_com.key /etc/apache2/ssl/ chmod 600 /etc/apache2/ssl/*_com.key chmod 644 /etc/apache2/ssl/*_com.crt chmod 644 /etc/apache2/ssl/*_com.ca-bundle |
步骤 2:配置 Apache SSL 虚拟主机
编辑配置文件(如 /etc/apache2/sites-available/ssl.conf):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<VirtualHost *:443> ServerName lanzhouvw.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/apache2/ssl/*_com.crt SSLCertificateKeyFile /etc/apache2/ssl/*_com.key SSLCertificateChainFile /etc/apache2/ssl/*_com.ca-bundle # 其他配置(日志、目录权限等) ErrorLog ${APACHE_LOG_DIR}/ssl_error.log CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined </VirtualHost> |
场景 3:使用系统默认自签名证书(snakeoil)
Debian 预生成的 ssl-cert-snakeoil.pem(证书+链)和 ssl-cert-snakeoil.key(私钥)位于以下路径:
- 证书文件:/etc/ssl/certs/ssl-cert-snakeoil.pem
- 私钥文件:/etc/ssl/private/ssl-cert-snakeoil.key
配置步骤
1. 确认证书文件存在
检查默认证书是否已生成:
1 2 |
ls -l /etc/ssl/certs/ssl-cert-snakeoil.pem # 证书 ls -l /etc/ssl/private/ssl-cert-snakeoil.key # 私钥 |
- 如果文件不存在,安装 ssl-cert 包生成:
12apt install ssl-cert make-ssl-certgenerate-default-snakeoil --force-overwrite
2. 配置 Apache 使用默认证书
编辑 SSL 虚拟主机配置文件(如 /etc/apache2/sites-available/default-ssl.conf):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName localhost # 本地测试用,若需域名访问需替换 DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key # 其他配置(日志、目录权限等) ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> </IfModule> |
3. 启用 SSL 模块和站点
1 2 3 |
a2enmod ssl # 启用 SSL 模块 a2ensite default-ssl # 启用默认 SSL 站点 systemctl reload apache2 # 重新加载配置 |
通用后续步骤
1. 启用 SSL 站点并检查配置
1 2 3 |
a2ensite ssl.conf # 启用配置 apache2ctl configtest # 检查语法 systemctl reload apache2 # 重新加载 |
2. 强制 HTTPS 重定向(可选)
编辑 HTTP 虚拟主机(/etc/apache2/sites-available/000-default.conf):
1 2 3 4 |
<VirtualHost *:80> ServerName your_domain.com Redirect permanent / https://your_domain.com/ </VirtualHost> |
证书验证与测试
- SSLCertificateFile 和 SSLCertificateKeyFile 属性 是必须存在的, SSLCertificateChainFile属性是可选参数
- 检查证书链完整性:
123openssl verify -CAfile [证书链文件] [服务器证书文件]# 示例:openssl verify -CAfile /etc/apache2/ssl/*.cn_chain.crt /etc/apache2/ssl/*.cn_public.crt
3. 验证证书和私钥是否匹配
1 2 3 |
# 提取证书和私钥的 MD5 哈希值 sudo openssl x509 -noout -modulus -in /etc/apache2/cert/gzgyjcz.cn.crt | openssl md5 sudo openssl rsa -noout -modulus -in /etc/apache2/cert/gzgyjcz.cn.key | openssl md5 |
两次输出必须一致,否则证书和私钥不匹配,需重新签发证书。
故障排查表
现象 | 原因 | 解决方案 |
---|---|---|
AH02572: 无证书配置 | 证书路径错误或缺失 | 检查 SSLCertificateFile 路径 |
SSL_ERROR_SYSCALL | 私钥权限过宽 | chmod 600 私钥文件 |
浏览器提示证书链不完整 | 中间证书未正确配置 | 合并证书或指定 SSLCertificateChainFile |
AH02240: 无效证书 | 证书与私钥不匹配 | 重新生成或获取匹配的证书 |
按此教程操作,即可在 Debian 上为 Apache 正确配置两种类型的 SSL 证书。遇到具体错误时,可结合日志 (/var/log/apache2/error.log) 进一步排查。