JavaのプログラムからSQLserverにつながらなくなった、という話があったので調査。
Javaのプログラムの吐いているエラーログにはSSLv3とかTLS1.1で繋がらない、っていうのがありました。
接続先のSQLserverのサーバ機は、2012終息対応で2019にしました。
ついでに、TLS1.2だけにしました。
繋がらないのはそのせいで間違いないでしょう。
JavaはJava7を未だに使っているらしい。。。2015年に終了してるのではなかったろうか。
検証のため、TLS1.2だけにした2019にSQLServerをインストールして、Java7とJava8をインストール。sqljdbc41.jarを落としてきて、SQLServerに接続してここにある「ネットワークの暗号化を確認する」を実行するJavaプログラムを用意しました。
用意した、と言ってもこちらのほぼマルパクリです。ありがとうございます。
(CLASSPATHの設定方法がよくわかってなかったので、難航しました。
set CLASSPATH=.;C:\sqljdbc41.jar のように最初に.;が必要だった。
Javaプログラム本体へのPATHが必要、ということかな。)
WireSharkでlocalhostの通信を観察していると、
Java7:TLS1.1でClientHeloを行っているが応答がないので終了
Java8:TLS1.2でClientHeloを行ってなんか送って、そのあと平文で通信
という状態でした。
SQLは平文で通信するくせに、最初だけ暗号通信・・・。
そうか、IDとパスワードは暗号化しているのか。なるほど。
「Java8使えや」で終了にしよう。
.Net3.5が要るらしい。 orz 一回目のインストールの際に「.Net3.5が必要」ってダイアログが山ほど出てきた。 .Net3.5が必要な場合のエラーダイアログはどうして「ダウンロードしてインストールせよ」なんだろう? 参考にした http://otndnld.oracle.co.jp/easy/oracle11gr1/windows/pdf/SelfStudy_01_win.pdf だと、LISTNERの追加設定(?)が必要そうに書いてあるけど、やってみたら「すでに作成済み」ってなる。 それを信じて進めてみたらどうにもうまくいかない。。。 OracleDBをGUIで操作しよう、っていうのが間違いのようか気がする (逆にSQLserverをCLIでやるのは狂気の沙汰だと思う)。 一旦、アンインストールすることにして、スタートメニューにある「Universal Installer」 を実行してアンインストールしようとしたら「batファイルを実行せよ」というダイアログが。 ググりかたが悪かったのか、 「アンインストールはUniversal Installerからしかないぜ。その他の方法はどーなっても知らないぜHAHAHA」(意訳) と書いてるOracleさんしか見つからない。 どっちを信じたらとも思ったが、目の前のほうが正しいだろうという考えに従いそのバッチ を実行しました。(Universal Installerさんは何度やっても消そうともしてくれないし) バッチ実行後、しばらく放置したら終わったらしい。 Oracleさんがインストールされていたっぽいディレクトリもだいたい消えていた。 消えたよね?ってことで一度再起動してから、Oracle11gのインストールを再び実行。 エラーは出ずに無事終了。 (.Net3.5がインストール済みだったからかな??) sqlplus / as sysdba は問題ない。でも、別PC(Linux機)からの接続はNG。 lsnrctl status コマンドの実行結果から、やはりlocalhost以外からの接続はLISTENしてない模様。 listener.oraをちょっと修正して、LISTNERサービスを再起動。 lsnrctl status を再度実行すると、IPアドレスの分も表示されたので、外部からも接続できるだろう...
コメント
コメントを投稿