質問者
暗号化された通信を強制する設定のSQLサーバーにjtdsドライバで接続するには

質問
-
Windows Server 2016のMicrosoft SQL Server2016に対して、jtdsドライバで接続しようとしてます。
4つのSQLサーバーのうち3つは問題なく接続できたのですが、1台のみ不可です。
接続する際の接続文字列は
jdbc:jtds:sqlserver://SERVER:1433;database=TestDB;domain=WIN-DOMAIN;user=userid;password=password;useNTLMv2=true
他3台と、失敗する1台の違いとして、「暗号化接続を強制する」設定があります。
1台のみ、暗号化された接続を強制する設定となっております。
https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/enable-encrypted-connections-to-the-database-engine?view=sql-server-ver15#to-configure-the-server-to-force-encrypted-connections
暗号化された接続を強制するサーバーを構成するには
jtdsドライバでの暗号化通信ではsslオプションがあるそうです。
http://jtds.sourceforge.net/faq.html
sslオプション(ssl=require,ssl=requiest)を接続文字列追加してテストしました。
jdbc:jtds:sqlserver://SERVER:1433;database=TestDB;domain=WIN-DOMAIN;user=userid;password=password;ssl=request;useNTLMv2=true
jdbc:jtds:sqlserver://SERVER:1433;database=TestDB;domain=WIN-DOMAIN;user=userid;password=password;ssl=require;useNTLMv2=true
結果はいずれもエラー終了しました。終了メッセージは
Exception in thread "main" java.sqlSQLException: Network error IOException: connection reset
証明書をクライアントにインストールする必要があるのかと思い、以下を行いました。
1).SQLサーバー上の証明書をエクスポート
サーバーのコンソール→「証明書(ローカルコンピューター)」→「個人」にある証明書をエクスポート
2).証明書をクライアントにインポート
エクスポートしたファイルをクライアント保存
クライアントのコンソール→「証明書(ローカルコンピューター)」→「個人」に、インポート
上記を行って接続文字列を利用して接続テストを行いましたが同じエラーでした。
何か原因と考えられることや対処方法がありましたら教えてください。
某ツールを利用して、システム内のサーバー情報を収集するということをするのですが、そのツールで、SQLサーバーの情報を収集する際にjtdsドライバを利用します。
ツールベンダーにも問い合わせしているのですが、今のところ原因不明のためこちらにも質問させていただきました。
すべての返信
-
「暗号化接続を強制する」設定を外した場合は、正常に SQL Server に接続することはできますでしょうか?
通信の暗号化設定として、サーバー主体の暗号化 (強制的に暗号化) と、クライアント主体の暗号化があり、今回 サーバー主体の暗号化が有効になっている場合、クライアント側で暗号化を強制するとエラーが発生する可能性があります。
[MSSQLSERVER のプロトコルのプロパティ] ダイアログ ボックス ([フラグ] タブ)
データベース エンジンへの暗号化接続の有効化
https://docs.microsoft.com/ja-jp/sql/tools/configuration-manager/protocols-for-mssqlserver-properties-flags-tab?view=sql-server-ver15
+ [強制的に暗号化]
https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/enable-encrypted-connections-to-the-database-engine?view=sql-server-ver15
-
katsu0413さん、こんにちは。フォーラムオペレーターのクモです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
まず、サーバーとクライアントの両方で暗号化オプションを有効にすることはお勧めしません。
これにより、不要なネットワークデータのやり取りが増加し、接続確立フェーズに大幅な遅延が発生し、TLS / SSL接続を確立できなくなる可能性があるからです。
SQL Server構成マネージャーで[暗号化を強制する]オプションを[はい]に設定すると、クライアントが暗号化を要求するように構成されているかどうかに関係なく、SQL Serverはクライアントとの間で送信されるすべてのデータパケットを暗号化する必要があります。
強制暗号化がSQL Server側で有効になっていて、クライアントで有効になっていない状態で、証明書を手動でSQL Serverに構成すると、クライアントが証明書を信頼していない場合でも、クライアントはこの証明書を使用してSQL Serverと正常に通信できるため、証明書をインポートする必要はありません。
SQL Server側で「暗号化を強制する」を「はい」に設定する場合は、 ssl = offで接続することはできますでしょうか?
クライアントがサーバー証明書を信頼して接続する必要がある場合は、クライアントの暗号化オプションを構成し、サーバー証明書のルート証明書、またはサーバー証明書をClient's Certificates > Trusted Root Certification Authorities ファイルフォルダーにインストールする必要があります。
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
-
クモさん、ありがとうございます。 > SQL Server側で「暗号化を強制する」を「はい」に設定する場合は、 ssl = offで接続することはできますでしょうか? →接続できませんでした。 なお、SQL Server側で「暗号化を強制する」を一時的に「いいえ」に設定し、ssl = offとした場合は接続できます。 >クライアントがサーバー証明書を信頼して接続する必要がある場合は、クライアントの暗号化オプションを構成し、サーバー証明書のルート証明書、またはサーバー証明書をClient's Certificates > Trusted Root Certification Authorities ファイルフォルダーにインストールする必要があります。 →こちらはまだやってないのでテストしようと思います。 手順は、上記、最初に私が記載した手順1)2)を行う(ただし、2)のインポート先が「個人」ではなく「信頼されたルート証明書」)で良いでしょうか? なお、jtdsドライバの原因(jtdsドライバ自体のバグ)の可能性もあるので、jtdsドライバの調査をドライバ提供元に並行して問い合わせております。
-
katsu0413さん、こんにちは。フォーラムオペレーターのクモです。
ご返信いただきありがとうございます。
>→接続できませんでした。なお、SQL Server側で「暗号化を強制する」を一時的に「いいえ」に設定し、ssl = offとした場合は接続できます。
これは証明書に関連しているようです。手動で構成した証明書を使用していますか?エラーログから確認できます。
クライアントから暗号化されたデータ転送を要求する場合、クライアントはサーバーが使用する証明書を信頼しなければなりません。そうでない場合、接続を確立できません。
以下の方法を試してください:
1、クライアント証明書の信頼されたルート証明機関フォルダーに、サーバー証明書のルート証明書をインストールします。一般に、サーバー証明書の証明機関が信頼されることを確認できる場合は、この方法をお勧めします。
2、信頼されたルート証明機関フォルダーに、サーバー証明書を直接インストールします。サーバー証明書のルート証明書が安全かどうかがわからない場合は、この方法をお勧めします。サーバーの証明書が自己署名されている場合は、この方法しか使用できません。
この記事をご参照ください。
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~