You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny连接数据库出现java.lang.RuntimeException: Illegal key size报错求助

问题解决:java.security.InvalidKeyException: Illegal key size

这个报错的核心原因是Java默认的加密密钥长度限制——JCE(Java Cryptography Extension)默认只允许128位以内的加密密钥,当你的数据库连接用到了更长的密钥(比如AES-256)时,就会触发这个错误。你在RStudio Server里能正常运行,说明RStudio使用的Java环境已经解除了这个限制,但Shiny Server或root终端使用的Java环境没有配置对应的无限制政策文件。

解决步骤:

  1. 确认目标Java环境路径

    • 以root身份在终端执行:
      java -version
      which java
      
      记录输出的Java版本和安装路径(比如/usr/lib/jvm/java-8-openjdk-amd64/)
    • 对于Shiny Server,可在你的Shiny应用代码中临时添加一行:
      print(Sys.getenv("JAVA_HOME"))
      
      重启Shiny Server后查看日志,获取它使用的Java环境路径
  2. 获取对应版本的JCE无限制政策文件

    • Java 8及以下:需要手动下载「JCE Unlimited Strength Jurisdiction Policy Files」(注意匹配你的Java主版本)
    • Java 9及以上:默认已经移除了密钥长度限制,若仍报错,检查是否是定制版JRE保留了限制,可跳过手动下载,直接看下一步验证
  3. 替换JCE政策文件

    • 进入Java环境的lib/security目录,比如:
      cd /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security
      
    • 备份原有文件:
      cp local_policy.jar local_policy.jar.bak
      cp US_export_policy.jar US_export_policy.jar.bak
      
    • 将下载的无限制政策文件中的local_policy.jar和US_export_policy.jar复制到该目录
    • 设置正确的文件权限:
      chmod 644 local_policy.jar US_export_policy.jar
      chown root:root local_policy.jar US_export_policy.jar
      
  4. 验证修复效果

    • 以root身份重新在终端运行你的R脚本,检查数据库连接是否正常
    • 重启Shiny Server:
      sudo systemctl restart shiny-server
      
      再通过10....:3838/app1访问应用测试

额外排查点:

  • 如果你使用RJDBC或rJava包,确认它们绑定的Java环境和你修改的是同一个(可通过rJava::.jinit()查看)
  • 检查Shiny Server的运行用户(默认是shiny)是否有读取JCE政策文件的权限

内容的提问来源于stack exchange,提问作者Mário Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:33:19