CLOVER🍀

That was when it all began.

OpenShift OnlineでSSLエラー(java.security.NoSuchAlgorithmException: EC AlgorithmParameters not available)とか出たら

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を見なくなると思います。