You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker+Nginx部署SSL认证Angular应用遇权限及密钥格式错误

解决方案

一、解决权限拒绝加载密钥问题

方法1:调整本地密钥文件权限

Nginx官方镜像默认以nginx用户(UID/GID 101/101)运行,挂载的密钥文件需要让该用户拥有读取权限:

  • 修改文件权限:chmod 640 ./aims.key
  • 修改文件所属组为容器内nginx用户的GID:chgrp 101 ./aims.key
    完成后重新通过Docker Compose挂载,容器内的nginx用户即可正常读取密钥。

方法2:Docker Compose临时以root启动容器(仅调试用)

若不想调整本地文件权限,可在docker-compose.yml中指定容器以root用户运行:

services:
  nginx:
    image: nginx:alpine
    user: "root"
    volumes:
      - ./aims.key:/etc/ssl/private/aims.key
      - ./aims.crt:/etc/ssl/certs/aims.crt
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "443:443"

注意:此方式会让容器进程以root身份运行,存在安全风险,不建议长期使用。

方法3:通过Dockerfile调整容器内权限

编写自定义Dockerfile,在构建阶段直接调整密钥文件权限:

FROM nginx:alpine

# 复制证书、密钥和配置文件到容器
COPY aims.key /etc/ssl/private/aims.key
COPY aims.crt /etc/ssl/certs/aims.crt
COPY nginx.conf /etc/nginx/nginx.conf

# 调整密钥权限,确保nginx用户可读
RUN chmod 640 /etc/ssl/private/aims.key && \
    chown root:nginx /etc/ssl/private/aims.key

然后在docker-compose.yml中使用该自定义镜像:

services:
  nginx:
    build: .
    ports:
      - "443:443"

二、解决PEM格式错误问题

出现PEM_read_bio_PrivateKey()错误,核心是密钥生成或格式存在问题,按以下步骤排查:

  • 确保生成密钥时未设置密码:生成自签名证书必须加-nodes参数,避免密钥被加密。正确生成命令:
    openssl req -x509 -newkey rsa:4096 -keyout aims.key -out aims.crt -days 365 -nodes
    
  • 检查密钥文件完整性:打开aims.key,确认开头是-----BEGIN PRIVATE KEY-----或-----BEGIN RSA PRIVATE KEY-----,结尾是对应的-----END...-----,中间无乱码或缺失内容。
  • 若密钥带密码保护,移除密码后再使用:
    openssl rsa -in aims.key -out aims-no-pass.key
    
    之后用aims-no-pass.key替换原密钥文件即可。

内容的提问来源于stack exchange,提问作者Santiago Vallejo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:30:58