Как вы подключаетесь к серверу EPP (реестру домена) в Node JS?

Я создаю проект для управления собственными доменными именами (только в учебных целях). Стандарт взаимодействия с API реестра заключается в использовании их сервера EPP на порту 700 с вашим именем пользователя, паролем и сертификатом SSL на стороне клиента.

Как мне подключиться к этому в node js? Должен ли я открыть соединение TLS? Их документация в лучшем случае расплывчата, поэтому, если у кого-то есть опыт в этом, это поможет.

Это также тяжелое тестирование, потому что я не уверен, что мой IP-адрес был правильно внесен в белый список. Хотелось бы увидеть пример фрагмента кода, подключающегося к серверу EPP с именем пользователя, паролем и сертификатом SSL, или, возможно, просто указать мне правильное направление, поскольку я, скорее всего, слишком задумываюсь над этим: стр.

Вот где я начал искать с единственного примера в сети, который я могу найти в node.

var fs = require('fs')
var tls = require('tls')

var options = {
  cert: fs.readFileSync('cert.pem'),
  passphrase: 'passphrase',
  username: 'username', // ?
}

var stream = tls.connect(700, 'example.com', options);
  stream.setEncoding('utf8')
  stream.on('secureConnect', function() {
  console.log('client connected')
})
stream.on('data', function(data) {
  console.log(data)
})

Но это ничего не делает и не устанавливает связи.


person traviswingo    schedule 08.02.2017    source источник
comment
Вы можете показать нам код?   -  person BG BRUNO    schedule 08.02.2017
comment
Добавлен. Ничего особенного, потому что я не знаю, с чего начать.   -  person traviswingo    schedule 08.02.2017
comment
Как-то помог тебе мой ответ?   -  person BG BRUNO    schedule 10.02.2017
comment
Код для подключения к серверу EPP выглядит правильным (для меня), но я еще не смог установить успешное соединение из-за (как я думаю) недействительных проблем с сертификатом. Я все еще не могу их решить и в настоящее время работаю с реестром.   -  person traviswingo    schedule 13.02.2017
comment
Попробуйте подключиться с помощью openssl s_client и вашего сертификата. Как только вы получите приветствие EPP таким образом, это означает, что ваш IP-адрес правильно внесен в белый список, а затем ваш сертификат правильно распознается сервером. После этого вы можете попробовать сделать то же самое из своей программы.   -  person Patrick Mevzek    schedule 11.05.2017


Ответы (1)


Если я правильно понимаю, RFC EPP можно подключить по TCP.

Я бы использовал Node.JS API net для создания клиента.

И с помощью документации EPP после подключения вам необходимо отправить команда в этом формате для пример входа.

var host = 'example.com';
var port = 700;
var command = '{{xml_command}}';

var client = new net.Socket();
client.connect(port, host, function() {
    console.log('Connected');
    client.write(command);
});

client.on('data', function(data) {
    console.log('Received: ' + data);
    client.destroy();
});

client.on('close', function() {
    console.log('Connection closed');
});

В качестве альтернативы я бы попробовал node-epp и epp-reg.

Может я помог, куда идти дальше.

person BG BRUNO    schedule 08.02.2017
comment
Нет, это неправильно реализует EPP. См. Раздел 4 RFC5734, каждый кадр EPP должен соответствовать своему размеру, закодированному в 4 байта. Также в разделе 3 сервер первым говорит приветственное сообщение. - person Patrick Mevzek; 05.06.2018
comment
Хорошо, спасибо @PatrickMevzek - привет, сообщение имеет смысл - В, можете ли вы предложить решение, как оно должно выглядеть? - person BG BRUNO; 05.06.2018
comment
Хотя я много знаю о EPP, я ничего не знаю о NodeJS. Поэтому я могу только сказать, что вам нужно следовать по этому пути: 1) правильно установить соединение TLS (решить проблемы с сертификатами и т. Д.) 2) открыть сокет 3) прочитать сообщение сервера (прочитать первые 4 байта - но помните, что они могут приходить фрагментированными пакетами, затем читать количество данных, равное размеру, закодированному в этих 4 байтах), это будет приветствие 4), ответить логином (снова размер кодирования как первые 4 байта) 5) прочитать ответ сервера, если любой, проверьте код результата и вернитесь к 3) - person Patrick Mevzek; 05.06.2018