これは奇妙な動作であることに気づき、SQL Serverが生成した自己署名証明書を使用すると、そのように機能するのではないかと思います。
クライアント(Management Studio)with "encrypt connection"オプションセット、クライアントはSQL Server側で自己署名証明書を検証し、自己署名証明書が信頼されていないため失敗します
クライアント(Management Studio)なし '暗号化接続'オプションが設定されているが、SQL Server側でSQL Server構成マネージャーを使用して"Force Encryption"がオンになっている。クライアントは自己署名証明書を検証せず、暗号化された接続で正常に接続します。
サーバー側で暗号化が適用されている場合、クライアントがSQL Serverの自己署名証明書を検証しないのはなぜですか?なぜクライアントは、クライアント側で暗号化が実施されている場合にのみ自己署名証明書を検証するのですか?
サーバー側の暗号化のために証明書認証がクライアント側で行われない場合、CA署名付き証明書を使用する意味は何ですか?
より正確に言うと、クライアント(Mgmt Studio)がserver-side暗号化のみがオンになっているときに、証明書(自己署名/ CA署名)を検証/認証しようとしないのはなぜですか? client-side encryption( "encrypt connection")がオンの場合、クライアントはサーバーから提供された証明書のみを認証/検証するのはなぜですか?
サーバー側の暗号化に使用する(内部CAによって署名された)署名付き証明書を追加しました。これには、クライアントマシンに(信頼されたルートCAに)内部CA証明書をインストールする必要がありますが、私はそれを行いませんでした。ただし、サーバー側の暗号化をオンにしても、クライアント(mgmt studio)は引き続き正常に接続します。
サーバー側で[暗号化を強制する]オプションをオンにすると、クライアントの暗号化仕様に関係なく、トラフィックは暗号化されます(SSCM-> SQL Serverネットワーク構成-> MSSQLSERVERのプロトコル->プロパティ->フラグ->強制暗号化)。信頼できるCAからの証明書をインストールしない場合、SQL Serverは自己署名証明書を使用します。
信頼できるサードパーティが存在しないため、クライアントは自己署名証明書を検証できません。したがって、暗号化(Encrypt=true
)を必要とするクライアントは、接続が自己署名証明書で成功するために証明書が信頼されることを明示的に指定する必要もあります。 TrustServerCertificate=true
は基本的に「はい、リスクは理解していますが、接続します」と言っており、証明書チェーンは検証されていません。
CAが発行した証明書は、信頼できるサードパーティを組み合わせて追加するため、クライアントはTrustServerCertificate=false
を使用して証明書チェーンを検証できます。 TrustServerCertificate=true
とCA発行の証明書(2つ目の質問だと思います)で接続できますが、自己署名証明書がクライアントによって無意識に使用される可能性があるため、これは安全性が低くなります。
ServerSide暗号化のみがオンになっているときに、クライアント(Mgmt Studio)が証明書(自己署名/ CA署名)を検証/認証しようとしないのはなぜですか?
>クライアント側の暗号化(「接続の暗号化」)がオンになっている場合、クライアントはサーバーから提供された証明書のみを認証/検証するのはなぜですか?
サーバーはすべてのクライアントに暗号化されたトラフィックを強制できますが、証明書を検証する責任は常にクライアントにあります。 SSMSおよびその他のクライアントでは、デフォルトの接続設定がEncrypt=false
であることを考慮してください。これは「暗号化されたトラフィックは必要ないので、サーバーの設定や証明書に関係なく接続する」と言っています。 ForceEncryption=true
サーバー設定は、クライアントの要求された暗号化レベルに関係なくトラフィックを暗号化することにより、このデフォルトを強化します。この動作は、 ADO.NETプロバイダーの接続文字列構文ドキュメント からのこの抜粋と一致しています。
アプリケーション設定は、SQL Serverクライアント構成マネージャーによって設定されたセキュリティのレベルを下げることはありませんが、強化する場合があります。
クライアントはそもそも暗号化を要求しなかったため、証明書の検証は行われませんが、SQL Serverでプロビジョニングされた証明書でトラフィックを暗号化することにより、セキュリティが強化されます。クライアントはEncrypt=true
およびTrustServerCertificate=false
を指定して、セキュリティをさらに強化できます。これは、信頼できる証明書が存在することを確認するだけでなく、サーバーにForceEncryption=false
が存在する場合でもトラフィックを暗号化します。
クライアントは証明書の検証をオプトインする必要があります。これは、信頼できる証明書を取得したり、クライアントに証明書をインストールしたり、クライアント接続文字列を変更したりせずに、サーバーから暗号化を強制できるようにするために行われます。製品ドキュメントの 検証なしの暗号化の使用 を参照してください。