2010-11-23 3 views
1

Я пытаюсь создать базовое соединение SSL из приложения node.js на локально размещенный сервер nginx; он также включает отправку учетных данных клиента. Рукопожатие кажется, что оно было успешным, так как вызов «verifyPeer» из «безопасного» события проверяет многое. Однако сервер продолжает отвечать только с ответом 400.node.js и nginx Ошибка установления связи SSL

Если я сделать такой же запрос с завитком в командной строке, я вернусь, что я ожидаю:

curl -v -E curl-test.crt --cacert ca.crt https://internal.url:7443/some.file 

«завиток-test.crt» был создан путем конкатенации ключа клиента и сертификата вместе.

Вот маленький кусочек Node.js кода, необходимого для получения отказа:

global.util = require('util'); 

var fs = require('fs'), 
    http = require('http'), 
    crypto = require('crypto'); 

var clientCert = fs.readFileSync("tmp/cert.crt", 'ascii'), 
    clientKey = fs.readFileSync("tmp/key.key", 'ascii'), 
    caCert = fs.readFileSync("tmp/ca.crt", 'ascii'); 
var credentials = crypto.createCredentials({"key": clientKey, "cert": clientCert, "ca": caCert}); 

var client = http.createClient(7443, "internal.url", true, credentials); 

client.addListener("secure", function() { 
    if (!client.verifyPeer()) { 
    throw new Exception("Could not verify peer"); 
    } 
}); 

var request = client.request('GET', '/some.file', {}); 

request.on('response', function(response) { 
    response.on('data', function(body) { 
    util.log("body: " + body); 
    }); 
}); 

request.end(); 

А вот ответ, который я получаю, независимо от того, что «some.file» изменено на:

body: <html> 
<head><title>400 Bad Request</title></head> 
<body bgcolor="white"> 
<center><h1>400 Bad Request</h1></center> 
<hr><center>nginx/0.6.32</center> 
</body> 
</html> 

Любая помощь в отладке или решении этого вопроса было бы фантастическим

ответ

4

вы получаете это сообщение в вашем журнале ошибок Nginx?

2010/11/23 17:51:59 [info] 13221#0: *1 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: testme.local, request: "GET /some.file HTTP/1.1" 

Если да, то вы можете это исправить, просто добавив заголовок «Host» на запрос GET, как это:

var request = client.request('GET', '/some.file', {'Host':'internal.url'}); 

Похоже Nginx хочет заголовок узла и узел не посылает его по умолчанию. Вероятно, есть способ настроить nginx по умолчанию на правильное значение заголовка.

Надеюсь, что это поможет!

+0

Ты мужчина недели! Я не видел сообщение об ошибке, которое вы указали в любом файле журнала (возможно, в настройках журнала), но я все равно пробовал настройку хоста, и это действительно помогло. Большое спасибо! – Gus

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