21

Rails4は、デフォルトで暗号化されたCookieセッションストアを使用します。アプリがCookieを暗号化しようとすると、次のエラーが発生します:OpenSSL::Cipher::CipherError: Illegal key size: possibly you need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your JRE(stacktrace:https ://gist.github.com/8ba56b18060ae30e4d44 )。

ここで説明したように、これは暗号化をダウングレードするかJCEをインストールすることで回避できます。前者は私が本当にやりたくないことであり、後者はherokuでは不可能(afaik)です。

4

3 に答える 3

18

Heroku で動作するかどうかはわかりませんが、ローカルの Jrubyでは問題が解決します。

config/initializers/unlimited_strength_cryptography.rb を作成します。

if RUBY_PLATFORM == 'java' # Allows the application to work with other Rubies if not JRuby
  require 'java'
  java_import 'java.lang.ClassNotFoundException'

  begin
    security_class = java.lang.Class.for_name('javax.crypto.JceSecurity')
    restricted_field = security_class.get_declared_field('isRestricted')
    restricted_field.accessible = true
    restricted_field.set nil, false
  rescue ClassNotFoundException => e
    # Handle Mac Java, etc not having this configuration setting
    $stderr.print "Java told me: #{e}n"
  end
end
于 2013-11-15T05:01:09.747 に答える
3

Heroku Dev Center には、「JDK のカスタマイズ」という記事があります。

ランタイム JVM で機能を公開するために、ファイルを JDK にバンドルする必要がある場合があります。たとえば、より強力な暗号化ライブラリを利用するために、無制限の強度の Java Cryptography Extensions (JCE) が JDK に追加されることがよくあります。このような場合に対処するために、Heroku は .jdk-overlay フォルダー内のアプリによって指定されたファイルを JDK のディレクトリ構造にコピーします。

JCE ファイルをアプリに追加する方法は次のとおりです。

  1. アプリケーションのルート ディレクトリに、.jdk-overlayフォルダーを作成します。

  2. JCElocal_policy.jarをコピーUS_export_policy.jarして.jdk-overlay/jre/lib/security/

  3. ファイルをコミットする

    $ git add .jdk-overlay
    $ git commit -m "カスタム JCE ファイル"

  4. Heroku にデプロイする

    $ git push heroku マスター

于 2013-08-09T14:17:11.873 に答える
1

Leonsのアプローチを使用して、これは本番環境での問題を解決しましたが、救助なしで開発を中断しました。

# config/initializers/unrestricted_crypto.rb
begin # Enable 'restricted' cipher libraries on crippled systems
  prop = Java::JavaxCrypto::JceSecurity.get_declared_field 'isRestricted'
  prop.accessible = true
  prop.set nil, false
rescue NameError
end

ジャバが違えばフレーバも違うから…

于 2013-11-27T14:26:55.410 に答える