こんにちは、誰でも、
タイトルにあるように、ノード10で機能するコードは、ノード12では機能しません。次のように報告されます。
接続が失われました-3540 :ルーチン:ssl_choose_client_version :サポートされていないプロトコル:c :\ ws \ deps \ openssl \ openssl \ ssl \ statem \ statem_lib.c:1922:
{"message": " localhost:1433への接続に失敗しました-ストリームが破棄された後、writeを呼び出すことができません"、 "code": "ESOCKET"}
何か助けはありますか? OSはWindows10 64ビット、SQLServerは201264ビットです
問題が解決しました!
ノード12以降では、構成が次のように変更されました。
const config:ConnectionConfig = {
サーバー: '...'、
認証:{タイプ: 'デフォルト'、オプション:{ユーザー名: '...'、パスワード: '...'}}、
オプション:{...、 encrypt:false }
}
ねえ@ c5soft! 👋
暗号化を無効にすると、ここで問題が「解決」したことを理解しています。 これはユースケースでは許容できるかもしれませんが、暗号化を無効にすることは実際には解決策ではありません。 😅
同様のエラーが発生した場合、これはNode.js 12以降、デフォルトのTLS設定が強化されたためです。 ほとんどの場合、SQLServerはTLS1.2をサポートしていませんが、Node.js 12ではデフォルトで必要です。これは、ノードの起動時にコマンドラインフラグ(例: --tls-min-v1.0
)を使用するか、カスタムを渡すことで変更できます。 cryptoCredentialsDetails
minVersion: 'TLSv1'
または使用する必要のあるTLSバージョンを指定するConnection
コンストラクターのcryptoCredentialsDetails
オプション。
誰かがこれに遭遇した場合に備えて、LDAPJSに基づくノードのactiveDirectory2でも同じことが起こりました。そのオプションをtlsOptionsに追加すると、問題が解決しました。
問題が解決しました!
ノード12以降では、構成が次のように変更されました。
const config:ConnectionConfig = {
サーバー: '...'、
認証:{タイプ: 'デフォルト'、オプション:{ユーザー名: '...'、パスワード: '...'}}、
オプション:{...、 encrypt:false }
}
ありがとう !!!
ねえ@ c5soft! 👋
暗号化を無効にすると、ここで問題が「解決」したことを理解しています。 これはユースケースでは許容できるかもしれませんが、暗号化を無効にすることは実際には解決策ではありません。 😅
同様のエラーが発生した場合、これはNode.js 12以降、デフォルトのTLS設定が強化されたためです。 ほとんどの場合、SQLServerはTLS1.2をサポートしていませんが、Node.js 12ではデフォルトで必要です。これは、ノードの起動時にコマンドラインフラグ(例:
--tls-min-v1.0
)を使用するか、カスタムを渡すことで変更できます。cryptoCredentialsDetails
minVersion: 'TLSv1'
または使用する必要のあるTLSバージョンを指定するConnection
コンストラクターのcryptoCredentialsDetails
オプション。
どうもありがとうございます!
それは私のnestjsプロジェクトで動作します!
nestjsで同じ問題を抱えている人のために。
TypeOrmModule.forRoot({
type: 'mssql',
host: 'localhost',
port: 1433,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
options: {
cryptoCredentialsDetails: {
minVersion: 'TLSv1'
}
}
}),
最も参考になるコメント
問題が解決しました!
ノード12以降では、構成が次のように変更されました。
const config:ConnectionConfig = {
サーバー: '...'、
認証:{タイプ: 'デフォルト'、オプション:{ユーザー名: '...'、パスワード: '...'}}、
オプション:{...、 encrypt:false }
}