2015-04-13 3 views
1

Я не мог использовать SNICallback на функции createServer. Когда я попробую следующие коды, я получаю сообщение об ошибке Missing PFX or certificate + pricate key.Я не могу использовать SNICallback

Как я могу решить эту проблему?

var fs = require('fs'), 
     tls = require('tls'), 
     https = require('https'); 

var certs = { 
    "safe.myDomain.com": { 
     key: fs.readFileSync('../SSL/safe/private/key.pem'), 
     cert: fs.readFileSync('../SSL/safe/certs/cert.pem') 
    }, 
    "api.myDomain.com": { 
     key: fs.readFileSync('../SSL/api/private/key.pem'), 
     cert: fs.readFileSync('../SSL/api/certs/cert.pem') 
    } 
} 

var httpsOptions = { 
    SNICallback: function(hostname, cb) { 
     var ctx = tls.createSecureContext(certs[hostname]) 
     cb(null, ctx]) 
    } 
} 

https.createServer(httpsOptions).listen(1443, function() { 
    console.log('HTTPS server is listening on port 1443') 
}) 

ответ

1

Варианты в https.createServer должны включать key и cert, поскольку они необходимы. Хотя этот набор не будет использоваться, если SNI предоставляет имя хоста.

См. tls.createServer, где он отметит key и cert при необходимости. (Связано с https.createServer.)

+0

спасибо! Итак, я должен предоставить сертификат по умолчанию для адреса 'api.mydomain.com'. И если адрес не является «api.mydomain.com», работает SNI, и если адрес «safe.mydomain.com», то вызывается адрес. Не так ли? Если это так, мне интересно, что пользователь, который хочет позвонить 'safe.mydomain.com', может передать' cert' по умолчанию? – efkan

+0

По умолчанию, как вы его называете, для тех клиентов, которые не предоставляют имя хоста через SNI. –

+0

Действительно спасибо Дэн, я занимаюсь протоколами безопасности моего проекта в течение одного месяца. И я измучен ... – efkan

Смежные вопросы