最初sbtにissueたてるか、などとtwitterで言っていたけれど、そんなに困っている人多くなさそうだし、blogにだけまとめておけばいいか、という気持ちになったので、ひとまずまとめておく。
まず、TLS 1.1以前のサポート打ち切りました、という記事は以下。
主にビルド時のことに焦点をおいて書きますが、別に実行時にmaven centralやその他TLS 1.1以下をサポートしなくなったサイトにhttpsでアクセスするプログラムは、同様の問題が起きるはずです。
また、自分は普段ほぼsbtしか使っていませんが、gradleやmavenやantなど全部のJava製のビルドツールで同じはず?
Java6
TLS 1.2をサポートしていないらしいので、基本的にJava 6上でビルドツールを動かして、httpsでライブラリをダウンロードするのは不可能になった?(なにか裏技があってTLS 1.2で動かす方法があるのかどうか?は知らない) 何から何までJavaの標準に全く頼らずにTLS 1.2以降を使用してhttps接続する奇特なライブラリというか方法があれば不可能ではないのだろうか?(よく知らずに適当に言っている)
maven centralは、これ書いている現在(2018年7月)、httpsではなく、httpでのダウンロードはまだサポートしているので、使っているビルドツールがhttpでダウンロードするように設定できるならば、その方法ではまだ使えそう。
Java7
oraclejdk7はデフォルトではTLS 1.1をサポートしていない気がする。以下の引数を付与すると可能っぽい
-Dhttps.protocols=TLSv1.2
詳細調べていないけど、openjdk7(の最新版?)はtravis-ci上では、上記引数を指定しなくても、デフォルトでTLS 1.2をサポートしているみたいでした
Java8以降
デフォルトでTLS 1.2をサポートしているようなので、特に何もしなくて問題なし。
その他余談など
- これはhttpsでのダウンロードに問題があるだけなので、どうしてもJava6などのレガシー環境で動かす必要がある場合は、一時的にJava8に切り替えてライブラリをダウンロードしてローカルのキャッシュに残し、そのローカルのキャッシュをJava 6で参照するようにすれば、どうにかなるはず(?)
- sbtは動的にJavaのversionを切り替える機能が1.2から入るらしいので、それ使うといい感じにJava6やJava7のビルドも頑張れるかもしれない(頑張る必要がある辛い境遇の人が、それほど存在しないことを願うが https://developer.lightbend.com/blog/2018-07-02-sbt-1-2-0/ )
- ちなみに「maven centralはともかく、bintrayなんてよく知らないし、たぶん使っていないよ」という人向けですが、少なくともsbt(の0.13)はそこに必ず依存しています