5

My application need to establish secure connection with SQL Server 2008. Having enabled 'Force Encryption' in server side, following is my connection string from my C# application.

Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Use Encryption for Data=True;Trust Server Certificate=True;

I did not provision any certificate in server - Hence I gave Trust Server Certificate=True, so that self signed server certificate is not validated.

But the connection is not established with following error.

Database error: [DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error.

Without the two attributes related to security, it works fine.

What do I need to change to get this to work?

4

1 に答える 1

7

オブジェクトを使用すると、 SqlConnection2 つの利点があります。SqlConnectionStringBuilderまず、クラスを使用して接続文字列を構築できるため、接続文字列が適切に構築されることを確認できます。第二に、OLEDB よりもはるかに高速です。

この接続文字列を構築するには...

Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Use Encryption for Data=True;Trust Server Certificate=True; 

... を使用すると、次のSqlConnectionStringBuilderようなコードを記述できます ...

var builder = new SqlConnectionStringBuilder();
builder.DataSource = "172.21.70.94";
builder.Encrypt = true;
builder.TrustServerCertificate = true;
builder.InitialCatalog = emp_test;
builder.PersistSecurityInfo = true;
builder.UserID = "sa";
builder.Password = "***";

var connection = new SqlConnection(builder.ToString());

...Encryptプロパティは、.NET Framework でこの定義を保持します ...

サーバーに証明書がインストールされている場合に、クライアントとサーバーの間で送信されるすべてのデータに対して SQL Server が SSL 暗号化を使用するかどうかを示すブール値を取得または設定します。

...TrustServerCertificateプロパティは、.NET Framework でこの定義を保持します ...

信頼を検証するために証明書チェーンをたどるのをバイパスしながら、チャネルを暗号化するかどうかを示す値を取得または設定します。

したがって、これが最も安全なアプローチであると言えます。.NET Framework が接続文字列を適切に作成することを確認し、それらの定義に基づいて、証明書に関してこれらのプロパティが何を意味するかについての適切な定義セットを取得できます。


ここで、Oracle にも接続するため、選択の余地があまりないため、引き続き OLEDB 接続を構築するのが最善の方法です。しかし、どちらの接続もIDbConnectionand であるため、正しい接続を構築して を返すファクトリしかありませんIDbConnection

これは、コードを変更する必要がないように、SqlConnectionオブジェクトのパフォーマンスと使いやすさ、および の抽象化という両方の世界を最大限に活用できることを意味します。IDbConnection

于 2012-10-19T12:47:16.637 に答える