一、引言:为什么选择 XCA?
在之前的教程中,我们已经学会了用 OpenSSL 命令行来创建自签名证书。虽然强大,但命令繁多、参数复杂,特别是当需要配置 Subject Alternative Name(SAN,用于支持多域名/IP)时,很容易出错。
有没有更简单、更直观的方法?
答案是肯定的!XCA(X Certificate and Key management) 是一款开源、跨平台的图形化证书管理工具。它将复杂的 PKI(公钥基础设施)操作封装在直观的界面之下,让你像操作普通软件一样,轻松完成以下任务:
- 创建自己的私有 CA(证书颁发机构)
- 签发服务器证书、客户端证书
- 管理密钥、证书请求(CSR)
- 转换各种证书格式(PEM, DER, PFX等)
本文将带你从零开始,使用 XCA 为 Nginx 生成一套被浏览器完全信任的 HTTPS 证书。
💡 核心价值 :
掌握 XCA,从此告别 OpenSSL 命令行的"天书",高效、准确地管理你的内网安全证书!
二、准备工作:下载与安装 XCA
1. 下载 XCA
- 官方网站 : https://hohnstaedt.de/xca/
- GitHub 仓库 : https://github.com/chris2511/xca
根据你的操作系统(Windows, macOS, Linux)下载对应的安装包。
2. 安装 XCA
安装过程非常简单,像安装普通软件一样,一路"下一步"即可。
3. 创建新数据库
首次启动 XCA,它会提示你创建一个新的数据库文件(例如 my-pki.xdb)。这个文件将保存你所有的密钥、证书和 CA 信息。请务必妥善保管此文件!
三、实战:使用 XCA 创建私有 CA 和服务器证书
第一步:创建根 CA 证书
根 CA 是你整个私有 PKI 体系的信任锚点。
- 切换到"证书颁发机构"标签页 ,点击左上角的 "新建" 按钮。
- 创建私钥 :
- 在弹出的窗口中,首先会要求你创建一个私钥。
- 点击 "生成新的密钥"。
- 选择算法(推荐
RSA),密钥长度(推荐4096位)。 - 输入一个描述性的名称,如
My Internal Root CA Key。 - 点击 "创建"。
- 填写 CA 信息 :
- 回到 CA 创建窗口,填写证书的主题信息:
- 国家 (C):
CN - 州/省 (ST):
Beijing - 城市 (L):
Beijing - 组织 (O):
MyCompany - 通用名称 (CN):
My Internal Root CA(这是 CA 的名字)
- 国家 (C):
- 设置一个较长的有效期(如
3650天,即10年)。
- 回到 CA 创建窗口,填写证书的主题信息:
- 完成创建 :
- 确认无误后,点击 "确定"。XCA 会自动为你生成一个自签名的根 CA 证书。
第二步:创建服务器证书模板(可选但推荐)
为了方便后续签发,我们可以先创建一个模板。
- 切换到"模板"标签页 ,点击 "新建"。
- 填写模板名称,如
Nginx Server Template。 - 在 "扩展项" 中,找到 "主题备用名称 (Subject Alternative Name),在这里添加你需要的所有域名和 IP 地址:
DNS: your-domain.localDNS: www.your-domain.localIP: 192.168.1.100IP: 127.0.0.1
- 其他设置保持默认,点击 "确定" 保存模板。
第三步:签发 Nginx 服务器证书
现在,用我们刚创建的 CA 来签发服务器证书。
- 切换到"证书"标签页 ,点击 "新建"。
- 选择签发者 :
- 在 "使用以下项签署" 下拉菜单中,选择我们刚刚创建的
My Internal Root CA。
- 在 "使用以下项签署" 下拉菜单中,选择我们刚刚创建的
- 创建服务器私钥 :
- 点击 "生成新的密钥" ,为服务器创建一个新的私钥(例如
2048位 RSA)。
- 点击 "生成新的密钥" ,为服务器创建一个新的私钥(例如
- 填写服务器信息 :
- 通用名称 (CN): 填写你的主域名,如
your-domain.local。 - 如果你创建了模板,在 "模板" 下拉框中选择
Nginx Server Template,XCA 会自动填充 SAN 信息。
- 通用名称 (CN): 填写你的主域名,如
- 完成签发 :
- 点击 "确定",XCA 会立即使用你的私有 CA 为服务器签发一张证书。
四、导出证书并配置 Nginx
1. 导出证书和私钥
在 XCA 的 "证书" 标签页中,找到你刚创建的服务器证书。
- 导出证书 (
.crt):右键 -> "导出" -> "导出为 PEM (*.pem, *.crt)"。保存为server.crt。 - 导出私钥 (
.key):切换到 "私钥" 标签页,找到对应的服务器私钥,右键 -> "导出" -> "导出为 PEM (*.pem, *.key)"。注意不要勾选"加密私钥" ,否则 Nginx 启动时会要求输入密码。保存为server.key。
2. 配置 Nginx
将 server.crt 和 server.key 复制到你的服务器(例如 /etc/nginx/ssl/ 目录)。
编辑 Nginx 配置文件:
server {
listen 443 ssl http2;
server_name your-domain.local;
# 指向 XCA 导出的文件
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name your-domain.local;
return 301 https://$host$request_uri;
}
重载 Nginx 配置:
bash
sudo nginx -t && sudo systemctl reload nginx
五、建立信任:安装根证书
为了让浏览器信任你的网站,你需要将 根 CA 证书 (ca.crt) 安装到客户端。
- 导出根 CA 证书 :在 XCA 的 "证书颁发机构" 标签页,右键你的 CA -> "导出" -> "导出为 PEM (*.pem, *.crt)"。保存为
ca.crt。 - 安装到操作系统 (方法同前文):
- Windows : 双击
ca.crt-> "安装证书" -> "本地计算机" -> "受信任的根证书颁发机构"。 - macOS : 双击
ca.crt-> 在"钥匙串访问"的"系统"中找到它 -> 双击 -> "始终信任"。 - Linux :
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
- Windows : 双击
安装完成后,刷新你的 Nginx 网站,浏览器地址栏将显示一个完美的灰色锁图标,没有任何警告!
六、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!