Skip to content

Entity Framework Core 7 の接続証明書信頼エラー解決法

問題の概要

Entity Framework Core 7にアップグレード後、SQL Server接続時に次のエラーが発生します:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)

エラー発生条件

  • 開発環境のSQL Server(Developer Edition/LocalDB)
  • 有効なSSL証明書がサーバーにない状況
  • .NET Coreアプリケーションからの接続時

🔍 原因:EF Core 7のセキュリティ強化

Entity Framework Core 7では、SQL Server接続のデフォルト動作が変更されました:

変更前の動作

  • 接続文字列のデフォルト設定: Encrypt=False
  • 開発環境(自己証明書)での接続が可能

変更後の動作

  • 接続文字列のデフォルト設定: Encrypt=True
  • サーバーのSSL証明書が必須
  • クライアントが証明書を信頼する必要あり

公式ドキュメント: EF Core 7 Breaking Changes

🛠️ 解決方法:4つのアプローチ

開発環境において、証明書エラーを解消するための実践的な方法です。

json
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=your_server;Database=your_db;Integrated Security=True;TrustServerCertificate=True;"
  }
}
csharp
var builder = new DbContextOptionsBuilder<YourDbContext>();
builder.UseSqlServer("Server=.;Database=MyDB;Trusted_Connection=True;TrustServerCertificate=True;");

方法1: TrustServerCertificate=Trueを追加(推奨)

  • 最も安全な開発環境ソリューション
  • 証明書チェーンの検証をスキップ
  • 暗号化は維持されるので安全性◎

方法2: Encrypt=Falseを追加

  • 暗号化そのものを無効化
  • 開発環境限定での使用推奨
  • 接続例:...;MultipleActiveResultSets=True;Encrypt=False;

注意

Encrypt=Falseはネットワーク通信を平文にするため、本番環境では絶対に使用しないでください。開発環境限定の回避策です。

方法3: 有効な証明書をインストール

  • 本番環境では必須
  • SSL証明書を取得してサーバーにインストール
  • クライアントが証明機関(CA)を信頼するよう設定

方法4: ランタイム設定(ASP.NET Core)

csharp
builder.Services.AddDbContext<AppDbContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});

✅ 実装ガイド:具体的な手順

ステップ1: 接続文字列の変更

  1. appsettings.json を開く
  2. 接続文字列にTrustServerCertificate=Trueを追加
  3. 保存してアプリケーション再起動
サンプル接続文字列のパターン
json
{
  "ConnectionStrings": {
    // 例1: Integrated Security使用
    "SqlServer1": "Data Source=.;Initial Catalog=MyDB;Integrated Security=True;TrustServerCertificate=Yes",
    
    // 例2: SQL認証使用
    "SqlServer2": "Server=localhost;Database=TestDB;User Id=sa;Password=your_pw;TrustServerCertificate=True"
  }
}

ステップ2: 動作確認

  • Entity Frameworkの操作を実行(DB読み書き)
  • 以前発生していた証明書エラーが解消されていることを確認

⚠️ 重要な注意事項

本番環境における警告

  • TrustServerCertificate=TrueEncrypt=False開発環境限定
  • 本番環境で使用すると重大なセキュリティリスク発生
  • 本番では必ず有効なSSL証明書を導入

開発ベストプラクティス

  1. 接続文字列設定は環境ごとに分離(開発/本番)
  2. 開発用設定はソースコードから除外(.gitignoreで管理)
  3. EF Core 7.0.1以上へのアップデート(安定性向上)

💡 代替ソリューション

  • 証明書作成ツール: dotnet dev-certs コマンド使用
  • ローカルDB切替: LocalDBインスタンスの利用
  • ドライバー更新: Microsoft.Data.SqlClient最新版の確認

まとめ

EF Core 7のセキュリティ強化により、開発環境で証明書エラーが発生する場合、接続文字列にTrustServerCertificate=Trueを追加するのが最適解です。この設定で暗号化を維持しつつ、自己証明書を一時的に信頼できます。

しかし、本番環境ではこの設定を使用せず、必ず SSL証明書を適切に設定・管理 してください。Entity Framework Coreのバージョンアップ時には、公式の破壊的変更ドキュメントを確認することがトラブル回避の鍵です。