2016-06-23 7 views
1

У меня есть клиент, для которого требуется подключение базы данных SQL Server. Полное доменное имя этого компьютера SQL Server - db.client.local, и они установили самозаверяющее шифрование с сертификатом/включением.Проверьте сертификат с SQL Server в узле

Если я подключился к этому хосту (добавив запись в удаленный IP-адрес в файле моих хостов), используя Navicat с включенным в него значком шифрования, он отвергает соединение как ненадежное из-за ненадежности CA, чего я ожидаю.

В узле с использованием node-mssql и tedious Я могу подключиться и запросить сервер, однако проверка не происходит. Как я могу получить node-mssql, чтобы проверить сертификат? В этом случае я должен также иметь возможность предоставлять собственный сертификат CA.

Вот мой код до сих пор

var sql = require('mssql'), 
    evilDns = require('evil-dns'); 

// Set up the mapping so that I can access via their local dns 
evilDns.add('db.client.local' , '1.2.3.4'); 

// Works without erroring 

new sql.connect({ 
    user: 'user', 
    password: 'password', 
    server: 'db.client.local', 
    database: 'my-test-database', 
    port: 1234, 
    options: { 
     encrypt: true // seems decorative, connection encrypts without this 
    } 
}).then(
    function(connection) { 
     return new sql.Request(connection) 
      .query(`SELECT * FROM TableWithStuffIn`) 
      .then(function(response) { 
       console.log(response); 
       return connection.close(); 
      }); 
    }, 
    function(err) { 
     console.log(err); 
     return Promise.reject(); 
    } 
) 

// This also works without erroring 
/* 
new sql.connect(
    'mssql://user:[email protected]:1234/my-test-database?Encrypt=true&TrustServerCertificate=false' 
) 
*/ 
+0

Это выглядит как 'tedious' в настоящее время не поддерживает проверку сертификата - https://github.com/pekim/tedious/issues/282 –

+0

у меня есть су bmitted запрос на перенос на утомительный, который добавит опцию trustServerCertificate - будет обновляться с ответом, если это принято https://github.com/pekim/tedious/pull/399 –

ответ

1

Эта функциональность была неподдерживаемый во время ответа на вопрос. Tedious теперь имеет эту функциональность в своей текущей ветви мастера, а не в выпущенной ветви.

После обновления отпускания следующего примера позволяет выполнить проверку сертификата:

new sql.connect({ 
    user: 'user', 
    password: 'password', 
    server: 'db.client.local', 
    database: 'my-test-database', 
    port: 1234, 
    options: { 
     encrypt: true, 
     trustServerCertificate: false 
    } 
}).then(
    ... 
); 

В пределах нашего случая использования в связи с количеством серверов SQL с внутренними-только полными доменными именами и самоподписанными сертификатами, я использую нечто большее аналогично, после чего использует также evilDNS для обеспечения DNS переопределяет

require('evil-dns').add('db.client.local' , '11.22.33.44'); 

new sql.connect({ 
    user: 'user', 
    password: 'password', 
    server: 'db.client.local', 
    database: 'my-test-database', 
    port: 1234, 
    options: { 
     encrypt: true, 
     trustServerCertificate: false, 
     cryptoCredentialsDetails: { 
      ca: 'PEM Encoded self-signed certificate authority certificate goes here' 
     } 
    } 
}).then(
    ... 
); 

 Смежные вопросы

  • Нет связанных вопросов^_^