Проблема с подключением к SQL Server при использовании sequalize с encryptset до true

#node.js #sql-server #sequelize.js #tedious

#node.js #sql-сервер #sequelize.js #утомительно

Вопрос:

Я работал над проектом NodeJS локально на моем компьютере (Windows), который подключается к базе данных SQL Server с помощью Sequelize. Он отлично работает на моем локальном компьютере, но когда я загружаю его в веб-приложение Azure, я получаю следующую ошибку при каждом запросе..

Не удалось подключиться к x.x.x.x: 1433 — зависание сокета (IP-адрес заменен мной на X)

Код идентичен, и я проверил, что в базе данных нет ограничений IP, она полностью открыта. Я также проверил, что переменные среды (имя пользователя / пароль и т.д.) идентичны и правильно загружаются в рабочей среде. Фактически, мое ведение журнала показывает, что попытка подключения идентична.

Единственное, что заставляет его работать, это удаление опции Sequelize / tedious {encrypt:true} .

Итак, просто для ясности, зашифрованные соединения работают с локального хоста, но не из веб-приложения Azure.

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

Вот моя настройка sequelize. Очевидно, что я отредактировал IP-адрес хоста и данные для входа, но на данный момент они одинаковы для разработчиков и производства.

 {

    'production': {
        'username': xxx,
        'password': xxx,
        'database': xxx,
        'host': xxx,
        'dialect': 'mssql',
        'dialectOptions': {
            'options': {
                'encrypt': true,
                'multipleStatements': true,
                'validateBulkLoadParameters': false
            }
        },
        'omitNull': true,
        'pool': {
            'max': 100,
            'min': 0,
            'acquire': 30000,
            'idle': 10000
        },
        'logging': false
    },

    'development': {
        'username': xxx,
        'password': xxx,
        'database': xxx,
        'host': xxx,
        'dialect': 'mssql',
        'dialectOptions': {
            'options': {
                'encrypt': true,
                'multipleStatements': true,
                'validateBulkLoadParameters': false,
                'debug': {
                    'packet': true,
                    'data': true,
                    'payload': true,
                    'token': true
                }
            }
        },
        'omitNull': true,
        'pool': {
            'max': 100,
            'min': 0,
            'acquire': 30000,
            'idle': 10000
        },
        'logging': false
    }

}
 

Комментарии:

1. Если удаление encrypt:true заставляет его работать, тогда на ум приходят две возможности: 1) между клиентом и сервером нет соглашения для версий протокола TLS 1.0, 1.1, 1.2, препятствующего установлению защищенного соединения, или 2) имя хоста в вашей конфигурации не упоминается в свойствах Subject или DnsNames файла.сертификат сервера, поэтому клиент ему не доверяет. Вероятно, вы могли бы протестировать 2, используя оба encrypt: true и trustServerCertificate: true в параметрах, или, возможно, использовать openssl s_client для сброса сертификата сервера и проверки его свойств вручную.

2. Я попробую (2), хост — это ip-адрес. Будет ли это нормально работать с моего компьютера?

3. Если в Azure используется тот же IP-адрес сервера, что и на вашем компьютере, то, вероятно, сертификат сервера был добавлен в ваше собственное хранилище доверенных сертификатов.

4. OpenSSL может быть установлен на любом компьютере, который может получить доступ к целевому серверу. Если у вас есть удаленный доступ к целевому серверу, вы также можете зайти в диспетчер конфигурации SQL Server и проверить конфигурацию сети SQL Server, чтобы узнать, какой сертификат SSL / TLS он настроен для использования, затем посмотрите в Управление сертификатами компьютеров (т.Е.: certmgr.msc для локального компьютера)> Личные> Сертификаты для найдите соответствующий сертификат и проверьте его свойства.

5. Только вы можете оценить достоинства удаления encrypt: true , чтобы заставить его работать. Если у вас есть какие-либо конфиденциальные данные, передаваемые по проводам (например, пароли или любые другие PII), это не кажется хорошей идеей.