2015-09-25 101 views
3

我在Mac OS X上运行节点v4.1.1和npm 2.14.4。对于同一个快速应用程序,我想启动http和https服务器。 HTTP则运行得完美,但对方崩溃,随之而来的错误:启动https服务器快车时出错

if (process.features.tls_npn && !opts.NPNProtocols) { 
            ^
TypeError: Cannot read property 'NPNProtocols' of undefined 
at new Server (https.js:13:40) 
at Object.exports.createServer (https.js:37:10) 

下面的代码运行整个快递应用程序,并调用HTTP方法:

#!/usr/bin/env node 

var app = require('./src') 
, config = require('./config') 
, cmd = require('commander') 
, http = require('http') 
, https = require('https') 
, path = require('path') 

cmd 
.version('0.1.42') 
.option('-p, --port <n>', 'Port to start the HTTP server', parseInt) 
.parse(process.argv) 

// Launch server with web sockets 
var server = http.createServer(app) 
var sslServer = https.createServer({ 
    key: fs.readFileSync('ryans-ley.pem'), 
    cert: fs.readFileSync('ryans-cert.pem') 
}, app) 

// Listen on provided port, on all network interfaces. 
server.listen(config.port || cmd.port, function() { 
    console.log('http marketplace started on %s:%s', 
    server.address().address, 
    server.address().port) 
}) 

sslServer.listen(443, function() { 
    console.log('https marketplace started on %s:%s', 
    sslServer.address().address, 
    sslServer.address().port) 
}) 

这些证书已与此产生的指导:https://nodejs.org/api/tls.html#tls_tls_ssl

如果我运行相同的代码,不提供选项https.createServer它不会粉碎。然而,当试图达成https://localhostERR_SSL_VERSION_OR_CIPHER_MISMATCH(Chrome浏览器)浏览器的答案

,卷曲

curl https://localhost 
curl: (35) Unknown SSL protocol error in connection to localhost:-9824 
+0

同样的问题,除了我有一个“官方”证书/密钥对。你有没有进步? – david

+1

是的,它恰巧是一个错字。虽然这真的很沉默。如果key + cert配对良好,并且这些文件完全可读,则不应出现错误。仔细检查路径。 – jsdario

回答

2

Cert或chain无效,但错误未反映。 对于任何经历同样问题的人,请尝试与其他密钥对。

+0

有没有办法检查它们是否有效? –

+1

也许像这样http://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify – jsdario

0

设置中的选项允许的协议解决了这个问题对我来说:

NPNProtocols: ['http/2.0', 'spdy', 'http/1.1', 'http/1.0'] 

所以服务器实例在您的代码示例中看起来像下面这样:

var sslServer = https.createServer({ 
    key: fs.readFileSync('ryans-ley.pem'), 
    cert: fs.readFileSync('ryans-cert.pem'), 
    NPNProtocols: ['http/2.0', 'spdy', 'http/1.1', 'http/1.0'] 
}, app)