如何使用node-forge将DER编码的证书正确保存到文件?
如何使用node-forge将DER编码的证书正确保存到文件?
我太懂你这种踩坑的憋屈感了!用node-forge生成PEM证书顺风顺水,结果转成DER保存后直接被OpenSSL判为“畸形”,确实让人摸不着头脑。
咱们先揪出问题根源:你保存DER文件的时候用了{encoding: 'utf-8'},这可是致命错误!DER是纯二进制格式的证书,根本不是文本,用UTF-8编码写入会把二进制字节当成文本字符来转码,直接破坏了原本的结构,难怪OpenSSL认不出来。
给你两个靠谱的解决办法,选哪个都行:
方法一:直接从证书对象生成并保存DER(更高效)
跳过PEM转码的步骤,直接从node-forge的证书对象生成DER格式,然后用二进制编码写入:
const cert = forge.pki.createCertificate(); // 这里是你的证书生成、签名逻辑... cert.sign(...); // 直接生成DER编码的二进制数据 const derCert = forge.asn1.toDer(forge.pki.certificateToAsn1(cert)).getBytes(); // 关键:用binary编码写入,不要用utf-8 fs.writeFileSync('cert_good.cer', derCert, { encoding: 'binary' });
方法二:从已有的PEM证书转DER保存
如果你已经有了PEM格式的证书,也可以这么转:
const pemCert = forge.pki.certificateToPem(cert); // 把PEM转成DER对象 const derBytes = forge.pki.pemToDer(pemCert); // 转成Buffer再写入(Node.js处理二进制文件的推荐方式) fs.writeFileSync('cert_good.cer', Buffer.from(derBytes.getBytes(), 'binary'));
用上面任意一种方法生成的DER证书,再跑openssl x509 -inform der -in cert_good.cer -text -noout,就能正常解析出证书的详细内容啦!
备注:内容来源于stack exchange,提问作者Gobbo
相关产品推荐
相关产品推荐

