SNAC アプリケーションをアップグレードした後の "信頼されていない機関によって証明書チェーンが発行されました" エラー

概要

この記事は、SQL Server Native Client 11.0 (SNAC) から Microsoft OLE DB Driver 19 または Microsoft ODBC Driver 18 for SQL Server にデータベース アプリケーションをアップグレードするときに発生する証明書チェーン信頼エラーのトラブルシューティングに役立ちます。

SNAC 11.0 から新しいドライバーにアップグレードすると、アプリケーションが証明書チェーン信頼エラーで SQL Server に接続できない場合があります。 この問題は、新しいドライバーが既定で 暗号化 を有効にし、証明書の検証が必要であるのに対し、SNAC が既定で無効にしているために発生します。 このエラーを解決するには、クライアントが信頼する証明書をプロビジョニングするか、この記事の説明に従って Encrypt、 Use Encryption for Data、または TrustServerCertificate 接続設定を調整します。

ドライバーとクライアントに適用される暗号化キーワード

暗号化を制御するキーワードは、ドライバーと、アプリケーションが接続文字列を構築する方法によって異なります。 ドライバーが認識しないキーワードを使用すると、証明書エラーではなく "キーワードがサポートされていません" エラーで接続が失敗します。

ドライバーと接続方法 暗号化キーワード 証明書信頼キーワード
OLE DB Driver 19、プロバイダー文字列 (IDBInitialize::Initialize) Encrypt TrustServerCertificate=yes または no
OLE DB Driver 19、ADO、または初期化文字列 (IDataInitialize) Use Encryption for Data Trust Server Certificate=true または false
ODBC ドライバー 18、接続文字列、または DSN Encrypt TrustServerCertificate=yes または no
  • OLE DB Driver 19:Optional、Mandatory (既定)、およびStrictを受け入れます。 下位互換性のために、バージョン 18 の値も受け取ります。ここで、 no と false は Optionalにマップされ、 yes と true は Mandatoryにマップされます。
  • ODBC ドライバー 18:yes/mandatory (既定値)、no/optional、およびstrictを受け入れます。
  • プロバイダー文字列:TrustServerCertificate=yesまたはTrustServerCertificate=noを使用します。
  • ADO および初期化文字列:Trust Server Certificate=trueまたはTrust Server Certificate=falseを使用します。
  • 厳密モード: 常にサーバー証明書を検証し、証明書の信頼設定を無視します。

プロバイダー文字列で TrustServerCertificate=true を使用すると、無効な値エラーが返される可能性があります。

完全なキーワード・リストについては、OLE DB Driver for SQL Serverでの接続文字列キーワードの使用、MSOLEDBSQL のメジャー・バージョンの相違点、および DSN および接続文字列キーワードおよび属性を参照してください。

OLE DB Driver 19 および ODBC Driver 18 の証明書チェーン エラー、原因、および解決策

アップグレードしたドライバーのタブを選択します。 各タブには、表示されるエラー メッセージ、発生した理由、および推奨される順序で解決策が表示されます。

SQL Server Native Client 11.0 (Provider=SQLNCLI11) から Microsoft OLE DB Driver 19 for SQL Server にアップグレードすると、次のエラー メッセージが表示され、接続の試行が失敗する可能性があります。

[Microsoft OLE DB Driver 19 for SQL Server]: クライアントが接続を確立できません

[Microsoft OLE DB Driver 19 for SQL Server]: SSL プロバイダー: 証明書チェーンは、信頼されていない機関によって発行されました。

Microsoft OLE DB Driver 19 にアップグレードするときの証明書チェーン信頼エラーの原因

このエラーは、クライアント が信頼していない証明機関 (CA) によって発行されたため、クライアント コンピューターが SQL Server 証明書の信頼性を検証できないことを示します。

これらのエラーは、次の両方の条件に該当する場合に発生します。

  • SQL Server インスタンスの Force 暗号化 設定は No に設定されます。

  • クライアント接続文字列で暗号化プロパティの値が明示的に指定されていないか、DSN で 暗号化 オプションが明示的に設定または更新されませんでした。

このエラーは、クライアント ドライバーの既定の動作が変更されたために発生します。 古いバージョンのクライアント ドライバーでは、既定ではデータ暗号化が OFF であると想定されています。 新しいドライバーでは、この設定が既定で オン になっていることを前提としています。 データ暗号化は ON であるため、ドライバーはサーバーの証明書の検証を試み、失敗します。

Microsoft OLE DB Driver 19 にアップグレードするときの証明書チェーン信頼エラーの解決策

クライアントが信頼する証明機関から、SQL Server インスタンスに TLS 証明書をプロビジョニングします。 クライアントが信頼されたルート CA へのチェーンを構築できるように、サーバーが必要な中間証明書を提供していることを確認します。 この方法では、暗号化と証明書の検証を有効にしたままエラーを解決します。 詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。

検証なしでサーバー証明書を信頼する

検証可能な証明書をすぐにプロビジョニングできない場合は、証明書の検証をスキップするようにドライバーに指示します。 使用するキーワードは、アプリケーションが接続文字列を構築する方法によって異なります。

  • プロバイダー文字列に、 TrustServerCertificate=yesを追加します。
  • ADO または初期化文字列に、 Trust Server Certificate=trueを追加します。

この設定では、それ自体で暗号化は有効になりません。 接続が暗号化されたときに証明書の検証をスキップするようにドライバーに指示します。そのため、接続は敵対者の中間攻撃に対して脆弱になります。 一時的な措置としてのみ使用してください。 Strict暗号化モードでは、ドライバーはこの設定を無視し、常に証明書を検証します。

注記

現在、MSOLEDBSQL19 では、暗号化と信頼された証明書を使用せずにリンク サーバーを作成することはできません (自己署名証明書では不十分です)。 リンク サーバーが必要な場合は、サポートされている既存のバージョンの MSOLEDBSQL を使用します。

暗号化キーワードを省略可能に設定する

ドライバーが検証済みの証明書を必要としないように、暗号化設定を変更します。 使用するキーワードは、アプリケーションが接続文字列を構築する方法によって異なります。

  • プロバイダー文字列で、 Encrypt=Optionalを設定します。
  • ADO または初期化文字列で、 Use Encryption for Data=Optional設定します。

OLE DB Driver 19 の既定値は Mandatory。 接続文字列で既にMandatory、yes、またはtrueが指定されている場合は、値を Optional に変更します。 接続文字列で値が指定されていない場合は、キーワードを追加します。 この変更により、バージョン 18 の暗号化動作が復元され、接続のセキュリティが低下します。

詳細については、「 OLE DB での暗号化と証明書の検証」を参照してください。

暫定措置として OLE DB Driver 18.x を使用する

Microsoft OLE DB Driver for SQL Server 18.x では既定で暗号化が有効にされないため、この変更の影響を受けません。 このオプションは一時的なものとして扱い、OLE DB Driver 19 への移行を計画します。 Microsoft OLE DB Driver for SQL Server の リリース ノートからドライバーをダウンロードできます。