53574
SQL Server 2000(OS:Windows 2000 SP4)にあるDBがあり、そのDBはリンクサーバーでSQL Server 2012
SP4(OS:Windows Server 2012 R2)にアクセスしたいです。

個人の経験ですが、以前は2000から2012 SP2?にはアクセスができたと思うのですが、先程2012 SP4に **SQLクエリアナライザー**
でアクセスしようとすると **SSLセキュリティエラー** が表示されます。  
原因と解決方法を教えてください。  
よろしくおねがいします。

[![](https://i.stack.imgur.com/rjY8t.png)](https://i.stack.imgur.com/rjY8t.png)
CC BY-SA 4.0
2019-03-20T04:21:24.483
53572
2019-03-20T07:35:45.127
2019-03-20T06:10:29.140
12388
12388
question
windows sql-server ssl
SQL Server 2000から2012 SP4をリンクサーバーによる参照について
[Microsoft SQL Server 用の TLS 1.2 のサポート](https://support.microsoft.com/ja-
jp/help/3135244/tls-1-2-support-for-microsoft-sql-
server)（[英語](https://support.microsoft.com/en-us/help/3135244/tls-1-2-support-
for-microsoft-sql-server)）によると、SQL Server 2012 SP3の途中でTLS 1.2サポートが追加され、SQL
Server 2012 SP4には初めから組み込まれていたようです。その上で、

> Are customers who are not using SSL/TLS affected if SSL 3.0 and TLS 1.0 are
> disabled on the server?
>
> Yes. SQL Server encrypts the username and password during login even if a
> secure communication channel is not being used. This update is required for
> all SQL Server instances that are not using secure communications and that
> have all other protocols except TLS 1.2 disabled on the server.

とのことで、TLS 1.2有効化と連動してTLS 1.0以下の無効化が行われているようです。

ですので、SQL Server 2000がTLS
1.0以下を使用している場合は接続エラーになるはずです。参考までに、Windowsに搭載されている[TLSライブラリのバージョン状況](https://docs.microsoft.com/en-
us/windows/desktop/SecAuthN/protocols-in-tls-ssl--schannel-ssp-)ですが、

> Windows Vista/Windows Server 2008： TLS 1.0まで  
>  Windows Server 2008 with Service Pack 2 (SP2)： TLS 1.2まで（TLS 1.1以降は無効化）  
>  Windows 7/Windows Server 2008 R2： TLS 1.2まで（TLS 1.1以降は無効化）  
>  それ以降のバージョン：TLS 1.2まで

となっています。[ごにょごにょ](https://github.com/ffftp/ffftp/wiki/TLS-1.2)するとXP /
VistaでもTLS 1.2を利用できます。なお、Windowsに搭載されているTLSライブラリはSSL 2.0とTLS
1.2の両方を有効化すると失敗するため、互換性に注意が必要です。

* * *

大前提として、SQL ServerにはTLSライブラリは含まれていません。SQL
ServerはWindowsに搭載されているTLSライブラリを呼び出しているに過ぎません。

  * Windowsに当該バージョンのTLSライブラリがインストールされていて、
  * Windows側で明示的に無効化されておらず、
  * SQL Server側が有効化する

全てが成立してはじめてTLS当該バージョンで通信が可能となります。その上で、接続元クライアントと接続先サーバーでバージョンの一致（ネゴシエーション）しなければ接続できません。

今回の場合、接続元が「SQL Server 2000(OS:Windows 2000 SP4)」とのことで、Windows Vista以前なのでTLS
1.1以降がそもそもインストールされていません。ですので、利用できてもTLS 1.0までとなります。  
また接続先が「SQL Server 2012 SP4(OS:Windows Server 2012 R2)」とのことで、OSとしてはSSL
2.0以降がインストール済みかつSSL 3.0以降が有効です。ところが、前述の通り、SQL ServerとしてはTLS 1.2を有効化するとともにTLS
1.0以下を無効化しています。  
このため、SQL Server 2000はTLS 1.0以下を要求し、SQL Server 2012 SP4はTLS
1.1以降を要求するため、ネゴシエーションに失敗し、接続できないことでしょう。
CC BY-SA 4.0
2019-03-20T04:53:31.040
53574
2019-03-20T07:35:45.127
2019-03-20T07:35:45.127
4236
4236
53572
answer