参照: https :
で使われる:
tedious-1.14.0.tgz/lib/message-io.js:117: this.securePair = tls.createSecurePair(credentials);
#135も参照してください。
機能検出の例については、たとえばhttps://github.com/sidorares/node-mysql2/pull/367を参照してください。
@ChALkeRポインタをありがとう。 これは、これに到達するときに役立ちます。 インスピレーションを感じたら、遠慮なくPRを送ってください:-)
@tvrprasad : @ChALkeRはNode.jsチームの一部であり、この投稿は主に、この機能が非推奨であることを知るためのヘッドアップとして意図されています。 彼が実際にtedious
使用しているとは思わない。 😄
@ChALkeR :この非推奨についてはしばらく前から知っていましたが、この非推奨に関するドキュメントは本当にまばらです。 これまでに見た例( node-mysql
のPRなど)は、接続が非TLSからTLSに切り替わる「単純な」TLSアップグレードに焦点を当てています。
TDSでは、TLSのアップグレードははるかに複雑であり、すべてのハンドシェイクパケットをTDSメッセージにラップする必要があります。接続が確立されると、それ以降のすべてのTLSパケットをラップする必要がなくなります。 tls.createSecurePair
を介してこれを実装するのは非常に簡単TLSSocket
を介してこれを試したとき、動作させることができませんでした。 😞
そこに着いたらもう一度やり直しますが、あまり変わっていないと思います。
私が遭遇したもう1つの問題は、 readable-stream
パッケージのソケットをTLSSocket
ラップすると、Node.jsプロセスのセグメンテーション違反(!)が発生することです。 残念ながら、現在、複製手順は便利ではありません。 😞
@arthurschreiber情報をありがとう:-)
しかし、前回TLSSocketを介してこれを試したとき、動作させることができませんでした。
この作品がgithubにある場合は、ポインターを送ってください。 私はそれをチェックすることに興味があります。
@ tvrprasad @ arthurschreiberこれはhttps://nodejs.org/dist/latest-v6.x/docs/api/tls.html#tls_class_securepair
ノードv8.0.1で同じ問題が発生しました。 暗号化された接続を確立しようとした後、私のアプリは次のエラーを報告します:
(node:6344) [DEP0064] DeprecationWarning: tls.createSecurePair() is deprecated. Please use tls.Socket instead.
patriksimek/node-mssql
とtedious
ドライバー( node-mssql
のデフォルトドライバー)を使用して、Microsoft SQLServerデータベースにアクセスしています。
面倒なドライバでノード-MSSQLを使用して@olangeと同じ問題。
Listening on port 4000
(node:4402) [DEP0064] DeprecationWarning: tls.createSecurePair() is deprecated. Please use tls.Socket instead.
誤解しないでください。このモジュールを維持するための努力に心から感謝していますが、いつ修正されるかについての予測はありますか?
パッケージ「mssql」の使用とオプションの使用:
{{
暗号化:true
}
(ノード:13508)[DEP0064]非推奨警告:tls.createSecurePair()は非推奨になりました。 代わりにtls.Socketを使用してください。
ノードチームがこのようなものを非推奨にした場合、ノードでの削除の時間枠はどうなりますか? ちょっと興味があるんだけど。
おそらくノード9または10で削除されるでしょう。この機能は少なくとも4年間ドキュメントで非推奨になっています。 :-/これはまだそれを使用している唯一の人気のあるNPMパッケージの1つです。
共同作業者の誰かが、変更がいつリリースされるかについてのタイムラインを持っていますか?
システムをノード8.9.0ltsに更新したばかりなので、今日これを取得します。 現在、2つの重いプロジェクトがありますが、両方が楽になれば、これを修正するために時間を割けるかどうかを確認します。
@Iiridaynそれは素晴らしいでしょう!
私はそれを見ましたが、TLSSocketからハンドシェイクパケットを取得する方法を理解できませんでした。https: //github.com/tediousjs/tedious/issues/515#issuecomment -283191248:confused:と同じポイントでスタックしました。
あなたがそれについての考えを持っているかどうか聞いてみたいです。
その上で何か進歩はありますか? Azureに接続しようとしても、問題が解決する場合でも、同じ問題が発生します。
これが非推奨になっている間にアプリを実行した結果はどうなるのか、誰かがすぐに説明してくれたらありがたいです。私が要求するSQLクエリは実行されず、これが原因かどうかを知る必要がありますが、これに関するテキストは私です。読んだことはあまり雄弁ではありません。
前もって感謝します。
@ Jorgeee1これは単なる警告であり、問題の原因となる可能性は低いです。 私もAzureDBへの接続に面倒な作業を行っていますが、正常に機能しています。
createSecurePair
をTLSSocket
+ TCPサーバーに置き換えて、生のハンドシェイクデータを取得するという概念実証を作成しました。 ここでそれを見ることができます。 実行できる統合テストに合格しました。
これは明らかに目前の問題に対する実際の解決策ではありません(余分なソケットなどを食べても問題がない場合を除く)。 これは議論のきっかけになります。 https://github.com/nodejs/help/issues/1010で実際の提案やディスカッションを行うとよいでしょう
@ joux3それは素晴らしいです😃PRを作成できますか? そこでレビューして議論する方が簡単です。
重いプロジェクトは緩和されておらず、3分の1が追加されており、MySQLにも移行しています。 申し訳ありませんが、これを修正することはできません-幸運を祈ります:)。
それを修正してください、それは重要な問題です
やあ、みんな、
ここで現在の状況について簡単に更新します。 非推奨のメッセージが迷惑になる可能性があることは理解していますが、実際には問題ではありません。 tls.createSecurePair
は廃止される可能性がありますが、短期および中期的にはどこにも行きません。 https://github.com/nodejs/node/pull/17882によると、すぐに削除されることはありません。
また、 https://github.com/nodejs/node/pull/17882は、パブリックnode.js APIに関してtls.createSecurePair
再実装を提案し、(今のところ)内部DuplexSocket
導入していますtls.createSecurePair
から離れるために必要なものですが、@ joux3によって提案されたような実際には実行可能なハックではありません。 今のところ、おそらく独自のDuplexSocket
バージョンを作成する必要がありますが、少なくとも、 tls.createSecurePair
が実際にいつ削除されるかが明確になったら、これを面倒な方法で解決する方法については良い考えがあります。 。
ご意見をお聞かせください。 😄
@arthurschreiber Fwiw、私はそのDuplexPair
実装をhttps://www.npmjs.com/package/duplexpairで公開しましたtls.createSecurePair()
非常に簡単にそっくりにするために、その周りにラッパーを作成できると思いますか?
@addaleax Sweet! ❤️これは素晴らしいことです。これを接続して、後でではなく早く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の交換についてさらに別のショットを行いました。 統合テストは問題ないようで、ノード9でテストされています。https://github.com/joux3/tedious/commit/6d255fbdaa2f9afd388617e6e34815cae95292a0
しかし、私はいくつかの観察を持っています(しかし、おそらくパッチはPRが問題を議論するのに十分ですか?):
Assertion failed: (uv__stream_fd(stream) >= 0), function uv_read_start, file ../deps/uv/src/unix/stream.c, line 1517.
完全にクラッシュするようですclose
ハンドラーがあります) 'あなたの仕事のために@addaleaxに大いに感謝します!
@ joux3は、ノード8で使用する準備ができています-現在のLTSリリースですか? プルリクエストを開く可能性はありますか? 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でプルリクエストを開きました(PR名で課題IDを参照するだけでは不十分なようです...)。 統合テストはノード8に合格しますが、まだやるべきことがいくつかあります。
👍これをできるだけ早く修正するために!
これについて何か進展はありますか? この問題に関する最新情報を入手できれば幸いです。
追跡のためにPR#689をリンクします。
警告がstdoutではなくstderrに送信される世界。 <fail/>
すべてのアップデート?
長い間行ったり来たりした後、これは最終的に(そして適切に) https://github.com/tediousjs/tedious/pull/738を介して修正されました[email protected]
がnpmで利用できるようになりました。 現在next
タグが付けられており、まもなくlatest
タグが付けられるようにします。
皆さんの忍耐とこれを修正するのを手伝ってくれてありがとう! 🙇
最も参考になるコメント
738には修正が含まれており、@ tediousjs / microsoft-contributorsチームの誰かがレビューすると、マージされてリリースされます。