SQL Server は、初期状態でも暗号化接続をサポートしており、「Encrypt=True;TrustServerCertificate=True」を使用することで、暗号化接続を使用することができます。
この際、SQL Server では自己署名証明書が使用されているのですが、この証明書について確認した内容をまとめておきたいと思います。
SQL Server の暗号化で使用される初期状態の証明書について
ドキュメント
SQL Server の暗号化で使用される初期状態の証明書について確認する際には次のドキュメントが参考となります。
- 証明書をインポートして SQL Server への接続を暗号化する
- SQL Server に接続すると、"リモート サーバーから受信した証明書が信頼されていない証明機関によって発行されました" というエラーが表示される
- TLS 1.2 へのアップグレード後に SSL エラーが報告される
基本的な情報については、証明書をインポートして SQL Server への接続を暗号化する から確認できます。
フォールバック証明書
SQL Server ではデータベース エンジンのサービスを起動した際に、信頼できる証明書が設定されていない場合、自己署名証明書 (フォールバック証明書とも言われる) を生成して、暗号化接続で利用します。
この際使用されている証明書は、SQL Server 2025 の場合は次のようになっています。
- Subject: CN=SSL_Self_Signed_Fallback
- 有効期間: 30 年
- SignatureAlgorithm: sha256RSA
- PublicKeyAlgorithm: RSA
- RsaKeyBits: 3072
フォールバック証明書が使用されている場合「A self-generated certificate was successfully loaded for encryption.」というメッセージが ERRORLOG に出力されていますので、このメッセージが出力されているかで、フォールバック証明書が使用されているかを確認することもできます。
自動的な証明書の選択
SQL Server では、SQL Server 構成マネージャーから証明書を設定することができます。
証明書をブランクにしてると、フォールバック証明書が使用されるのですが、アクセス許可を持つ SQL Server 証明書の動作 に記載されている次の動作が行われています。
- 証明書には、マシンの FQDN などサブジェクトがあります
- 証明書をローカル・コンピュータの証明書ストアにインストールする。
- SQL Server サービス アカウントには、証明書の秘密キーへのアクセス権を付与します
明示的に使用する証明書を指定していなくても、証明書ストアから使用できる証明書の存在が確認できた場合は、自動的に該当の証明書を使用するというような挙動となっているため、環境によってはフォールバック証明書以外の証明書が使用されている可能性があります。
フォールバック証明書以外が使用されている場合「The certificate [Cert Hash(sha1) "<証明書拇印>"] was successfully loaded for encryption.」というメッセージが ERORLOG に出力されていますので、このメッセージからどの証明書が使用されているのかを確認することができます。
Azure SQL Database の暗号化接続で使用される証明書について
Azure SQL Database でも暗号化接続をデフォルトで使用することができますが、この証明書としてどのような証明書が使用されているのかが気になったので、この機会に確認をしておきました。
Azure SQL Database の場合、次のような証明書が使用されているようです。
- Subject: CN=<コントロールリング>.database.windows.net, O=Microsoft Corporation, L=Redmond, S=WA, C=US
- 有効期間: 6 か月
- SignatureAlgorithm: sha384RSA
- PublicKeyAlgorithm: RSA
- RsaKeyBits: 2048
- ルート証明機関: DigiCert Global Root G2
SQL Database では「<論理サーバー名.database.windows.net>」というサーバー名で接続を行いますが、この DNS 名は CNAME となっており、実際の参照先は SQL Database のコントロールリングが使用されます。
コントロールリング (制御リング) については次のドキュメントから情報を確認できます。
Azure SQL Database の場合は、コントロールリング向けの証明書を使用して暗号化接続が実施されているようです。