HerokuからOpenShift Onlineに移行して、ちょっとハマったのがSSLのエラーでした。
まさに、以下の内容でした。
OpenJDK on OpenShift: “NoSuchAlgorithmException: EC AlgorithmParameters not available”
http://stackoverflow.com/questions/28999410/openjdk-on-openshift-nosuchalgorithmexception-ec-algorithmparameters-not-avai
OpenShift OnlineはOpenJDKで動いているようなのですが、この時に上記のアルゴリズムが見つからなくてエラーになるという…。
自分が見たスタックトレースは、こんな感じ。
2015-04-02 11:31:01,490 ERROR [stderr] (Worker-3) Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: java.security.NoSuchAlgorithmException: EC AlgorithmParameters not available 2015-04-02 11:31:01,491 ERROR [stderr] (Worker-3) at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 2015-04-02 11:31:01,491 ERROR [stderr] (Worker-3) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1937) 2015-04-02 11:31:01,492 ERROR [stderr] (Worker-3) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1894) 2015-04-02 11:31:01,493 ERROR [stderr] (Worker-3) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1877) 2015-04-02 11:31:01,495 ERROR [stderr] (Worker-3) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1398) 2015-04-02 11:31:01,495 ERROR [stderr] (Worker-3) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
対処方法はだいたい上記のstackoverflowに載っている通りなのですが、ちょっとコマンドが違ったようなのでそこを書いておきます。
まずは、OpenShift Onlineの該当のGearにSSHログインして、ファイルを作成します。
$ vi $OPENSHIFT_DATA_DIR/override_security.properties
中身はこのように。
jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH
この時、作ったファイルのフルパスを取得しておきます。
find $OPENSHIFT_DATA_DIR/override_security.properties
とかで。
あとは、rhcを使って以下のように環境変数を設定します。
$ rhc env-set JAVA_OPTS_EXT='-Djava.security.properties=file:[取得した$OPENSHIFT_DATA_DIRのパス]/override_security.properties' --app [アプリ名]
stackoverflowでは「rhc env set」と書かれていましたが、実際には「rhc env-set」でした。あと、stackoverflowでは「-a [Gear名]」を指定していますが、今回は「-app」でアプリケーション名を指定しました。
あとはGearに乗っているアプリケーションサーバを再起動すれば、変更が反映されてNoSuchAlgorithmExceptionを見なくなると思います。