Да, в MetaTrader 5 (MT5) возможно создание защищенного подключения на порту, отличном от 443, но для этого могут потребоваться дополнительные настройки и проверка некоторых аспектов. Вот несколько рекомендаций, которые могут помочь решить вашу проблему:
-
Проверка Сертификатов: Убедитесь, что сертификаты на сервере корректно настроены для использования порта, отличного от 443. Проверьте настройки вашего сервера Node.js, чтобы убедиться, что сертификат правильно применен для всех используемых портов.
-
Настройки Брандмауэра и Маршрутизации: Хотя вы упомянули, что порты не блокируются, важно убедиться, что брандмауэр и любые сетевые устройства не блокируют или не перенаправляют трафик на этом порту.
-
Конфигурация Серверной Программы: Убедитесь, что ваш сервер Node.js настроен для прослушивания на порту 8000 и поддерживает TLS на этом порту. Например, если вы используете https модуль, убедитесь, что он настроен правильно:
const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('/path/to/your/private.key'), cert: fs.readFileSync('/path/to/your/certificate.crt') }; https.createServer(options, (req, res) => { res.writeHead(200); res.end('hello world\n'); }).listen(8000);
Проверка TLS Конфигурации: Используйте openssl для проверки корректности сертификатов и настроек на порту 8000:
openssl s_client -connect your_server_address:8000
Использование Правильного Формата Данных: Убедитесь, что данные, которые вы отправляете через сокет, имеют правильный формат. Это особенно важно для JSON данных.
Отладка: Добавьте больше отладочной информации в ваш код, чтобы понять, где именно происходит ошибка. Например, добавьте вывод значений ошибок и промежуточных шагов:
bool hand = SocketTlsHandshake(socket, Address); if(!hand) { Print("TLS Handshake failed with error: ", GetLastError()); return; }
-
Обновление MT5: Убедитесь, что у вас установлена последняя версия MetaTrader 5, так как в новых версиях могут быть исправлены ошибки и добавлены улучшения, связанные с сетевыми подключениями.
Вот обновленный пример функции для создания защищенного подключения с дополнительной отладочной информацией:
void Auth() { string jsonAuth = "{"; jsonAuth += "\"login\":" + login + ","; jsonAuth += "\"email\":\"" + Email + "\","; jsonAuth += "\"key\":\"" + SecretKey + "\","; jsonAuth += "\"platform\":\"" + "MT5" + "\""; jsonAuth += "}"; string auth = "{"; auth += "\"event\":\"v1-login\","; auth += "\"body\":" + jsonAuth; auth += "}"; int socket = SocketCreate(); if(socket != INVALID_HANDLE) { if(SocketConnect(socket, Address, Port, 5000)) { Print("Установлено подключение к ", Address, ":", Port); bool hand = SocketTlsHandshake(socket, Address); if(!hand) { Print("TLS Handshake failed with error: ", GetLastError()); return; } string subject, issuer, serial, thumbprint; datetime expiration; int dataSize = StringLen(auth); uchar dataBuffer[]; ArrayResize(dataBuffer, dataSize); for(int i = 0; i < dataSize; i++) { dataBuffer[i] = (uchar)auth[i]; } if(SocketTlsSend(socket, dataBuffer, dataSize) == SOCKET_ERROR) { Print("Error sending data: ", GetLastError()); } } else { Print("Failed to connect to ", Address, ":", Port, " with error: ", GetLastError()); } } else { Print("Failed to create socket with error: ", GetLastError()); } }
openssl s_client -connect your_server_address:8000
тоже я написал, все работает корректно. Думаю проблема в МТ5. Надеюсь, получить помощь сообщества. Возможно кто-то сталкивался с подобной проблемой, и может подсказать решение.
Может помежет
![Websockets for MetaTrader 5 Websockets for MetaTrader 5](https://c.mql5.com/36/84/websockets-for-metatrader-5.jpg)
- www.mql5.com
if(m_port!=443) { if(SocketConnect(m_socket,server,port,timeout)) return(SocketTlsHandshake(m_socket,server)); }
На этом порту и у меня все работает. Собственно поэтому и возник вопрос, может ли работать защищенное соединение на другом порту.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Возник вопрос по защищенному сокет подключению при создании советника MQL5.
Окружение: МТ5 на Windows 11, сервер Node.js на VMware Ubuntu.
На 443 порту все подключается и работает корректно.
При попытке подключения на любой другой порт, получаю ошибку: 5274 Failed to establish secure connection (TLS Handshake).
Порты не блокируются, доступность портов проверена и на Windows и на Ubuntu. Сервер слушает нужный порт.
Так же вижу попытку соединения, обмен пакетами советника и сервера на порту 8000, что видно в результате выполнения sudo tcpdump -i any port 8000.
Сертификаты также настроены правильно, и можно подключиться с помощью openssl s_client -connect.
Возможно ли в МТ5 создание защищенного подключения, на порту отличном от 443?
Если да, то дайте, пожалуйста, рекомендации как решить проблемы с созданием защищенного подключения.
Возможно, нужны какие-то дополнительные настройки?
Код функции для создания защищенного подключения: