2013-04-25 2 views
13

У меня возникли проблемы при получении моего SSL сервер работает с сертификатом от GoDaddyЗапуск SSL node.js сервера с GoDaddy gd_bundle.crt

Использования Экспресса: 3.1.0

Ниже это работает с ключом/элт, который был сгенерирован локально/не подписан Go Daddy (браузер жалуется, но если вы добавите исключение это работает.

var http = require('https');  
var privateKey = fs.readFileSync('/var/www/dev/ssl/server.key').toString(); 
    var certificate = fs.readFileSync('/var/www/dev/ssl/server.crt').toString(); 
    var credentials = {key: privateKey, cert: certificate}; 
    var https = http.createServer(credentials, app); 

С GoDaddy Я предоставил дополнительный файл gd_bundle.crt WHI ч Я считаю, что вы реализуете, как это, однако, я получаю сообщение об ошибке

var http = require('https'); 
    var privateKey = fs.readFileSync('/var/www/prod/ssl/mysite.key').toString(); 
    var certificate = fs.readFileSync('/var/www/prod/ssl/mysite.com.crt').toString(); 
    var ca = fs.readFileSync('/var/www/prod/ssl/gd_bundle.crt').toString(); 
    var credentials = {key: privateKey, cert: certificate, ca: ca}; 
    var https = http.createServer(credentials, app); 

С помощью этой конфигурации я получаю: Ошибка 107 (Net :: ERR_SSL_PROTOCOL_ERROR): ошибка протокола SSL.

По правде говоря, я не создаю их ключей/сертификатов, которые делает наш дефолтный парень ... Я не уверен, как я могу устранить неполадки, если я неправильно использую godaddy или если у вас есть способ обеспечить его настройку ключа/crt правильно ....

Кто-нибудь видит что-либо явно, очевидно, неправильно?

ответ

21

Узел требует, чтобы каждый сертификат в цепочке CA передавался отдельно в массиве. gd_bundle.crt вероятно, выглядит следующим образом:

-----BEGIN CERTIFICATE----- 
MIIE3jCCA... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
MIIEADCCA... 
-----END CERTIFICATE----- 

Каждый сертификат должен быть помещен в отдельный файл (т.е. gd1.crt и gd2.crt) и читать отдельно.

+0

Да, внутри этого gd_bundle.crt есть то, что кажется двумя CA, я думал, что это было странно .... поэтому вы говорите, что мне нужно отредактировать его и поместить в два файла и загрузить их в массив. Я попробую это спасибо! – nwkeeley

+0

Подтверждение ввода каждого блока 'BEGIN CERTIFICATE' ...' END CERTIFICATE' в отдельный файл, а затем использование массива, как показано здесь, работало для меня. Решенный сайт, который, казалось, был хорошо на рабочем столе, но не был надежен на android, используя конкатенированный «файл пакета apache» из comodo. – doug65536

3

Недавно у меня была аналогичная проблема с SSL-сертификатами Godaddy на одном из наших серверов node.js. В моем случае проблема заключалась в том, что один из наших серверов проверял SSL с помощью функций curl PHP.

Оказывается, мне пришлось выбрать SHA-1 подпись алгоритм при отправке CSR в Godaddy. Я думаю, что он более совместим со старыми системами.

+0

Относящиеся к Mozilla: [Поэтапные сертификаты с алгоритмами подписи на основе SHA-1] (http://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature -алгоритмы /), [Обновление для сертификатов SHA-1 в Google Chrome] (http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html), Microsoft [Обновление устаревания SHA-1] (http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html) и т. Д. – jww

9

Задать GoDaddy для вашего сертификат в SHA-1 подпись и разбить файл связки на два файла, таким образом ...

от вашего gd_bundle.crt

-----BEGIN CERTIFICATE----- 
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx 
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH 
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX 
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 
-----END CERTIFICATE----- 

К gd_bundle_01.crt

-----BEGIN CERTIFICATE----- 
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx 
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH 
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV 
-----END CERTIFICATE----- 

И gd_bundle_02.crt

-----BEGIN CERTIFICATE----- 
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX 
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 
-----END CERTIFICATE----- 

затем на сервере сделать это

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

var ssl = { 
    key: fs.readFileSync('./ssl/server.key', 'utf8'), 
    cert: fs.readFileSync('./ssl/server.crt', 'utf8'), 
    ca: [fs.readFileSync('./ssl/bundle_01.crt', 'utf8'), 
     fs.readFileSync('./ssl/bundle_02.crt', 'utf8')] 
}; 

https.createServer(ssl, function(req, res) { 
    //... your code here ... 
}).listen(443); 
+0

Я получил два файла от Godaddy. Один из них меньше и содержит только один сертификат. Другой называется gd_bundle-g2-g1.crt. Я понимаю, что мне нужно сломать его ... но где мой ключевой файл? –

+0

, вы должны сгенерировать ключевой файл CSR на своем сервере, посмотрите здесь Справка GoDaddy: http://support.godaddy.com/help/article/5276/generating-a-certificate-signing-request-csr-tomcat- 4-x5-x6-x – fuelusumar

+0

вы можете использовать эту команду тоже ... '$ openssl genrsa -des3 -out www.yourdomain-example.com.key 2048' – fuelusumar

1

Simpler

Почему быть настолько специфичны только для CA пачки GoDaddy, когда вы можете сохранить тот же подход для различных сред?Мне нужны только два файла для dev env, но на производстве используются сертификаты GoDaddy и у многих есть что делать?

Для GoDaddy я беру их комплект и добавляю его в один файл и называю расширение как PEM, а также ключевой файл, который дает довольно стандартный подход для всех типов сертификатов.

Тогда вы в конечном итоге просто делает это для всех сред:

server = https.createServer({   
    key: fs.readFileSync(config.sslKey), 
    cert: fs.readFileSync(config.sslCert), 
},app).listen(config.sslPort); 

В вашем cert.pem файле GoDaddy вы просто поместите сертификат и вашего комплекта файлов от 1 до х (сверху вниз), и вы сделанные так:

-----BEGIN CERTIFICATE----- 
site certificate goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA 1 goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA 2 goes here 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
CA X goes here 
-----END CERTIFICATE----- 

Не обязательно лучше, но я предпочитаю. Я не сталкивался с Express 3.x, что мне приходилось делать маршрут массива CA, но я мог ошибаться в конкретной версии.

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