• システム開発に関わる内容をざっくりと書いていく

接続文字列 TrustServerCertificate でハマるポイント

SQL Server へ接続するとき、証明書エラーで止まって TrustServerCertificate=True を付けたくなる場面がある。開発では楽だが、意味を理解せず本番に持ち込むと「暗号化しているつもりが検証していない」状態になりやすい。

先に結論

  • TrustServerCertificate=True は証明書の検証をスキップする(開発向け寄り)
  • 本番は正しい CA/ホスト名の証明書を用意し、Trust を付けないのが基本
  • Encrypt の既定が環境・ドライバ版で変わることがある。明示指定が安心
  • コンテナ/クラウドでは「サーバ証明書と接続ホスト名の不一致」がよく出る

ハマりどころ

  • ローカルでは通るが Azure/別ホストだけ証明書エラー
  • ドライバ更新後、Encrypt 既定が変わり突然失敗する
  • IP 直指定で繋いでいて、証明書の CN/SAN と一致しない
  • 社内プロキシや中間証明書がクライアントに入っていない
  • 接続文字列とコード側の SqlConnectionStringBuilder で設定が上書きされる

切り分け

  • 例外文言に certificate / SSL / encrypt が出ていないか確認
  • 接続文字列の Encrypt / TrustServerCertificate を明示して再現
  • ホスト名で繋いでいるか、証明書の SAN と一致するか
  • クライアント OS の信頼ストアに中間 CA があるか

運用上の推奨

  • Development だけ Trust を許容し、Staging/Production では禁止する
  • 構成は環境変数や Key Vault に分離し、接続文字列をコミットしない
  • 「とりあえず Trust=True」を本番修正として残さない

ざっくりまとめ

  • TrustServerCertificate は検証スキップ。開発の応急処置
  • 本番は証明書とホスト名を正しく揃える
  • Encrypt/Trust は明示し、ドライバ更新の既定変更に備える

関連記事