Node.js 将openssl证书加载到节点

Node.js 将openssl证书加载到节点,node.js,ssl,openssl,certificate,ssl-certificate,Node.js,Ssl,Openssl,Certificate,Ssl Certificate,当我试图读取我的自签名SSL证书时,Node一直给我这个错误 _tls_common.js:67 c.context.setCert(options.cert); ^ Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Error (native) at Object.createSecureContext (_tls_common.js:67:17) at Obj

当我试图读取我的自签名SSL证书时,Node一直给我这个错误

_tls_common.js:67
  c.context.setCert(options.cert);
            ^

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Object.createSecureContext (_tls_common.js:67:17)
    at Object.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.exports.connect (_tls_wrap.js:1017:46)
    at Socket.<anonymous> (/usr/blinkchannelserver/bundle/programs/server/npm/node_modules/pg/lib/connection.js:106:23)
    at Socket.g (events.js:260:16)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:153:18)
    at Socket.Readable.push (_stream_readable.js:111:10)
    at TCP.onread (net.js:540:20)
我使用服务器密钥将csr转换为使用服务器的证书nd密钥的证书

openssl x509 -req -in /tmp/postgresql.csr -CA server.cert -CAkey server.key -out /tmp/postgresql.cert -CAcreateserial
当我试图丢失postgresql.cert时,我得到了上面的错误

正在运行x509:

openssl x509 -inform PEM -in postgresql.cert
给我一个合理的输出:

-----BEGIN CERTIFICATE-----
MIIDHDCCAgQCCQC8AZE7dSSPZDANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJH
QjEPMA0GA1UEBwwGTG9uZG9uMR4wHAYDVQQKDBVEb3VnbGFzLVdoaXRlICYgR29z
...
-----END CERTIFICATE-----

这通常发生在使用非Unix行结尾对文件进行编码时。你可以打开文件,它会在行尾显示一些奇怪的字符,比如“^M”

将文件转换为unix格式的OpenSSL将能够处理它。尝试运行一些“sed”命令(取决于编码)或专用工具,如“”

如果您的CN是
CN=www.example.com
,则可能是错误的。主机名总是在SAN中。如果它存在于CN中,那么它也必须存在于SAN中(在这种情况下,您必须列出它两次)。有关更多规则和原因,请参阅,您还需要将自签名证书放置在相应的信任存储中。PEM在中是标准化的。该标准在第4.3.1节(第10页)中调出CR-LF行尾:“由字符对分隔的文本行长度不得超过1000个字符”。当时另外两个RFC,SMTP和FTP,使用相同的行尾。如果Node.js无法处理换行符对,那么它可能是Node.js中的一个bug。
-----BEGIN CERTIFICATE-----
MIIDHDCCAgQCCQC8AZE7dSSPZDANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJH
QjEPMA0GA1UEBwwGTG9uZG9uMR4wHAYDVQQKDBVEb3VnbGFzLVdoaXRlICYgR29z
...
-----END CERTIFICATE-----
sed 's/^M$//' infile.txt > outfile.txt

sed 's/\r$//' infile.txt > outfile.txt