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

如何使用Node.js将DER格式内容转换为PEM格式

Node.js DER转PEM实现方案

Node.js 内置的 crypto 模块原生支持该转换,不需要引入第三方依赖,以下是可直接落地的实现:

实现方式1:内置crypto模块(推荐)

该方案为官方标准实现,自动适配格式校验、加密内容处理等场景,容错性更高。

X509证书转换示例

const crypto = require('crypto');
const fs = require('fs');

// 读取DER格式证书二进制内容
const derCertBuffer = fs.readFileSync('./your-cert.der');
// 导入DER格式证书
const cert = crypto.createX509Certificate(derCertBuffer);
// 直接导出PEM格式
const pemCert = cert.toString();

fs.writeFileSync('./output-cert.pem', pemCert);

公钥转换示例

const crypto = require('crypto');
const fs = require('fs');

const derPubKeyBuffer = fs.readFileSync('./your-pubkey.der');
const publicKey = crypto.createPublicKey({
  key: derPubKeyBuffer,
  format: 'der',
  // 公钥常用格式为spki,若为pkcs1格式可修改为pkcs1
  type: 'spki'
});
const pemPubKey = publicKey.export({
  format: 'pem',
  type: 'spki'
});

fs.writeFileSync('./output-pubkey.pem', pemPubKey);

私钥转换示例

const crypto = require('crypto');
const fs = require('fs');

const derPrivKeyBuffer = fs.readFileSync('./your-privkey.der');
const privateKey = crypto.createPrivateKey({
  key: derPrivKeyBuffer,
  format: 'der',
  // 私钥常用格式为pkcs8,若为pkcs1格式可修改为pkcs1
  type: 'pkcs8',
  // 若私钥有加密,可补充passphrase字段
  // passphrase: 'your-password'
});
const pemPrivKey = privateKey.export({
  format: 'pem',
  type: 'pkcs8'
});

fs.writeFileSync('./output-privkey.pem', pemPrivKey);

实现方式2:手动编码实现

PEM格式本质是DER二进制内容做Base64编码后,每64个字符换行,再加上对应类型的头尾标记。如果你需要自定义处理逻辑可以用该方案:

const fs = require('fs');

/**
 * DER转PEM工具方法
 * @param {Buffer} derBuffer DER格式二进制内容
 * @param {string} label PEM标记类型,可选值:CERTIFICATE / PUBLIC KEY / RSA PRIVATE KEY 等
 * @returns {string} PEM格式内容
 */
function derToPem(derBuffer, label) {
  const base64Str = derBuffer.toString('base64');
  // 每64字符插入换行
  const formattedBase64 = base64Str.match(/.{1,64}/g).join('\n');
  return `-----BEGIN ${label}-----\n${formattedBase64}\n-----END ${label}-----\n`;
}

// 调用示例
const derBuffer = fs.readFileSync('./your-cert.der');
const pemContent = derToPem(derBuffer, 'CERTIFICATE');
fs.writeFileSync('./output.pem', pemContent);

注意事项

  • 手动实现时label参数必须和内容类型完全匹配,否则生成的PEM文件无法被正常识别
  • 若处理加密的DER私钥,手动实现需要额外处理解密逻辑,优先使用crypto内置方案
  • 所有输入的DER内容必须是Buffer类型的二进制数据,不要传入已经Base64编码的DER字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:03