【エラー解決方法】SSL通信でサーバーとの接続ができない!? を解決する方法
目次
JavaでSSL通信をしようとして、サーバーとの接続ができない事象が起きました。
相手のサーバーまでは到達しているようです。
STS(eclipse)を使ったローカル環境からは接続できていることを確認しています。
エラー内容
SSL通信で相手先サーバー接続できない。
Received fatal alert:insufficient_security
いろいろと探してみると、以下のようなことを言っているようです。
insufficient_security クライアントがサポートしている暗号よりも、よりセキュアな暗号をサーバーが要求しているため交渉に失敗したときに、handshake_failure を返す代わりにこれを返す。このメッセージは常に fatal である。
エラー発生時の環境
エラー発生時の開発環境は以下のとおりです。
- 言語
- Java1.7.0_51
原因
JavaにはCipherという暗号化/復号化を行うクラスが用意されていますが、デフォルトのままだとAESの鍵の長さは128bitしか使えません。
相手のサーバーは256bitの鍵を要求していました。
以前別のプロジェクトを担当した際に、ローカル環境のJavaのセキュリティ ポリシーファイルを変更して256bit対応にしていました。
そのことを忘れていたため、サーバーにセキュリティ ポリシーファイルの変更をしていなかった。
解決方法
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6からファイルをダウンロードし、サーバーのポリシーファイルに上書きをする。
その後サーバーを再起動する。
まとめ
自分のローカル環境がどのような状態にあったのかを把握していなかったのが原因です。
新しくサーバーを作る際には、どのような環境が必要なのかを事前に確認しながら進めることを忘れないようにしたいと思います。