Tedious: يتم إهمال وقت التشغيل tls.createSecurePair

تم إنشاؤها على ٢٦ فبراير ٢٠١٧  ·  33تعليقات  ·  مصدر: tediousjs/tedious

المرجع: https://github.com/nodejs/node/pull/11349

مستعمل في:

tedious-1.14.0.tgz/lib/message-io.js:117:      this.securePair = tls.createSecurePair(credentials);

انظر أيضًا # 135.
راجع على سبيل المثال https://github.com/sidorares/node-mysql2/pull/367 للحصول على مثال لاكتشاف الميزة.

التعليق الأكثر فائدة

يحتوي 738 على إصلاح وسيتم دمجه وإصداره بمجرد مراجعته بواسطة شخص من فريق @ tediousjs / microsoft-Contributor.

ال 33 كومينتر

ChALkeR شكرا على المؤشر. سيكون هذا مفيدًا عندما نصل إلى هذا. لا تتردد في إرسال العلاقات العامة إذا كنت تشعر بالإلهام :-)

tvrprasad : ChALkeR هو جزء من فريق Node.js وهذا تنبيه لنا لمعرفة أن هذه الميزة قد تم إهمالها. لا أعتقد أنه يستخدم بالفعل tedious . 😄

ChALkeR : لقد node-mysql ) على ترقيات TLS "البسيطة" ، حيث يتم تحويل الاتصال من non-TLS إلى TLS.

في TDS ، تكون ترقية TLS أكثر تعقيدًا ، حيث يجب تغليف جميع حزم المصافحة في رسائل TDS ، وبعد ذلك بمجرد إنشاء الاتصال ، لن تحتاج إلى تغليف جميع حزم TLS الأخرى بعد الآن. كان تنفيذ هذا عبر tls.createSecurePair بسيطًا جدًا ، لكن في المرة الأخيرة التي جربت فيها هذا عبر TLSSocket ، لم أتمكن من تشغيله. 😞

سأحاول مرة أخرى عندما أصل إليه ، لكنني لا أعتقد أن الكثير قد تغير.

هناك مشكلة أخرى واجهتني وهي أن التفاف المقبس من الحزمة readable-stream في TLSSocket قد يتسبب في حدوث segfault (!) من عملية Node.js. لسوء الحظ ، ليس لدي خطوات الإنجاب في متناول يدي الآن. 😞

arthurschreiber شكرا للمعلومات :-)

لكن في المرة الأخيرة التي جربت فيها ذلك عبر TLSSocket ، لم أتمكن من تشغيله.

إذا كان هذا العمل على جيثب ، من فضلك أرسل لي مؤشرًا. أنا فضولي للتحقق من ذلك.

tvrprasadarthurschreiber هنا معلومات عن كيفية استبدال tls.createSecurePair https://nodejs.org/dist/latest-v6.x/docs/api/tls.html#tls_class_securepair

تم ترميز نفس المشكلة على Node v8.0.1. يبلغ تطبيقي عن الخطأ بعد محاولة إنشاء ارتباط مشفر:

(node:6344) [DEP0064] DeprecationWarning: tls.createSecurePair() is deprecated. Please use tls.Socket instead.

أستخدم patriksimek/node-mssql وبرنامج التشغيل tedious (المحرك الافتراضي node-mssql ) للوصول إلى قاعدة بيانات Microsoft SQL Server.

نفس المشكلة مثل olange باستخدام node-mssql مع برنامج تشغيل ممل.

Listening on port 4000
(node:4402) [DEP0064] DeprecationWarning: tls.createSecurePair() is deprecated. Please use tls.Socket instead.

من فضلك لا تأخذني بشكل خاطئ وأنا أقدر حقًا جهودك في الحفاظ على هذه الوحدة ولكن هل هناك أي توقع متى سيتم إصلاحها؟

باستخدام الحزمة 'mssql' وباستخدام الخيارات:
{
تشفير: صحيح
}

(العقدة: 13508) [DEP0064] تحذير الإيقاف: tls.createSecurePair () مهمل. الرجاء استخدام tls.Socket بدلاً من ذلك.

عندما يقوم فريق Node بإهمال شيء مثل هذا ما هو الإطار الزمني للإزالة في Node؟ فضولي فقط.

من المحتمل أن تتم إزالتها في العقدة 9 أو 10. لقد تم إهمال الميزة لمدة 4 سنوات على الأقل. : - / هذه واحدة من حزم NPM الشائعة الوحيدة التي لا تزال تستخدمها.

هل لدى أي شخص من المتعاونين أي جدول زمني بشأن موعد إصدار التغيير؟

الحصول على هذا اليوم منذ أن قمت للتو بتحديث أنظمتنا إلى العقدة 8.9.0 لتر. لدي الآن مشروعان ثقيلان ، ولكن إذا تم تخفيف كلاهما ، فسأرى ما إذا كان بإمكاني تخصيص بعض الوقت لإصلاح ذلك.

تضمين التغريدة
لقد ألقيت نظرة عليها ، لكن لم أتمكن من معرفة كيفية الحصول على حزمة المصافحة من TLSSocket ، عالقة في نفس النقطة مثل https://github.com/tediousjs/tedious/issues/515#issuecomment -283191248: مرتبك:
أحب أن أسمع ما إذا كان لديك أفكار حول ذلك.

أي تقدم في ذلك؟ أواجه نفس المشكلة أثناء محاولة الاتصال بـ Azure ، فقط إذا كان ذلك مفيدًا.
سأكون ممتنًا لو أوضح لي شخص ما بسرعة ما هي نتيجة تشغيل التطبيق أثناء إهماله ، لم يتم تنفيذ استعلامات SQL التي أطلبها وأحتاج إلى معرفة ما إذا كان هذا هو السبب ، ولكن النصوص الموجودة في هذا الأمر لقد قرأت ليست بليغة جدا.

شكرا لكم مقدما.

@ Jorgeee1 هذا مجرد تحذير ، فمن غير المرجح أن يكون سبب مشكلتك. أنا أستخدم مملاً للاتصال بـ Azure DB أيضًا ، وهو يعمل بشكل جيد.

لقد كتبت إثباتًا سريعًا لمفهوم استبدال createSecurePair بـ TLSSocket + خادم TCP للحصول على بيانات المصافحة الأولية. يمكنك إلقاء نظرة عليه هنا . اجتازت اختبارات التكامل التي يمكنني إجراؤها.

من الواضح أن هذا ليس حلاً حقيقيًا للقضية المطروحة (ما لم يكن تناول مآخذ إضافية وما إلى ذلك أمرًا مقبولاً). هذا أكثر من مجرد بداية مناقشة. سيكون من الجيد الحصول على اقتراحات ومناقشات فعلية على https://github.com/nodejs/help/issues/1010.

@ joux3 هذا رائع 😃 هل يمكنك إنشاء علاقات عامة؟ سيكون من الأسهل للمراجعة والمناقشة هناك.

لم يتم تخفيف حدة المشروعات الثقيلة ، وتمت إضافة ثالث ، كما قمنا بالترحيل إلى MySQL أيضًا. آسف لن أكون قادرًا على إصلاح هذا - حظًا سعيدًا لك :).

يرجى إصلاحها ، إنها مشكلة مهمة

مرحبا بكم جميعا،

اسمحوا لي أن أقدم تحديثًا سريعًا للوضع الحالي هنا. أتفهم أن رسالة الإيقاف قد تكون مصدر إزعاج ، لكنها ليست مشكلة في الحقيقة. قد يتم إهمال tls.createSecurePair ، لكن بالنسبة للمستقبل القصير والمتوسط ​​المدى ، فلن يذهب إلى أي مكان. وفقًا لـ https://github.com/nodejs/node/pull/17882 ، لن تتم إزالته قريبًا.

أيضًا ، https://github.com/nodejs/node/pull/17882 يقترح إعادة تنفيذ tls.createSecurePair من حيث واجهة برمجة تطبيقات node.js العامة ، وتقديم (في الوقت الحالي) DuplexSocket فئة tls.createSecurePair ، دون اللجوء إلى الاختراقات المثيرة للاهتمام 😁 ولكن ليست مفيدة حقًا على النحو الذي اقترحه @ joux3. سيتعين علينا على الأرجح إنشاء إصدارنا DuplexSocket في الوقت الحالي ، ولكن على الأقل لدي الآن فكرة جيدة حول كيفية حل هذا الأمر بطريقة مملة بمجرد أن يتضح متى ستتم إزالة tls.createSecurePair بالفعل .

اسمحوا لنا أن نعرف ما هو رأيك! 😄

arthurschreiber Fwiw ، لقد قمت أيضًا بنشر تطبيق DuplexPair على https://www.npmjs.com/package/duplexpair. أعتقد أنه يمكنك بناء غلاف حول ذلك للحصول على مظهر يشبه tls.createSecurePair() بسهولة؟

تضمين التغريدة ❤️ هذا رائع وسأرى ما إذا كان بإمكاني ربط هذا الأمر وجعلنا نتحرك بعيدًا عن tls.createSecurePair عاجلاً وليس آجلاً! شكرا جزيلا لك! 🙇

arthurschreiber أعتقد أن التصحيح لهذا قد يبدو بسيطًا مثل هذا:

diff --git a/package.json b/package.json
index bca5b266849d..8cc0ed957577 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
     "babel-runtime": "^6.26.0",
     "big-number": "0.3.1",
     "bl": "^1.2.0",
+    "duplexpair": "^1.0.1",
     "iconv-lite": "^0.4.11",
     "readable-stream": "^2.2.6",
     "sprintf": "0.1.5"
diff --git a/src/message-io.js b/src/message-io.js
index 6c2a15c32a9f..a1de3a1e91c0 100644
--- a/src/message-io.js
+++ b/src/message-io.js
@@ -1,7 +1,9 @@
+'use strict';
 const tls = require('tls');
 const crypto = require('crypto');
 const EventEmitter = require('events').EventEmitter;
 const Transform = require('readable-stream').Transform;
+const DuplexPair = require('duplexpair');

 const Packet = require('./packet').Packet;
 const TYPE = require('./packet').TYPE;
@@ -84,10 +86,14 @@ module.exports = class MessageIO extends EventEmitter {
   startTls(credentialsDetails, hostname, trustServerCertificate) {
     const credentials = tls.createSecureContext ? tls.createSecureContext(credentialsDetails) : crypto.createCredentials(credentialsDetails);

-    this.securePair = tls.createSecurePair(credentials);
+    const duplexpair = new DuplexPair();
+    this.securePair = {
+      cleartext: new tls.TLSSocket(duplexpair.socket1),
+      encrypted: duplexpair.socket2
+    };
     this.tlsNegotiationComplete = false;

-    this.securePair.on('secure', () => {
+    this.securePair.cleartext.on('secure', () => {
       const cipher = this.securePair.cleartext.getCipher();

       if (!trustServerCertificate) {

ولكن لا يبدو أن هذا قد تم اختباره كجزء من مجموعة الاختبارات العادية ، لذلك لست متأكدًا من كيفية القيام بذلك ...

لقد أعطيت فرصة أخرى لاستبدال SecurePair. يبدو أن اختبارات التكامل جيدة ، حيث تم اختبارها على Node 9. https://github.com/joux3/tedious/commit/6d255fbdaa2f9afd388617e6e34815cae95292a0

ومع ذلك ، لدي بعض الملاحظات (ولكن ربما يكون التصحيح جيدًا بما يكفي للعلاقات العامة لمناقشة المشكلات؟):

  • يبدو أن Node.js 6 يتعطل تمامًا عند Assertion failed: (uv__stream_fd(stream) >= 0), function uv_read_start, file ../deps/uv/src/unix/stream.c, line 1517.
  • اضطررت إلى إزالة تزوير المؤقت من اختبار مهلة إعادة المحاولة ، يبدو أن المؤقت المزيف يكسر DuplexPair داخليًا
  • لم أختبر الاتصالات غير المشفرة. قد تتأثر هذه التغييرات بالتدفق المنطقي (لا يبدو أن الإشارات تنتشر بشكل صحيح عبر الأنابيب ، لذا يوجد معالج يدوي close على المقبس) '

شكراً جزيلاً لـ addaleax على عملك!

@ joux3 هل https://github.com/patriksimek/node-mssql/ شكرًا لك!

اضطررت إلى إزالة تزوير المؤقت من اختبار مهلة إعادة المحاولة ، يبدو أن المؤقت المزيف يكسر DuplexPair داخليًا

@ joux3 أي اختبار سيكون ذلك؟ (أنا آسف ، لست على دراية بقاعدة الشفرة هذه بشكل خاص بخلاف ما نظرت إليه بخصوص هذه المشكلة)

addaleax ، اختبار الفشل هو https://github.com/tediousjs/tedious/blob/f5a0f95a5a522ad6a312170201b829e70c866976/test/integration/connection-retry-test.js#L73 -L104
تعطيل المؤقت هنا: https://github.com/tediousjs/tedious/pull/689/files#diff -ed1dc3ba8a10a8fb4b18a528b35bad00.
تحرير: لقد استعدت تزوير المؤقت عن طريق تزوير setTimeout https://github.com/tediousjs/tedious/pull/689/commits/ff5d5eb1a3603db05266306a823fa49a98b50209.

jimmont ، فتحت طلب سحب على https://github.com/tediousjs/tedious/pull/689 (يبدو أن الإشارة إلى معرف المشكلة في اسم العلاقات العامة لا يكفي ...). تمر اختبارات التكامل على العقدة 8 ، ولكن لا يزال هناك بعض العمل الذي يتعين القيام به.

👍 لإصلاح هذا في أسرع وقت ممكن!

أي تقدم في هذا؟ سيكون من الجيد أن نتمكن من الحصول على تحديث بشأن هذه المشكلة.

ربط PR # 689 للتتبع.

في عالم حيث يتم إرسال التحذيرات إلى stderr بدلاً من stdout. <fail/>

أي تحديث؟

يحتوي 738 على إصلاح وسيتم دمجه وإصداره بمجرد مراجعته بواسطة شخص من فريق @ tediousjs / microsoft-Contributor.

بعد وقت طويل من ذهاب وإياب ، تم إصلاح هذا أخيرًا (وبشكل صحيح) عبر https://github.com/tediousjs/tedious/pull/738. [email protected] متاح الآن على npm. تم وضع علامة عليه حاليًا كـ next وسأتأكد من أنه سيتم وضع علامة عليه كـ latest قريبًا.

نشكرك جميعًا على سعة صدرك ومساعدتك في إصلاح هذا الأمر! 🙇

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات