我现在正在使用node.js搞乱登录表单,我尝试使用创建一个pem键和csr
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
但是我在运行节点server.js时遇到了错误
这是我的server.js
var http = require('http'),
express = require('express'),
UserServer = require('./lib/user-server');
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('./key.pem', 'utf8'),
cert: fs.readFileSync('./csr.pem', 'utf8')
};
var app = express();
app.configure(function(){
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
var httpserver = http.createServer(app).listen('3004', '127.0.0.1');
var https_server = https.createServer(options, app).listen('3005', '127.0.0.1');
UserServer.listen(https_server);
这是错误
crypto.js:104
if (options.cert) c.context.setCert(options.cert);
^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.exports.createCredentials (crypto.js:104:31)
at Server (tls.js:1107:28)
at new Server (https.js:35:14)
at Object.exports.createServer (https.js:54:10)
我试过跑步
openssl x509 -text -inform DER -in key.pem
它给
unable to load certificate
140735208206812:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140735208206812:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509
我不确定错误是什么意思,因为我的加密文件已经是.pem文件了,所以任何帮助都会非常感激。
谢谢
您可能使用了错误的证书文件,您需要做的是生成一个自签名证书,可以按如下方式完成
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt
然后使用server.crt
var options = {
key: fs.readFileSync('./csr.pem', 'utf8'),
cert: fs.readFileSync('./server.crt', 'utf8')
};
面临同样的问题在我的情况下,我将cert的选项参数更改为pfx并删除了utf8编码。
之前:
var options = {
hostname : 'localhost',
path : '/',
method : 'POST',
cert: fs.readFileSync(testCert, 'utf8'),
passphrase:passphrase,
agent:false,
rejectUnauthorized:false
};
后:
var options = {
hostname : 'localhost',
path : '/',
method : 'POST',
pfx: fs.readFileSync(testCert),
passphrase:passphrase,
agent:false,
rejectUnauthorized:false
};
我通过编写以下代码删除了此错误
开放式终端
现在使用server.crt和key.pem文件
app.js或server.js文件
var https = require('https');
var https_options = {
key: fs.readFileSync('key.pem', 'utf8'),
cert: fs.readFileSync('server.crt', 'utf8')
};
var server = https.createServer(https_options, app).listen(PORT);
console.log('HTTPS Server listening on %s:%s', HOST, PORT);
它可以工作,但证书不受信任。您可以在图像文件中查看图像。
我想这是因为你的nodejs证书已经过期了。输入以下行:
npm set registry http://registry.npmjs.org/
然后再用npm install再试一次。这实际上解决了我的问题。
对我来说,问题是我交换了密钥和证书。
var options = {
key: fs.readFileSync('/etc/letsencrypt/live/mysite.com/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/mysite.com/fullchain.pem'),
ca: fs.readFileSync('/etc/letsencrypt/live/mysite.com/chain.pem')
};
如果您使用的是Windows,则应确保证书文件csr.pem和key.pem没有unix样式的行结尾。 Openssl将生成具有unix样式行结尾的密钥文件。您可以使用unix2dos之类的实用程序或像notepad ++这样的文本编辑器将这些文件转换为dos格式
如果您登录
var options = {
key: fs.readFileSync('./key.pem', 'utf8'),
cert: fs.readFileSync('./csr.pem', 'utf8')
};
您可能会注意到由于编码不正确而导致无效字符。
我实际上只是有同样的错误信息。
问题是我在配置对象中交换了key
和cert
文件。
生成具有特定到期日期或无限(XXX)到期时间的私钥和服务器证书,并自签名。
$ openssl req -x509 -sha256 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX
$输入一个私钥密码......`
然后它会工作!