Сервер GRPC Golang и клиент NodeJS.Ошибка подключения к TLS - PullRequest
0 голосов
/ 27 февраля 2019

Все отлично работает, когда я не использую TLS.Но когда я это делаю, он не подключается.Подробнее:

Я настроил GRPC-сервер Golang точно так же, как в этом блоге написано https://bbengfort.github.io/programmer/2017/03/03/secure-grpc.html в разделе Mutual TLS с центром сертификации.Сервер работает и работает нормально.

Теперь у меня есть клиент, написанный на NodeJS, пытающийся отправить некоторые данные через grpc.Я настроил NodeJS, как показано ниже:

var PROTO_PATH = __dirname + '/protos/log.proto';
var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
    PROTO_PATH,
    {keepCase: true,
     longs: String,
     enums: String,
     defaults: true,
     oneofs: true
    });
    
var ssl_creds = grpc.credentials.createSsl(fs.readFileSync('ssl/ca.crt'), fs.readFileSync('ssl/client.key'), fs.readFileSync('ssl/client.crt'));

var log_proto = grpc.loadPackageDefinition(packageDefinition).log;
var client = new log_proto.LogData('<IP>:<PORT>',ssl_creds); 

Я создал сертификаты, например, как указано здесь: https://github.com/grpc/grpc/issues/6757. Конечно, я видел этот комментарий: https://github.com/grpc/grpc/issues/6757#issuecomment-264617793.

Я все еще вижу ошибку при запуске клиента NodeJS:

{ Error: 14 UNAVAILABLE: Connect Failed
at Object.exports.createStatusError (/app/node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/app/node_modules/grpc/src/client_interceptors.js:1204:28)
at InterceptingListener._callNext (/app/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/app/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/app/node_modules/grpc/src/client_interceptors.js:845:24)
code: 14,
metadata: Metadata { _internal_repr: {} },
details: 'Connect Failed' }

Данные сертификата: SSLv3 TLSv1.2

РЕДАКТИРОВАТЬ:

Я добавил переменную env GRPC_VERBOSITY в качестве отладки и обнаружил следующее: Peer name <IP> is not in peer certificate

1 Ответ

0 голосов
/ 27 февраля 2019

Таким образом, проблема заключалась в том, что сертификат не мог содержать IP-адрес в качестве имени хоста.У него должно быть имя, а не IP - исправьте его, указав имя и переопределив целевое имя.

const options = {
  'grpc.ssl_target_name_override' : 'simple-host',
  'grpc.default_authority': 'simple-host'
};
var client = new log_proto.LogData('<IP>:<PORT>',ssl_creds,options); 
...