ERR_SSL_VERSION_OR_CIPHER_MISMATCH в узле js - PullRequest
0 голосов
/ 06 октября 2018

Я недавно купил персональный сертификат SSL у Positive ssl примерно за 5 долларов, и после того, как я все разобрался с его активацией и проверкой, я наконец смог загрузить файлы сертификатов, файлы, которые я получил, были

www.niknet.ddns.net.ca-bundle www.niknet.ddns.net.crt www.niknet.ddns.net.p7b

сейчас, прежде чем я использовал только .key и .crt, и это прекрасно работало, но теперь я использую файл .ca-bundle и .crt, это код, который я использую для включения этих файловв библиотеку ssl в узле js

var forceSsl = require('express-force-ssl');
var httpPort = process.env.PORT || 80;
var httpsPort = process.env.PORT || 443;
var server = http.createServer(app).listen(httpPort);
var server = https.createServer({
    secureProtocol : 'TLSv1_2_server_method',
    ciphers : "AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH",
    honorCipherOrder : true,
    ca: fs.readFileSync(__dirname + '/niknet_ddns_net.ca-bundle'),
    cert: fs.readFileSync(__dirname + '/niknet_ddns_net.crt')

    },app).listen(httpsPort);
var io = require('socket.io').listen(server);

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

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Я читал другой пост и пытался добавить туда код, но отмечал, что работает. Я также где-то читал, что библиотека ssl или tls для узла js устарела и что мой сертификат может быть новым, если это так, есть ли какой-либо другой сторонний ишБиблиотека ssl, которую я мог бы использовать, у меня сейчас нет выбора

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

протестировал ключ и crt с помощью openssl с помощью команды ниже (попробуйте в браузере https://hostname:8888).. и обнаружите, что точный шифр отсутствует.

openssl s_server -cert server.crt -key server.key -CAfile octopz.zende.sk.ca-bundle -accept 8888 -www

Затем добавлен в код nodejs.

var server = https.createServer({
    key: privateKey,
    cert: certificate,
    ca: certificateAuthority,
    ciphers: [
        "ECDHE-RSA-AES128-SHA256",
        "DHE-RSA-AES128-SHA256",
        "AES128-GCM-SHA256",
        "RC4",
        "HIGH",
        "!MD5",
        "!aNULL"
    ].join(':'),
}, app);

это сработало !!

0 голосов
/ 07 октября 2018

У нас есть много вариантов этого для других языков, но самое близкое, что я могу найти для nodejs, это Как создать HTTPS-сервер в Node.js? , который не является специфическим, или ERR_SSL_VERSION_OR_CIPHER_MISMATCH сузел v7.9.0 https , на который нет ответа.Итак:

Сервер SSL / TLS, включая , серверу HTTPS требуется закрытый ключ И сертификат / цепочка (за редкими исключениями, неприменимыми здесь).Вы можете использовать выданный СА сертификат (и цепочку) вместо самостоятельно созданного (и обычно самоподписанного) сертификата, если сертификат, выданный СА, предназначен для того же частного ключа, но вы все равно должны предоставитьPrivateKey .Вы можете использовать cert и key вместе или объединить сертификат (и, возможно, цепочку) и ключ в файл PKCS12, также называемый PFX, и использовать pfx.

В дополнение к Q, который вы спросили, и, возможно, оффтоп для SO, не используйте RC4.Он считается неработоспособным криптографически, хотя все еще в среднем умеренно трудным / дорогостоящим на практике, и большинство стандартов использования SSL / TLS / HTTPS запрещают его в течение нескольких лет, в частности rfc7465 .

...