关键是要将自签名证书导入操作系统或应用的信任库,而非仅配置Apache;现代浏览器强制校验SAN字段,需通过配置文件生成含DNS/IP的证书,并分别在Ubuntu/Debian、CentOS/RHEL等系统中执行cp+update-ca-certificates或update-ca-trust命令完成信任。

内网自建服务器用 Apache 配自签证书,要让浏览器或客户端“信任”它,关键不是只配好 Apache,而是让证书被系统或应用真正认可。单纯生成 server.crt + server.key 并配进 Apache,只能启用 HTTPS,但浏览器仍会报“您的连接不是私密连接”——因为证书没进信任链。
生成带 SAN 的证书(必须)
现代浏览器(Chrome、Edge、Firefox)已不再仅校验 Common Name(CN),而是强制要求 Subject Alternative Name(SAN)字段包含访问地址。如果你用 IP(如 192.168.1.100)或内网域名(如 dev.local)访问,CN 填对也不够,必须显式写入 SAN。
- 不要用
openssl req -new -x509简单命令,它默认不支持 SAN - 先创建配置文件
req.cnf(内容示例):
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = req_ext
prompt = no
[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = MyTeam
OU = Dev
CN = dev.local
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = dev.local
IP.1 = 192.168.1.100
- 再执行两步生成:
openssl genrsa -out server.key 2048
openssl req -new -x509 -nodes -days 3650 -key server.key -out server.crt -config req.cnf
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
把证书导入系统信任库(让浏览器认)
Apache 用证书加密通信,但浏览器是否显示锁形图标,取决于该证书是否在操作系统或浏览器的信任根证书列表里。内网自签证书需手动添加为受信任的根证书。
-
Ubuntu/Debian:
sudo cp server.crt /usr/local/share/ca-certificates/dev-local.crtsudo update-ca-certificates -
CentOS/RHEL:
sudo cp server.crt /etc/pki/ca-trust/source/anchors/dev-local.crtsudo update-ca-trust -
macOS:双击
server.crt→ 添加到“钥匙串访问”,右键证书 → “显示简介” → “信任” → 设为“始终信任” - Windows:双击证书 → “安装证书” → 本地计算机 → 受信任的根证书颁发机构
Apache 配置要点(不能只改一个地方)
证书路径、SSL 模块、虚拟主机三者必须协同生效。常见错误是只改了主配置,却忘了在 <VirtualHost *:443> 里重复声明。
- 确认 SSL 模块已加载:
Ubuntu/Debian:a2enmod ssl;CentOS:sudo yum install mod_ssl或检查LoadModule ssl_module modules/mod_ssl.so - 在站点配置中(如
/etc/apache2/sites-available/default-ssl.conf)明确指定:
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ServerName dev.local
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
- 重启服务:
sudo systemctl restart apache2(Ubuntu)或sudo systemctl restart httpd(CentOS)
让其他程序也信任(避免 x509 错误)
curl、wget、PHP cURL、Python requests、Java、Docker 等默认不读系统 CA 库,需额外处理:
-
curl/wget:加参数
--cacert /path/to/server.crt或设环境变量CURLOPT_CAINFO -
PHP:在
php.ini中设openssl.cafile=/etc/ssl/certs/ca-certificates.crt(确保你的证书已合并进该文件) -
Docker 客户端:把
server.crt放到/etc/docker/certs.d/192.168.1.100:443/ca.crt(目录名需匹配访问地址+端口) -
Java:用
keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias devlocal -file server.crt

















