概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
だいぶ前のバージョンのSQL SERVERに接続しようとDataGripでデータソース設定をしたところ
Cannot connect to a database because of SSLHandshakeException
ってエラーが出て接続できないパターンがありました。
原因と解決方法については、JetBrainsさんのドキュメントで記載されています。
上を見るとやり方も書いてあるのですが、原因としてはJava側のセキュリティポリシーにて、TLS1.0, TLS1.1が無効化されていたからでした。
セキュリティポリシーについては以下に記載があります。
https://www.java.com/en/jre-jdk-cryptoroadmap.html
んで、解決方法ですが、以下のようにします。以下はSQL SERVERの場合の話です。
- custom.java.security (たぶんファイル名も何でも良い)というファイルをどこかに作る。
ファイルの内容は以下のようにします。
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \ include jdk.disabled.namedCurves
- DataGripのデータソースの詳細タブ(Advanced) のところに VMオプションを指定できるフィールドがあるので以下を設定する。
-Djava.security.properties=上で作成したcustom.java.securityファイルのフルパス
- メインメニューの「ファイル」→「キャッシュの破棄」から再起動する
これで再起動後は警告が出ますが、接続できるようになりました。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。