第一步:创建用户组和设置目录结构

1. 创建 SSL 证书存储目录

sudo mkdir -p /etc/ssl/shared_certs/
sudo mkdir -p /etc/ssl/shared_certs/live/ # 存储当前证书
sudo mkdir -p /etc/ssl/shared_certs/archive/ # 可选:存储历史证书备份

2. 创建专门管理 SSL 证书的用户组

sudo groupadd ssl-users

3. 查看需要访问证书的用户(以常见Web服务为例)

假设你的系统有以下用户需要访问证书:

- nginx 或 apache 的运行用户(通常是 www-data, nginx, 或 apache)

- 其他需要访问证书的应用程序用户

4. 将相关用户添加到 ssl-users 组

例如,如果你的 Nginx 运行用户是 www-data

sudo usermod -aG ssl-users www-data

如果有其他用户也需要访问,如 app-user, deploy-user 等

sudo usermod -aG ssl-users app-user

sudo usermod -aG ssl-users deploy-user

第二步:设置目录权限

1. 设置目录所有者和权限

sudo chown root:ssl-users /etc/ssl/shared_certs/
sudo chown root:ssl-users /etc/ssl/shared_certs/live/

2. 设置目录权限:root可读写执行,组成员可读执行,其他人无权限

sudo chmod 750 /etc/ssl/shared_certs/
sudo chmod 750 /etc/ssl/shared_certs/live/

3. 确保新文件继承父目录的组设置

sudo chmod g+s /etc/ssl/shared_certs/live/

第三步:使用 acme.sh 申请和安装证书

1. 首先申请证书(假设域名是 example.com)

这里使用 DNS 验证方式(以 Cloudflare 为例),你可以选择适合你的验证方式

export CF_Key="your_cloudflare_api_key"
export CF_Email="your_email@example.com"

acme.sh --issue --dns dns_cf -d example.com -d "*.example.com" # 包含通配符证书

2. 安装证书到共享目录

acme.sh --install-cert -d example.com \
--cert-file /etc/ssl/shared_certs/live/example.com/cert.pem \
--key-file /etc/ssl/shared_certs/live/example.com/privkey.pem \
--fullchain-file /etc/ssl/shared_certs/live/example.com/fullchain.pem \
--reloadcmd "systemctl reload nginx" # 根据你的服务修改

注意:你可能需要先为每个域名创建子目录:

sudo mkdir -p /etc/ssl/shared_certs/live/example.com/
sudo chown root:ssl-users /etc/ssl/shared_certs/live/example.com/
sudo chmod 750 /etc/ssl/shared_certs/live/example.com/

第四步:设置证书文件权限

进入证书目录

cd /etc/ssl/shared_certs/live/example.com/

设置文件所有者为 root,所属组为 ssl-users

sudo chown root:ssl-users *.pem

设置权限:所有者可读写 (6),组成员可读 (4),其他人无权限 (0)

sudo chmod 640 *.pem

验证权限设置

ls -la

应该看到类似这样的输出:

-rw-r----- 1 root ssl-users 1234 cert.pem

-rw-r----- 1 root ssl-users 5678 privkey.pem

-rw-r----- 1 root ssl-users 9012 fullchain.pem

第五步:创建便捷的符号链接(可选但推荐)

为了让配置更灵活,可以创建标准化的符号链接:

在共享目录中创建标准化的证书文件名

cd /etc/ssl/shared_certs/live/example.com/
sudo ln -sf fullchain.pem cert.pem
sudo ln -sf privkey.pem key.pem

这样,服务配置可以直接引用:

ssl_certificate: /etc/ssl/shared_certs/live/example.com/cert.pem

ssl_certificate_key: /etc/ssl/shared_certs/live/example.com/key.pem

第六步:验证配置

1. 验证组成员权限

切换到某个 ssl-users 组成员(如 www-data)并尝试读取证书

sudo -u www-data cat /etc/ssl/shared_certs/live/example.com/fullchain.pem

如果没有权限错误,表示配置成功

2. 验证非组成员无法访问

创建一个非组成员用户

sudo useradd testuser

尝试读取证书

sudo -u testuser cat /etc/ssl/shared_certs/live/example.com/fullchain.pem

这应该会显示 "Permission denied"

3. 验证 acme.sh 的安装信息

acme.sh --info -d example.com

确认输出中显示了正确的安装路径

第七步:在 Web 服务器中配置使用

Nginx 配置示例:

server {

listen 443 ssl http2;
server_name example.com;

ssl_certificate /etc/ssl/shared_certs/live/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/shared_certs/live/example.com/privkey.pem;

# ... 其他配置 ...

}

Apache 配置示例:

ServerName example.com

SSLEngine on
SSLCertificateFile /etc/ssl/shared_certs/live/example.com/cert.pem
SSLCertificateKeyFile /etc/ssl/shared_certs/live/example.com/privkey.pem
SSLCertificateChainFile /etc/ssl/shared_certs/live/example.com/fullchain.pem

# ... 其他配置 ...

第八步:扩展到多个域名

对于多个域名,重复类似步骤即可:

1. 为第二个域名创建目录

sudo mkdir -p /etc/ssl/shared_certs/live/another-domain.com/
sudo chown root:ssl-users /etc/ssl/shared_certs/live/another-domain.com/
sudo chmod 750 /etc/ssl/shared_certs/live/another-domain.com/

2. 申请并安装第二个证书

acme.sh --issue -d another-domain.com --dns dns_cf
acme.sh --install-cert -d another-domain.com \
--cert-file /etc/ssl/shared_certs/live/another-domain.com/cert.pem \
--key-file /etc/ssl/shared_certs/live/another-domain.com/privkey.pem \
--fullchain-file /etc/ssl/shared_certs/live/another-domain.com/fullchain.pem \
--reloadcmd "systemctl reload nginx"

自动化脚本(可选)

创建安装脚本简化操作:

!/bin/bash

install_cert_shared.sh

DOMAIN=$1
CERT_DIR="/etc/ssl/shared_certs/live/$DOMAIN"

创建目录

sudo mkdir -p "$CERT_DIR"
sudo chown root:ssl-users "$CERT_DIR"
sudo chmod 750 "$CERT_DIR"

申请证书

acme.sh --issue -d "$DOMAIN" --dns dns_cf

安装证书

acme.sh --install-cert -d "$DOMAIN" \
--cert-file "$CERT_DIR/cert.pem" \
--key-file "$CERT_DIR/privkey.pem" \
--fullchain-file "$CERT_DIR/fullchain.pem" \
--reloadcmd "systemctl reload nginx"

设置文件权限

sudo chown root:ssl-users "$CERT_DIR"/*.pem
sudo chmod 640 "$CERT_DIR"/*.pem

权限问题排错

如果遇到权限问题,检查:

1. 检查目录和文件权限

ls -la /etc/ssl/shared_certs/
ls -la /etc/ssl/shared_certs/live/example.com/

2. 检查用户所属组

groups www-data

应该能看到 ssl-users

3. 检查 SELinux 或 AppArmor(如果启用)

SELinux

ls -Z /etc/ssl/shared_certs/

如果有问题,可以调整上下文

sudo chcon -R -t httpd_sys_content_t /etc/ssl/shared_certs/

4. 重新加载用户组(如果刚添加用户到组)

注意:用户需要重新登录才能使新的组生效

对于服务用户,可能需要重启服务

sudo systemctl restart nginx

这个方案B提供了细粒度的权限控制,只有
"ssl-users" 组的成员才能访问证书文件,既保证了安全,又实现了多用户共享。

最后修改:2026 年 03 月 03 日
如果觉得我的文章对你有用,请随意赞赏