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)。
正如前面提到的here这可以通过降级加密或安装JCE来解决 - 第一个是我不想做的事情,后者在heroku上是不可能的(afaik)。
答案 0 :(得分:18)
不确定它是否适用于Heroku,但this resolves the issue在我当地的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
答案 1 :(得分:3)
Heroku开发中心现在有这篇文章:"Customizing the JDK"。
在某些情况下,需要将文件与JDK捆绑在一起,以便在运行时JVM中公开功能。例如,为了利用更强大的加密库,通常会在JDK中添加无限强度的Java Cryptography Extensions(JCE)。为了处理这种情况,Heroku会将应用程序在.jdk-overlay文件夹中指定的文件复制到JDK的目录结构中。
以下是如何将JCE文件添加到您的应用中:
在应用程序的根目录中,创建一个.jdk-overlay
文件夹
将JCE local_policy.jar
和US_export_policy.jar
复制到.jdk-overlay/jre/lib/security/
提交文件
$ git add .jdk-overlay
$ git commit -m“自定义JCE文件”
部署到Heroku
$ git push heroku master
答案 2 :(得分: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
这是因为不同的javas有不同的flavas ......我会让自己出去。