---
title: 证书颁发与部署
description: "技术教程 Ubuntu 24 + Apache + WordPress **PEM 格式 SSL 证书**部署指南 本文是将证书颁发机构（CA）管理控制台颁发的 PEM 格式 SSL 证书， 部署到 Ubuntu 24 + Apache + WordPress 环境中的通用教程。 Ubuntu 24 Apache WordPress PEM SSL ## 免责声明 本文是技术教程，介绍在 Ubuntu 24 + Apache + WordPress 环境中部署…"
url: "https://bestnetllc.co.jp/zh-hans/docs/%e8%af%81%e4%b9%a6%e9%a2%81%e5%8f%91%e4%b8%8e%e9%83%a8%e7%bd%b2/"
updated: "2026-06-08"
category: SSL 证书
---

# 证书颁发与部署

技术教程

Ubuntu 24 + Apache + WordPress
**PEM 格式 SSL 证书**部署指南

本文是将证书颁发机构（CA）管理控制台颁发的 PEM 格式 SSL 证书，
部署到 Ubuntu 24 + Apache + WordPress 环境中的通用教程。

Ubuntu 24
Apache
WordPress
PEM SSL

## 免责声明

本文是技术教程，介绍在 Ubuntu 24 + Apache + WordPress 环境中部署 SSL 证书（PEM 格式）的一般流程。

内容基于撰写时的最新信息，但根据具体环境、配置、证书类型、CA 规范、中间件版本等因素的不同，操作流程和配置方法可能有所差异。

## 概述

本文是将 **PEM 格式 SSL 证书**
（即 CA 管理控制台文本框中显示的类型）
部署到 **Ubuntu 24 + Apache + WordPress** 站点的通用教程。

无论证书是 EV / OV / DV 类型，**服务器部署的基本流程都是相同的**。

## 前提条件

- 操作系统：Ubuntu 24（拥有 root 或 sudo 权限）
- Web 服务：Apache（`apache2`）正在运行
- CMS：WordPress 正在 Apache 下运行
- 证书：**服务器证书**已由 CA 颁发
- 中间证书：CA 提供的**中间证书（CA Bundle）**已就绪
- 重要：持有生成 CSR 时创建的**私钥**（若丢失需重新颁发）

## CA 控制台显示的证书格式（示例）

在 CA 管理控制台中，可能会在文本框中显示以下代码块（PEM）。请**从头到尾完整复制该代码块**并保存到服务器上。

```text
-----BEGIN CERTIFICATE-----
(long string of alphanumeric characters)
-----END CERTIFICATE-----
```

**注意**

- 复制时请包含 `BEGIN/END` 行。
- 即使换行被破坏配置也能正常工作，但最安全的做法是**按显示内容原样粘贴**。
- **请勿粘贴私钥（BEGIN PRIVATE KEY）**。

## 整体部署流程

1. 将证书文件保存到指定位置
2. 准备中间证书（证书链）
3. 创建完整证书链 fullchain（服务器证书 + 中间证书）
4. 验证私钥与证书是否匹配
5. 配置 Apache HTTPS 虚拟主机（包括 80 → 443 重定向）
6. 重新加载 Apache，并处理 WordPress 的 URL / 混合内容问题
7. 验证运行情况（证书链、重定向、证书信息）

## 步骤 1放置证书文件（服务器证书）

以下是 Ubuntu 上常见的放置示例（请根据您的运维策略进行调整）。

### 保存位置（示例）

- 私钥（已有）：`/etc/ssl/private/example.com.key`
- 服务器证书：`/etc/ssl/certs/example.com.crt`
- 中间证书：`/etc/ssl/certs/intermediate-ca.pem`
- 完整证书链：`/etc/ssl/certs/example.com.fullchain.pem`

### 创建目录并设置权限

```bash
sudo mkdir -p /etc/ssl/private /etc/ssl/certs
sudo chmod 700 /etc/ssl/private
```

### 将 CA 控制台的证书（PEM）保存为文件

从 CA 控制台文本框中复制证书代码块，并保存到 `/etc/ssl/certs/example.com.crt`。

```bash
sudo nano /etc/ssl/certs/example.com.crt
sudo chmod 644 /etc/ssl/certs/example.com.crt
```

本地自动保存的示例：

```bash
sudo tee /etc/ssl/certs/example.com.crt >/dev/null <<'EOF'
-----BEGIN CERTIFICATE-----
(paste certificate content here)
-----END CERTIFICATE-----
EOF
sudo chmod 644 /etc/ssl/certs/example.com.crt
```

## 步骤 2准备中间证书（CA Bundle / Intermediate）

许多 CA 会提供与服务器证书**分开的中间证书（或 CA Bundle）**。若没有该证书，部分设备可能会显示“不受信任”的提示。

### 保存中间证书（示例）

将从 CA 获取的 PEM 格式中间证书（一个或多个）保存到以下位置：

```bash
sudo nano /etc/ssl/certs/intermediate-ca.pem
sudo chmod 644 /etc/ssl/certs/intermediate-ca.pem
```

### 存在多个中间证书时

如果 CA Bundle 中包含多个中间证书，请按照 CA 指定的顺序（通常朝向根证书的方向）将它们合并到同一个文件中。

## 步骤 3创建完整证书链 Fullchain（服务器证书 + 中间证书）

在 Apache 中，通常的做法是将 **fullchain**（服务器证书 + 中间证书）指定为证书文件。

```bash
sudo cat /etc/ssl/certs/example.com.crt 
  /etc/ssl/certs/intermediate-ca.pem 
  | sudo tee /etc/ssl/certs/example.com.fullchain.pem >/dev/null

sudo chmod 644 /etc/ssl/certs/example.com.fullchain.pem
```

## 步骤 4验证私钥与证书是否匹配（重要）

如果证书与私钥不匹配，即使完成 Apache 配置，HTTPS 也无法正常工作。请务必进行验证。

### 验证方法 A：RSA 密钥情形（比较 Modulus）

```bash
openssl x509 -noout -modulus -in /etc/ssl/certs/example.com.crt | openssl md5
openssl rsa  -noout -modulus -in /etc/ssl/private/example.com.key | openssl md5
```

若两个 MD5 值**相同**，则表示匹配。

### 验证方法 B：不依赖密钥类型（比较公钥 SHA256）

```bash
# Certificate → Public Key → SHA256
openssl x509 -in /etc/ssl/certs/example.com.crt -pubkey -noout 
  | openssl pkey -pubin -outform DER 
  | openssl sha256

# Private Key → Public Key → SHA256
openssl pkey -in /etc/ssl/private/example.com.key -pubout -outform DER 
  | openssl sha256
```

若两个 SHA256 值**相同**，则表示匹配。

### 若不匹配

- 很可能 CSR 是使用不同的私钥创建的。
- 若找不到正确的私钥，则必须在 CA 端**重新颁发（Reissue）**，并使用正确的密钥重新创建 CSR。

## 步骤 5在 Apache 中启用 HTTPS

### 启用所需模块

```bash
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl reload apache2
```

### 确认 443 端口正在被监听

通常 `/etc/apache2/ports.conf` 中会包含 `Listen 443`。请按需确认。

## 步骤 6Apache 虚拟主机配置（443 + 80→443 重定向）

此处以 `example.com` 为例，创建并部署站点配置文件。

### 创建站点配置文件（示例）

```bash
sudo nano /etc/apache2/sites-available/example.com.conf
```

### 配置示例（以 WordPress 为前提）

**※ 请将代码中的 `example.com` 和 `DocumentRoot` 替换为您的实际环境。**

```apache
<VirtualHost *:80>
    ServerName example.com

    # HTTP → HTTPS permanent redirect
    RewriteEngine On
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /var/www/example.com/public

    # For WordPress (.htaccess operation case)
    <Directory /var/www/example.com/public>
        AllowOverride All
        Require all granted
    </Directory>

    SSLEngine on

    # Specify fullchain (server certificate + intermediate)
    SSLCertificateFile      /etc/ssl/certs/example.com.fullchain.pem
    SSLCertificateKeyFile   /etc/ssl/private/example.com.key

    # Recommended: Enable as needed (prioritize operation verification first)
    # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    ErrorLog ${APACHE_LOG_DIR}/example.com-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-ssl-access.log combined
</VirtualHost>
</IfModule>
```

### 启用该站点

```bash
sudo a2ensite example.com.conf
```

### 配置测试 → 重新加载

```bash
sudo apache2ctl configtest
sudo systemctl reload apache2
```

要检查哪些虚拟主机已启用：

```bash
sudo apache2ctl -S
```

## 步骤 7将 WordPress 切换为 HTTPS

### 统一站点 URL 为 HTTPS

- WordPress 管理后台 → 设置 → 常规
- 将“WordPress 地址（URL）”和“站点地址（URL）”均设置为 `https://example.com`

### 混合内容应对

- 如果图片、CSS / JS 仍以 `http://` 形式保留，会导致锁形图标消失。
- 可通过数据库替换、主题设置、插件等方式统一为 `https://`（建议操作前先备份）。

## 步骤 8验证运行情况

### HTTPS 连接（curl）

```bash
curl -I https://example.com/
curl -I http://example.com/
```

预期结果：

- `https://example.com/` 返回 200 / 301 等正常响应
- `http://example.com/` 以 301 重定向到 https

### 证书链验证（openssl）

```bash
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts
```

### 浏览器验证

- 未出现证书错误
- 证书详情显示预期的颁发机构 / 有效期 / SAN 等信息

## 常见故障排查

### 证书明明正确却显示为“不受信任”

- 可能未提供中间证书（CA Bundle），或未包含在 fullchain 中。
- 请确认 `SSLCertificateFile` 指向的是 fullchain。

### Apache 启动 / 重新加载因 SSL 错误而失败

- 可能是私钥路径不正确、权限不当，或密钥与证书不匹配。
- 请重新执行“步骤 4”中的匹配验证。

### 发生重定向循环

- 可能是 WordPress 端（siteurl / home）与 Apache 端（80 → 443）设置相互矛盾。
- 若使用 Cloudflare 等 CDN / 反向代理，其 SSL 模式设置也可能产生影响。

## 回滚

- 建议在实施前备份 Apache 站点配置文件及证书相关文件。
- 若出现问题，请禁用相关站点并重新加载。

```bash
sudo a2dissite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```

## 运维注意事项（续期 / 重新颁发）

- 续期 / 重新颁发的基本流程：**创建新 CSR → 在 CA 端重新颁发 / 续期 → 替换 fullchain → 重新加载 Apache**
- 怀疑私钥泄露时：**吊销 → 使用新密钥创建 CSR → 重新颁发**
- 请勿修改证书文件，务必准确保存已颁发的资料（PEM）
