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

调用tls.createSecureContext使用自签证书时遇PEM格式错误求助

解决Node.js加载带密码的自签证书时出现的ERR_OSSL_PEM_NO_START_LINE错误

问题根源

你用openssl生成的key.pem处于加密状态(生成时设置了密码foobar),但Node.js的tls.createSecureContext默认无法直接解析加密的私钥文件,因此抛出PEM格式解析错误。

解决方案

方案1:加载时直接指定密码

修改代码,在createSecureContext的配置参数中添加passphrase字段,对应生成证书时设置的密码:

var tls = require('tls');
var fs = require('fs');

const [key, cert] = [
    fs.readFileSync("key.pem"),
    fs.readFileSync("cert.pem"),
];

tls.createSecureContext({
    key, 
    cert,
    passphrase: 'foobar' // 新增密码配置
})

方案2:提前解密私钥文件

如果不想在代码中硬编码密码,可以先用openssl将加密的私钥转换为明文格式:

执行以下命令,输入密码foobar完成解密:

openssl rsa -in key.pem -out decrypted-key.pem

之后修改代码加载解密后的明文私钥:

var tls = require('tls');
var fs = require('fs');

const [key, cert] = [
    fs.readFileSync("decrypted-key.pem"), // 使用解密后的私钥文件
    fs.readFileSync("cert.pem"),
];

tls.createSecureContext({key, cert})

额外排查点

  • 检查证书和密钥文件的完整性:打开cert.pem确认包含-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----,打开key.pem确认包含-----BEGIN ENCRYPTED PRIVATE KEY-----(加密状态)或-----BEGIN RSA PRIVATE KEY-----(明文状态),确保文件没有损坏或内容缺失。
  • 不要使用unix2dos转换文件格式:PEM格式要求使用Unix风格的LF换行符,转换为CRLF格式反而可能触发解析错误,之前的尝试方向有误。

内容的提问来源于stack exchange,提问作者Kurt Peek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:35:17